Cancel an invoice
Request SAT cancellation of a stamped CFDI with a motivo (01-04). Reason “01” requires substitute_invoice_id. Cancellation may be asynchronous — the invoice cancellation.status moves to cancel_pending while the receptor/SAT window resolves; poll or watch webhooks for the final state.
Authorizations
API key: Authorization: Bearer sk_test_... or sk_live_....
Headers
Pin a dated API release (Stripe-style). Omit to use the current version. An unknown value returns 400 request.invalid_version. Echoed back on every response.
"2026-07-10"
Connect: act on behalf of one of your connected accounts (its acct_…/org_… id). Omit to act as your own organization. Not honored on /v1/api_keys.
"org_2P9connectedacct"
Safely retry any POST. The first response is stored for 24h and replayed byte-for-byte for identical retries (the replay adds an idempotent-replayed: true header). Reusing the key with a different body is 409 idempotency.key_reuse; an in-flight duplicate is 409 idempotency.key_processing. This makes retrying a 502/429 safe — no duplicate stamp.
"a1b2c3d4-e5f6-4789-8abc-1234567890ab"
Path Parameters
Invoice id, e.g. "inv_2P9K3sample".
1Body
SAT motivo de cancelación: "01" con errores con relación (needs substitute_invoice_id), "02" con errores sin relación, "03" no se llevó a cabo la operación, "04" operación nominativa relacionada en una factura global.
01, 02, 03, 04 The replacement CFDI id; required when reason is "01" (con errores con relación).
1Response
Default Response
Always "invoice".
invoice Invoice id, e.g. "inv_2P9K3sample".
True if stamped with a live-mode key against the real SAT.
Lifecycle status: draft, stamping (in flight), stamped, or stamp_failed.
draft, stamping, stamped, stamp_failed CFDI TipoDeComprobante: "I" ingreso, "E" egreso (nota de crédito), "P" pago.
I, E, P Id of the fiscal profile (issuer) that stamped this invoice.
CFDI Serie, or null if unset.
CFDI Folio, or null if unset.
The receptor (customer) as stamped onto the CFDI.
c_Moneda currency code, e.g. "MXN".
Sum of line amounts before taxes, decimal string, e.g. "100.00".
Grand total including taxes, decimal string, e.g. "116.00".
SAT folio fiscal (UUID) once stamped, else null.
When the CFDI was stamped (ISO-8601 UTC), or null.
Issuer digital seal (Sello del CFDI), or null.
SAT digital seal from the TimbreFiscalDigital, or null.
SAT certificate serial that timbró the CFDI, or null.
Cancellation status for this CFDI.
The last stamping error (problem+json shape) when status is stamp_failed, else null.
Path to download the CFDI XML, e.g. "/v1/invoices/:id/xml".
Path to download the CFDI PDF, e.g. "/v1/invoices/:id/pdf".
Integrator-owned key-value map echoed back.
Creation timestamp, ISO-8601 UTC.
Last-update timestamp, ISO-8601 UTC.
The full issuer profile — present only when ?expand=fiscal_profile is requested.