Partner APIendpoints.

Eleven surfaces under /api/v1/partner/**. JSON samples are illustrative and do not replace a live response.

Auth: Authorization: Bearer al_plt_… only (module partner_calculations, scope platform:read). Do not send X-Company-Id — this contract is platform-scoped, not tenant-scoped. Filtered OpenAPI (GET /api/partner/openapi) does not require it either.

Illustrative examples · contract_version=v1

POST/api/v1/partner/calculate/mx/payroll

Payroll

Computes ISR, IMSS, Infonavit, net pay and employer cost from a monthly gross salary.

AuthBearer al_plt_… · module partner_calculations · scope platform:read
  • Optional sundays_worked: Art. 71 sunday premium (25% of daily × N) with Art. 93 exemption of 1 UMA × N. Does not enter SBC/IMSS; added to net.
  • When an ISN catalog rate exists: isn_note = ISN_ESTIMATED. Missing rate: ISN_STATE_NOT_CONFIGURED.
Request body (illustrative)
{
  "gross_salary": 45000,
  "period": "monthly",
  "year": 2026,
  "worker_type": "employee",
  "state": "JAL",
  "include_employer_cost": true,
  "sundays_worked": 2
}
Response (illustrative)
{
  "year": 2026,
  "period": "monthly",
  "gross_salary_input": 45000,
  "gross_monthly": 45000,
  "isr_monthly": 7124.12,
  "imss_monthly": 1128.45,
  "net_salary_monthly": 37210.33,
  "sunday_premium_monthly": 750.00,
  "sunday_premium_exempt": 226.04,
  "sunday_premium_taxable": 523.96,
  "isn_rate_percent": 2.0,
  "isn_note": "ISN_ESTIMATED",
  "employer_cost": { "…": "employer breakdown" }
}
POST/api/v1/partner/calculate/mx/payroll-gross-up

Gross-up (net → gross)

Finds the monthly gross that yields a target net (± $0.01), with the same breakdown as payroll.

AuthBearer al_plt_… · module partner_calculations · scope platform:read
  • Input: target_net_monthly plus the same optionals as payroll (no gross_salary).
  • Search splits at the employment-subsidy income cliff.
Request body (illustrative)
{
  "target_net_monthly": 35000,
  "period": "monthly",
  "year": 2026,
  "worker_type": "employee",
  "state": "JAL"
}
Response (illustrative)
{
  "year": 2026,
  "period": "monthly",
  "target_net_monthly": 35000,
  "gross_monthly": 42180.55,
  "gross_salary_input": 42180.55,
  "net_salary_monthly": 35000.00,
  "isr_monthly": 6280.12,
  "imss_monthly": 900.43,
  "isn_note": "ISN_ESTIMATED"
}
POST/api/v1/partner/calculate/mx/severance

Severance / settlement

Simulates national finiquito and, when applicable, liquidation from dates and monthly gross.

AuthBearer al_plt_… · module partner_calculations · scope platform:read
Request body (illustrative)
{
  "hire_date": "2021-03-15",
  "termination_date": "2026-06-30",
  "monthly_gross": 45000,
  "termination_type": "dismissal"
}
Response (illustrative)
{
  "currency": "MXN",
  "include_liquidation": true,
  "isr_is_estimated": true,
  "tenure": {
    "years_worked": 5,
    "months_worked": 3,
    "hire_date": "2021-03-15",
    "termination_date": "2026-06-30",
    "monthly_gross": 45000
  },
  "finiquito": { "total": 18240.5 },
  "liquidation": { "total": 135000.0 },
  "totals": {
    "total_severance_amount": 153240.5,
    "total_taxes": 18420.0,
    "net_amount_to_pay": 134820.5
  }
}
POST/api/v1/partner/calculate/mx/employer-cost

Monthly employer cost

Returns only the employer-cost slice of the payroll path (employer IMSS, Infonavit, estimated ISN).

AuthBearer al_plt_… · module partner_calculations · scope platform:read
Request body (illustrative)
{
  "gross_salary": 45000,
  "year": 2026,
  "worker_type": "employee",
  "state": "JAL"
}
Response (illustrative)
{
  "year": 2026,
  "period": "monthly",
  "gross_monthly": 45000,
  "employer_cost": { "…": "employer breakdown" },
  "isn_rate_percent": 2.0,
  "isn_note": "ISN_ESTIMATED"
}
POST/api/v1/partner/calculate/mx/annual-employer-cost

Annual employer cost

Annualizes employment cost at year-1 LFT minimum (12 vacation days). Breaks out aguinaldo and vacation premium.

AuthBearer al_plt_… · module partner_calculations · scope platform:read
  • vacation_days_assumed = 12. Does not use the progressive tenure table.
Request body (illustrative)
{
  "monthly_gross": 45000,
  "year": 2026,
  "worker_type": "employee",
  "state": "JAL"
}
Response (illustrative)
{
  "year": 2026,
  "monthly_gross": 45000,
  "annual_salary": 540000,
  "annual_aguinaldo": 18493.15,
  "annual_vacation_premium": 3698.63,
  "annual_employer_imss": 98400.00,
  "annual_employer_infonavit": 27000.00,
  "annual_isn": 10800.00,
  "annual_total_employer_cost": 698391.78,
  "vacation_days_assumed": 12,
  "benefits_basis_note": "Year-1 LFT minimum (12 days). Not tenure table.",
  "isn_note": "ISN_ESTIMATED"
}
GET/api/v1/partner/catalog/mx/fiscal-parameters?year=2026

Fiscal parameters

UMA, minimum wages, days-per-month, integration factor and employment-subsidy cap/amount.

AuthBearer al_plt_… · module partner_calculations · scope platform:read
Response (illustrative)
{
  "year": 2026,
  "uma_daily": 113.14,
  "min_wage_general": 278.80,
  "min_wage_frontera": 419.19,
  "days_per_month_salary": 30.4,
  "employment_subsidy_income_cap": 11492.66,
  "employment_subsidy_pct_uma": 11.82,
  "employment_subsidy_monthly": 417.48
}
GET/api/v1/partner/catalog/mx/isr-brackets?year=2026&period=monthly

ISR brackets

National ISR brackets for the requested period.

AuthBearer al_plt_… · module partner_calculations · scope platform:read
Response (illustrative)
{
  "year": 2026,
  "period": "monthly",
  "bracket_type": "isr",
  "brackets": [
    {
      "lower_limit": 0.01,
      "upper_limit": 746.04,
      "fixed_fee": 0,
      "marginal_rate": 0.0192
    }
  ]
}
GET/api/v1/partner/catalog/mx/imss-employer-rates?year=2026

IMSS employer rates

Employer IMSS and Infonavit rates for the requested year.

AuthBearer al_plt_… · module partner_calculations · scope platform:read
Response (illustrative)
{
  "year": 2026,
  "fixed_em_rate_percent": 20.4,
  "em_excess_rate_percent": 1.1,
  "infonavit_employer_rate_percent": 5.0,
  "work_risk_rate_percent": 0.54355
}
GET/api/v1/partner/catalog/mx/municipalities?state=JAL

Municipalities

Municipality catalog by state (INEGI code / name).

AuthBearer al_plt_… · module partner_calculations · scope platform:read
Response (illustrative)
{
  "state": "JAL",
  "municipalities": [
    { "code": "14039", "name": "Guadalajara" },
    { "code": "14120", "name": "Zapopan" }
  ]
}
GET/api/v1/partner/health

Health

Partner contract liveness.

AuthBearer al_plt_… · module partner_calculations · scope platform:read
Response (illustrative)
{
  "status": "ok"
}
GET/api/v1/partner/version

Contract version

Identifies the published contract version (currently v1).

AuthBearer al_plt_… · module partner_calculations · scope platform:read
Response (illustrative)
{
  "contract_version": "v1"
}