FISCALISTO / API
Nómina
Dé de alta a sus empleados y timbre sus recibos de nómina ordinaria (CFDI tipo N con Nómina 1.2): el ISR, el subsidio para el empleo y las cuotas del IMSS los calcula Fiscalisto.
Un recibo de nómina es un CFDI de tipo N con el complemento Nómina 1.2. Usted manda el empleado y el periodo; Fiscalisto calcula el sueldo de los días pagados, el ISR con la tarifa del artículo 96 y el subsidio para el empleo vigente, y las cuotas obreras del IMSS, como Nómina › Emitir recibos en la app. Nunca timbra montos que usted escriba a mano, así que un recibo siempre cuadra con lo que pide el SAT.
Cada recibo usa un timbre, como cualquier factura. En pruebas se timbra con los emisores de prueba del SAT, sin costo.
Antes del primer recibo
El emisor necesita su registro patronal del IMSS (11 caracteres) y, si es persona física, su CURP:
curl https://api.fiscalisto.com/v1/issuers/iss_OufpKqnrvx9p \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "employer_registration": "Y5412345109" }'Sin él, un recibo contesta 422 payroll_invalid y lo dice.
Dar de alta un empleado
curl https://api.fiscalisto.com/v1/employees \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"number": "9",
"name": "Ana Gómez Ruiz",
"tax_id": "GORA800101AB1",
"curp": "GORA800101MDFMZN09",
"social_security_number": "12345678903",
"zip": "06000",
"email": "ana@example.com",
"start_date": "2024-03-04",
"daily_salary": 320,
"integrated_daily_salary": 334.66,
"periodicity": "04",
"state": "CMX"
}'El nombre, el RFC y el código postal van como en la constancia de situación fiscal del empleado: el SAT los compara. Lo que no mande tiene el valor usual de Nuevo empleado:
| Campo | Por omisión | Qué es |
|---|---|---|
contract_type | 01 | Contrato por tiempo indeterminado (c_TipoContrato). |
workday_type | 01 | Jornada diurna (c_TipoJornada). |
periodicity | 04 | Quincenal. También 02 semanal, 03 catorcenal y 05 mensual. |
risk_class | 1 | Clase de riesgo del puesto ante el IMSS, de 1 a 5. |
border_zone | false | Si trabaja en la zona libre de la frontera norte (salario mínimo de la zona). |
La respuesta trae warnings con lo que el SAT podría rechazar antes de timbrar, por ejemplo un RFC o una CURP cuyo dígito verificador no corresponde. No impiden guardarlo: revíselos con el empleado.
Un RFC o un número de empleado que ya existe en el emisor contesta 400 employee_exists. Para cambiar un salario o dar de baja (end_date), use POST /v1/employees/{id} con solo lo que cambia; los recibos ya timbrados no cambian.
Ver el recibo antes de timbrarlo
curl https://api.fiscalisto.com/v1/payroll_receipts/preview \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"employee": "emp_OufpKqnrvx9p4gtWHOcPMsq25QUp6Licjr",
"period": { "start": "2026-10-01", "end": "2026-10-15" }
}'Contesta el recibo como se timbraría, sin timbrar ni usar timbres:
{
"object": "payroll_receipt_preview",
"periodicity": "04",
"period": { "start": "2026-10-01", "end": "2026-10-15", "payment_date": "2026-10-15" },
"days": 15,
"perceptions": [{ "type": "001", "key": "001", "concept": "Sueldo", "taxed": 4800, "exempt": 0 }],
"deductions": [
{ "type": "001", "key": "001", "concept": "Cuotas IMSS", "amount": 119.21 },
{ "type": "002", "key": "002", "concept": "ISR", "amount": 80.85 }
],
"isr": { "tariff": 345.15, "subsidy": 264.3, "withheld": 80.85, "exempt_minimum": false },
"totals": { "perceptions": 4800, "deductions": 200.06, "net": 4599.94 }
}isr.tariff es el ISR de la tarifa, isr.subsidy el subsidio para el empleo que le toca y isr.withheld lo que se le retiene. El periodo va en hora de la Ciudad de México; payment_date (la fecha de pago) es su último día si no la manda, y days son todos los días pagables del periodo (sin los anteriores a su ingreso ni los posteriores a su baja). Mande days para pagar menos, por ejemplo con faltas.
Timbrarlo
curl https://api.fiscalisto.com/v1/payroll_receipts \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: nomina-2026-10-q1-9" \
-d '{
"employee": "emp_OufpKqnrvx9p4gtWHOcPMsq25QUp6Licjr",
"period": { "start": "2026-10-01", "end": "2026-10-15" },
"send_email": true,
"metadata": { "corrida": "2026-19" }
}'La respuesta es una factura de type: "N" con su uuid, su PDF y su XML, y con el recibo en payroll. Llega también el webhook invoice.stamped. Con send_email el empleado recibe el PDF y el XML en su email; si no tiene, contesta 400 parameter_missing antes de timbrar.
Un empleado tiene un solo recibo por periodo: pedirlo otra vez (aun con otra Idempotency-Key) contesta el que ya tiene, sin timbrar otro. Un periodo que se cruza con otro recibo vigente del mismo empleado, o más largo que su periodicidad (un mes en una nómina semanal), contesta payroll_invalid, para no pagar dos veces los mismos días.
Corregir un recibo
Un recibo timbrado no se edita. Cancélelo con POST /v1/invoices/{id}/cancel (no pide aceptación del empleado) y vuelva a timbrar el periodo: un periodo con su recibo cancelado se puede timbrar de nuevo.
Listarlos
Los recibos son facturas de tipo N: GET /v1/invoices?type=N los da, los más recientes primero, y GET /v1/employees a los empleados.
Lo que no hace
- Nómina extraordinaria (aguinaldo, finiquito, PTU): solo nómina ordinaria.
- Percepciones o deducciones que usted escriba (bonos, préstamos, Infonavit): el recibo lleva el sueldo, el ISR, el subsidio y las cuotas del IMSS.
Pagos y notas de crédito
Registre los pagos de sus facturas PPD con complementos de pago y los descuentos o devoluciones con notas de crédito.
Constancias de retenciones
Timbre la constancia de retenciones e información de pagos (CFDI de Retenciones 2.0) de lo que retuvo a un proveedor: honorarios, arrendamiento, dividendos, intereses o pagos al extranjero.