Payroll (Nómina / Type N)
Issue a CFDI type N with Complemento de Nómina 1.2 to document a payroll disbursement. Use the same single endpoint as all other invoice types.
POST /v1/issued-invoices
Example
{
"entity_id": "9b1c0e2a-4d3f-4a1b-8c2d-1e2f3a4b5c6d",
"type": "N",
"series": "N",
"folio": "42",
"issuer": {
"fiscal_regime": "601",
"place_of_issue": "06600"
},
"employee": {
"rfc": "GOHJ800101AA1",
"name": "JUAN GOMEZ HERNANDEZ",
"postal_code": "06600",
"curp": "GOHJ800101HDFMRN02",
"social_security_number": "12345678901",
"start_date": "2020-01-15",
"seniority": "P6Y5M",
"contract_type": "01",
"regime_type": "02",
"employee_number": "EMP-001",
"department": "Engineering",
"position": "Software Engineer",
"risk": "1",
"payment_periodicity": "04",
"base_salary": 600.00,
"integrated_daily_salary": 720.00,
"state": "DF"
},
"payroll": {
"type": "O",
"paid_at": "2026-07-01",
"period_start": "2026-06-16",
"period_end": "2026-06-30",
"days_paid": 15
},
"employer": {
"registration_number": "B071234560",
"rfc_origin": "AAA010101AAA"
},
"perceptions": [
{
"perception_type": "001",
"key": "TIME",
"concept": "Regular salary",
"taxed_amount": 9000.00,
"exempt_amount": 0.00
}
],
"deductions": [
{
"deduction_type": "002",
"key": "ISR-W",
"concept": "ISR withholding",
"amount": 1260.00
}
],
"other_payments": [
{
"other_payment_type": "002",
"key": "SUB",
"concept": "Employment subsidy",
"amount": 0.00,
"employee_subsidy": 0.00
}
]
}
Response: 201 Created with the same shape as other types. type will be N; payment_form and payment_method will be null.
Fields for type N
Employee (employee)
| Field |
Type |
Required |
Description |
employee.rfc |
string |
yes |
Employee RFC. |
employee.name |
string |
yes |
Employee full legal name. |
employee.postal_code |
string |
yes |
Employee tax domicile postal code. |
employee.curp |
string |
yes |
Employee CURP, exactly 18 characters. |
employee.social_security_number |
string |
no |
IMSS social security number (NumSeguridadSocial). |
employee.start_date |
date |
yes |
Employment start date (FechaInicioRelLaboral), YYYY-MM-DD. |
employee.seniority |
string |
yes |
Seniority as ISO 8601 duration (e.g. P6Y5M for 6 years 5 months). |
employee.contract_type |
string |
yes |
SAT c_TipoContrato code (e.g. 01 indefinite). |
employee.regime_type |
string |
yes |
SAT c_TipoRegimen code. |
employee.employee_number |
string |
yes |
Internal employee identifier (NumEmpleado). |
employee.department |
string |
no |
Department or cost-centre. |
employee.position |
string |
no |
Job position / role. |
employee.risk |
string |
yes |
IMSS occupational risk class, SAT c_RiesgoTrabajo code. |
employee.payment_periodicity |
string |
yes |
SAT c_PeriodicidadPago code (e.g. 04 monthly). |
employee.base_salary |
number |
yes |
Daily base salary. Must be ≥ 0. |
employee.integrated_daily_salary |
number |
yes |
Integrated daily wage including fringe benefits. Must be ≥ 0. |
employee.state |
string |
yes |
SAT c_Estado code for the state where the employee works. |
Payroll (payroll)
| Field |
Type |
Required |
Description |
payroll.type |
string |
yes |
O (ordinary) or E (extraordinary). |
payroll.paid_at |
date |
yes |
Payment date (FechaPago), YYYY-MM-DD. |
payroll.period_start |
date |
yes |
Start of pay period (FechaInicialPago), YYYY-MM-DD. |
payroll.period_end |
date |
yes |
End of pay period (FechaFinalPago), YYYY-MM-DD. |
payroll.days_paid |
number |
yes |
Days covered by this receipt (NumDiasPagados). Must be ≥ 0. |
Employer (employer) — optional
| Field |
Type |
Required |
Description |
employer.registration_number |
string |
no |
IMSS registration number (RegistroPatronal). |
employer.rfc_origin |
string |
no |
RFC of the original employer when employment was transferred (RfcPatronOrigen). |
Perceptions (perceptions[]) — at least one required
| Field |
Type |
Required |
Description |
perceptions[].perception_type |
string |
yes |
SAT c_TipoPercepcion code (e.g. 001 salary). |
perceptions[].key |
string |
yes |
Internal employer key for this perception concept. |
perceptions[].concept |
string |
yes |
Human-readable description. |
perceptions[].taxed_amount |
number |
yes |
Taxed portion (ImporteGravado). Must be ≥ 0. |
perceptions[].exempt_amount |
number |
yes |
Exempt portion (ImporteExento). Must be ≥ 0. |
Deductions (deductions[]) — optional
| Field |
Type |
Required |
Description |
deductions[].deduction_type |
string |
yes |
SAT c_TipoDeduccion code (e.g. 002 ISR). |
deductions[].key |
string |
yes |
Internal employer key. |
deductions[].concept |
string |
yes |
Human-readable description. |
deductions[].amount |
number |
yes |
Deduction amount. Must be ≥ 0. |
Other payments (other_payments[]) — optional
| Field |
Type |
Required |
Description |
other_payments[].other_payment_type |
string |
yes |
SAT c_TipoOtroPago code (e.g. 002 employment subsidy). |
other_payments[].key |
string |
yes |
Internal employer key. |
other_payments[].concept |
string |
yes |
Human-readable description. |
other_payments[].amount |
number |
yes |
Amount. Must be ≥ 0. |
other_payments[].employee_subsidy |
number |
no |
Employment subsidy amount (SubsidioEmpleo). Applicable when other_payment_type is 002. Must be ≥ 0. |
Related pages