curl --request GET \
--url https://api.cadanapay.com/v1/statutory/jurisdictions/{country_code}/required-fields \
--header 'Authorization: Bearer <token>'{
"countryCode": "MX",
"version": 3,
"fields": [
{
"key": "taxId",
"name": "RFC (Registro Federal de Contribuyentes)",
"description": "SAT-issued RFC, required on all ISR withholding returns",
"type": "string",
"required": true,
"entity": "person",
"scope": [
"calculation",
"filing"
],
"enum": [
"<string>"
],
"pattern": "^[A-Z&Ñ]{4}\\d{6}[A-Z0-9]{3}$",
"condition": {
"field": "is_pensionable",
"equals": true
}
}
],
"workerType": "employee"
}Returns all fields required for tax calculation and/or statutory filing in this jurisdiction. This is a discovery endpoint — it tells you what data needs to be collected for both persons (workers) and businesses (employers).
Each field includes:
entity — Who the field belongs to: person (worker data) or
business (employer data)scope — Whether the field is needed for calculation (tax engine input),
filing (statutory return), or bothcondition — When present, the field only applies if another field
matches a specific value (e.g. pension PIN only when is_pensionable is true)Use this to:
entity to build separate person vs. business formsworker_data requirements will surface if fields are missingHow to submit fields by scope:
scope: ["filing"] fields → Submit via
PUT /v1/statutory/persons/{id}/fields/{countryCode} (person entity) or
PUT /v1/statutory/businesses/{id}/fields/{countryCode} (business entity)scope: ["calculation"] fields → Submit via
PUT /v1/persons/{id}/taxProfilescope: ["filing", "calculation"] fields → Submit to both endpointscurl --request GET \
--url https://api.cadanapay.com/v1/statutory/jurisdictions/{country_code}/required-fields \
--header 'Authorization: Bearer <token>'{
"countryCode": "MX",
"version": 3,
"fields": [
{
"key": "taxId",
"name": "RFC (Registro Federal de Contribuyentes)",
"description": "SAT-issued RFC, required on all ISR withholding returns",
"type": "string",
"required": true,
"entity": "person",
"scope": [
"calculation",
"filing"
],
"enum": [
"<string>"
],
"pattern": "^[A-Z&Ñ]{4}\\d{6}[A-Z0-9]{3}$",
"condition": {
"field": "is_pensionable",
"equals": true
}
}
],
"workerType": "employee"
}Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
ISO 3166-1 alpha-2 country code
^[A-Z]{2}$Filter fields by worker type
employee, contractor Filter fields by scope — "calculation" for tax engine inputs, "filing" for statutory return fields. Omit to return all fields.
calculation, filing Required fields with entity, scope, type, and validation rules
Flat list of fields required for tax calculation and/or statutory filing in a jurisdiction. Each field includes its entity (person or business), scope (calculation, filing, or both), and validation rules.
Fields with entity: "person" are worker-level data. Fields with
entity: "business" are employer-level data. Use the entity field
to build separate onboarding forms for workers and employers.
"MX"
Schema version number, per jurisdiction. Increments when fields are added, removed, or changed for this country. Use this to detect when your cached field list is stale.
3
Show child attributes
employee, contractor "employee"