curl --request POST \
--url https://api.cadanapay.com/v1/statutory/filings/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"businessId": "<string>",
"periodStart": "2026-02-01",
"periodEnd": "2026-02-28",
"payrollRunIds": [
"<string>"
],
"filings": [
{
"filingTypeId": "ft_mx_isr_monthly",
"amounts": {
"currency": "MXN",
"totalTax": 45000,
"employerContributions": 20000,
"employeeDeductions": 25000,
"penalties": 0,
"lineItems": [
{
"description": "ISR - Withholding per Artículo 96 table",
"amount": 12500,
"legislativeReference": "LISR, Artículo 96, Tabla mensual"
}
]
},
"personIds": [
"<string>"
]
}
],
"countryCode": "<string>",
"filingTypeIds": [
"<string>"
]
}
'{
"data": [
{
"id": "fil_01HQ3K4N7XYZABC",
"businessId": "biz_01HQ3K4N7XYZABC",
"countryCode": "MX",
"filingType": {
"id": "ft_mx_isr_monthly",
"name": "ISR Withholding",
"description": "ISR income tax withholding return filed monthly with SAT",
"governmentFormName": "Declaración Provisional ISR",
"authority": {
"id": "auth_mx_sat",
"name": "Servicio de Administración Tributaria",
"abbreviation": "SAT",
"countryCode": "MX",
"electronicSystem": "Portal del SAT"
},
"frequency": "MONTHLY",
"dueDay": 10,
"includesRemittance": true,
"legislativeReference": "Ley del Impuesto Sobre la Renta (LISR), Artículo 96"
},
"status": "upcoming",
"period": {
"start": "2026-01-01",
"end": "2026-01-31",
"label": "January 2026"
},
"dueAt": "2026-02-10T23:59:59Z",
"filedAt": "2023-11-07T05:31:56Z",
"amounts": {
"currency": "MXN",
"totalTax": 45000,
"employerContributions": 20000,
"employeeDeductions": 25000,
"penalties": 0,
"lineItems": [
{
"description": "ISR - Withholding per Artículo 96 table",
"amount": 12500,
"legislativeReference": "LISR, Artículo 96, Tabla mensual"
}
]
},
"blockedReasons": [
{
"code": "missing_tax_id",
"message": "SAT RFC (Registro Federal de Contribuyentes) is required for the business",
"requirementId": "req_01HQ3K4N7XYZABC",
"resourceType": "business",
"resourceId": "<string>",
"affectedField": "taxId"
}
],
"personIds": [
"per_01ABC",
"per_02DEF",
"per_03GHI"
],
"remittanceId": "<string>",
"amends": "<string>",
"amendedBy": "<string>",
"document": {
"url": "<string>",
"generatedAt": "2023-11-07T05:31:56Z"
},
"statusHistory": [
{
"status": "<string>",
"changedAt": "2023-11-07T05:31:56Z",
"actor": "<string>",
"blockedReasons": [
{
"code": "missing_tax_id",
"message": "SAT RFC (Registro Federal de Contribuyentes) is required for the business",
"requirementId": "req_01HQ3K4N7XYZABC",
"resourceType": "business",
"resourceId": "<string>",
"affectedField": "taxId"
}
]
}
],
"workerCount": 15,
"estimatedAmount": {
"currency": "<string>",
"amount": 123
},
"legislativeReferences": [
"Ley del Impuesto Sobre la Renta (LISR), Artículo 96",
"Resolución Miscelánea Fiscal, Regla 2.7.5.2"
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"skipped": [
{
"filingTypeId": "<string>",
"reason": "No workers with pensionable flag enabled"
}
]
}Creates statutory filings for a business and period in a single call. Supports two modes:
Cadana payroll: Provide payroll_run_ids — Cadana determines which
filing types apply based on active workers and their compensation flags
(IMSS-eligible, INFONAVIT-eligible, etc.) and pulls amounts from the tax engine.
External payroll: Provide a filings array with explicit amounts and
person IDs per filing type. Use this when the client runs payroll outside
Cadana and just needs Cadana to file and remit.
For example, a Mexican business with 15 employees would get up to 4 filings: ISR, IMSS, INFONAVIT, and ISN.
curl --request POST \
--url https://api.cadanapay.com/v1/statutory/filings/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"businessId": "<string>",
"periodStart": "2026-02-01",
"periodEnd": "2026-02-28",
"payrollRunIds": [
"<string>"
],
"filings": [
{
"filingTypeId": "ft_mx_isr_monthly",
"amounts": {
"currency": "MXN",
"totalTax": 45000,
"employerContributions": 20000,
"employeeDeductions": 25000,
"penalties": 0,
"lineItems": [
{
"description": "ISR - Withholding per Artículo 96 table",
"amount": 12500,
"legislativeReference": "LISR, Artículo 96, Tabla mensual"
}
]
},
"personIds": [
"<string>"
]
}
],
"countryCode": "<string>",
"filingTypeIds": [
"<string>"
]
}
'{
"data": [
{
"id": "fil_01HQ3K4N7XYZABC",
"businessId": "biz_01HQ3K4N7XYZABC",
"countryCode": "MX",
"filingType": {
"id": "ft_mx_isr_monthly",
"name": "ISR Withholding",
"description": "ISR income tax withholding return filed monthly with SAT",
"governmentFormName": "Declaración Provisional ISR",
"authority": {
"id": "auth_mx_sat",
"name": "Servicio de Administración Tributaria",
"abbreviation": "SAT",
"countryCode": "MX",
"electronicSystem": "Portal del SAT"
},
"frequency": "MONTHLY",
"dueDay": 10,
"includesRemittance": true,
"legislativeReference": "Ley del Impuesto Sobre la Renta (LISR), Artículo 96"
},
"status": "upcoming",
"period": {
"start": "2026-01-01",
"end": "2026-01-31",
"label": "January 2026"
},
"dueAt": "2026-02-10T23:59:59Z",
"filedAt": "2023-11-07T05:31:56Z",
"amounts": {
"currency": "MXN",
"totalTax": 45000,
"employerContributions": 20000,
"employeeDeductions": 25000,
"penalties": 0,
"lineItems": [
{
"description": "ISR - Withholding per Artículo 96 table",
"amount": 12500,
"legislativeReference": "LISR, Artículo 96, Tabla mensual"
}
]
},
"blockedReasons": [
{
"code": "missing_tax_id",
"message": "SAT RFC (Registro Federal de Contribuyentes) is required for the business",
"requirementId": "req_01HQ3K4N7XYZABC",
"resourceType": "business",
"resourceId": "<string>",
"affectedField": "taxId"
}
],
"personIds": [
"per_01ABC",
"per_02DEF",
"per_03GHI"
],
"remittanceId": "<string>",
"amends": "<string>",
"amendedBy": "<string>",
"document": {
"url": "<string>",
"generatedAt": "2023-11-07T05:31:56Z"
},
"statusHistory": [
{
"status": "<string>",
"changedAt": "2023-11-07T05:31:56Z",
"actor": "<string>",
"blockedReasons": [
{
"code": "missing_tax_id",
"message": "SAT RFC (Registro Federal de Contribuyentes) is required for the business",
"requirementId": "req_01HQ3K4N7XYZABC",
"resourceType": "business",
"resourceId": "<string>",
"affectedField": "taxId"
}
]
}
],
"workerCount": 15,
"estimatedAmount": {
"currency": "<string>",
"amount": 123
},
"legislativeReferences": [
"Ley del Impuesto Sobre la Renta (LISR), Artículo 96",
"Resolución Miscelánea Fiscal, Regla 2.7.5.2"
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"skipped": [
{
"filingTypeId": "<string>",
"reason": "No workers with pensionable flag enabled"
}
]
}Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Batch create filings. Two modes:
Mode 1 — Cadana payroll: Provide payroll_run_ids and Cadana
auto-determines filing types and amounts from the tax engine.
Mode 2 — External payroll: Provide filings array with explicit
amounts per filing type. Use this when the client runs payroll outside
Cadana and provides the data directly.
One of payroll_run_ids or filings must be provided.
"2026-02-01"
"2026-02-28"
Link to Cadana payroll runs. Cadana auto-determines filing types
and populates amounts from the tax engine.
Mutually exclusive with filings.
Explicit filing data for external payroll. Each entry specifies
the filing type, amounts, and workers. Use this when payroll
was run outside Cadana.
Mutually exclusive with payroll_run_ids.
Show child attributes
Limit to a specific jurisdiction. If omitted, creates filings for all jurisdictions where the business has active workers.
Limit to specific filing types (only applies when using
payroll_run_ids mode). If omitted, creates all applicable
filing types based on worker flags.