Reference: Catalogs & Statuses

Catalog tables, status lifecycles, and the consolidated error reference for the invoicing API.


Catalogs

Comprobante type (type)

Value SAT name What it's for
I Ingreso Standard revenue invoice — most common
E Egreso Credit note or refund reducing a prior Ingreso
T Traslado Goods-in-transit; typically paired with Carta Porte
N Nómina Payroll receipt
P Pago Payment receipt complement for PPD invoices

Payment method (payment_method)

Value SAT name Meaning
PUE Pago en una sola exhibición Fully settled at time of issue
PPD Pago en parcialidades o diferido Deferred or split payment; a REP (type P) will follow

Tax object (tax_object)

Value SAT name Meaning
01 No objeto de impuesto Not subject to any tax
02 Sí objeto de impuesto Subject to tax — include a taxes array
03 Sí objeto de impuesto y no obligado al desglose Subject to tax but breakdown not required (specific regimes)
04 Sí objeto del impuesto y no causa impuesto Subject to tax but does not generate tax liability

Tax type

Tax type values are lowercase in the API; they map to SAT c_Impuesto when the CFDI XML is built.

API value SAT c_Impuesto Tax name
iva 002 Impuesto al Valor Agregado
isr 001 Impuesto Sobre la Renta
ieps 003 Impuesto Especial sobre Producción y Servicios

Tax factor

Tax factor values are lowercase in the API; they map to SAT c_TipoFactor when the CFDI XML is built.

API value SAT c_TipoFactor When to use
rate Tasa Percentage rate applied to the base amount (e.g. IVA 16%)
quota Cuota Fixed amount per unit of measure (e.g. IEPS per litre)
exempt Exento Tax applies but rate is zero or exempt by law

Cancellation reasons

Code SAT name Notes
01 Comprobante emitido con errores con relación Error exists and a replacement CFDI was issued. replacement_uuid required
02 Comprobante emitido con errores sin relación Error exists, no replacement. Requires receiver acceptance
03 No se llevó a cabo la operación Transaction did not take place. Requires receiver acceptance
04 Operación nominativa relacionada en una factura global Consolidated in a global invoice. No receiver acceptance required

Other SAT catalogs

The following fields reference SAT catalogs. Consult the official source at sat.gob.mx/consultas/53693/catalogo-de-cfdi:

Field SAT catalog
issuer.fiscal_regime / receiver.fiscal_regime c_RegimenFiscal
receiver.cfdi_use c_UsoCFDI
receiver.tax_residence c_Pais
payment_form c_FormaPago
exportation c_Exportacion
related.type c_TipoRelacion
global.periodicity c_Periodicidad
global.months c_Meses
items[].product_code c_ClaveProdServ
items[].unit_code c_ClaveUnidad
carta_porte.goods.items[].product_code c_ClaveProdServCP
carta_porte.goods.weight_unit c_ClaveUnidadPeso
carta_porte.transport.permit_type c_TipoPermiso
carta_porte.transport.vehicle.config c_ConfigAutotransporte
carta_porte.locations[].address.state c_Estado
employee.contract_type c_TipoContrato
employee.regime_type c_TipoRegimen
employee.risk c_RiesgoTrabajo
employee.payment_periodicity c_PeriodicidadPago
perceptions[].perception_type c_TipoPercepcion
deductions[].deduction_type c_TipoDeduccion
other_payments[].other_payment_type c_TipoOtroPago

Statuses & lifecycle

Issued invoice status (status)

The lifecycle for house-issued invoices (source: house).

Status Meaning
draft Record created but stamping has not started
stamping CFDI submitted for stamping — in progress (transient, not visible in practice)
stamped SAT accepted the CFDI; uuid and certified_at are populated
stamp_failed Stamping was rejected or failed
cancelled SAT confirmed cancellation

The normal path is draft → stamping → stamped. Because stamping is synchronous, stamping is transient — you will see stamped or stamp_failed in the 201 or 502 response. cancelled is a terminal state reached only after the SAT confirms a cancellation request.

Cancellation process status (cancellation.process_status)

cancellation.process_status status Meaning
null stamped No cancellation has been requested
in_progress stamped Submitted; awaiting SAT or receiver confirmation
cancelled_without_acceptance cancelled SAT cancelled without requiring receiver acceptance (reasons 01 and 04)
cancelled_with_acceptance cancelled The receiver accepted the cancellation request
rejected stamped Receiver rejected; invoice remains active and billable
expired stamped 72-hour window elapsed without a response; invoice remains active

Extraction invoice statuses

SAT-downloaded invoices (source: extraction) carry three independent status dimensions.

status — fiscal state

Whether the CFDI is active or cancelled in SAT (estadoComprobante).

Value Meaning
current Active in SAT
cancelled Cancelled in SAT

cancellation_status — cancelability

Whether the CFDI can be cancelled (estatusCancelacion). Present on active invoices.

Value Meaning
cancelable_without_acceptance Can be cancelled without receiver acceptance
cancelable_with_acceptance Can be cancelled but requires receiver acceptance
not_cancelable Cannot be cancelled

cancellation_process_status — cancellation workflow

Set when a cancellation request exists (estatusProcesoCancelacion). null when none has been filed.

Value Meaning
in_progress Cancellation request is pending
rejected Receiver rejected the request
cancelled_without_acceptance Cancelled without receiver acceptance
cancelled_with_acceptance Cancelled with receiver acceptance
expired Acceptance period expired

Errors

All non-2xx responses carry a JSON body. Stamping and cancellation errors include a stable reason string and a human-readable message. Validation errors follow the standard errors envelope.

HTTP status reason Endpoint(s) When it happens What to do
401 — all Missing or invalid API credentials Include a valid Authorization header
404 — all Resource not found or belongs to a different org Verify the ID or entity_id
422 — (Laravel errors) all Request body failed validation Fix the fields listed in errors
422 no_csd issue, cancel The entity has no active CSD Upload a CSD via Credentials
422 csd_unreadable issue, cancel The stored CSD files could not be read from storage Re-upload the credential
422 csd_invalid issue, cancel The CSD could not be loaded — bad password or corrupt files Re-upload with the correct files and password
422 invalid_cfdi issue The CFDI complement failed schema validation (e.g. invalid Carta Porte data) Fix the complement data according to message
422 not_stamped cancel The invoice is not in stamped status Only stamped invoices can be cancelled
422 not_cancellable cancel The invoice is in a terminal state No further action possible
422 cancellation_in_progress cancel A cancellation request is already pending Poll GET /{id}/cancellation and wait
422 replacement_required cancel reason is 01 but replacement_uuid was not provided Include the replacement UUID
502 stamp_rejected issue The CFDI was rejected by the stamping authority Read message for the specific fault code
502 stamp_error issue An unexpected error during stamping Retry; contact support if it persists
502 cancel_rejected cancel The cancellation request was rejected Read message for details

Validation error shape (422, no reason):

{
  "message": "The items.0.taxes.0.type field must be one of: iva, isr, ieps.",
  "errors": {
    "items.0.taxes.0.type": [
      "The items.0.taxes.0.type field must be one of: iva, isr, ieps."
    ]
  }
}

Stamping / cancellation error shape (422 or 502, with reason):

{
  "message": "The entity has no active CSD credential.",
  "reason":  "no_csd"
}