Get an invoice
LiveServed by the v1 API in development with the same checks as production; production opens on the same contract. The capabilities from before v1 keep running in production at the path your account team gives you.
Returns the stamped invoice with its parties, items, totals and, if requested, its cancellation.
Needs the invoices:read scope.
oauth2 invoices:readAuthorizationBearer <token>OAuth 2.0 client credentials. Exchange your client_id and client_secret at /oauth/token of the environment for a bearer token valid for one hour. The playground of every operation asks for your own client and keeps it in your browser tab only.
Scope: invoices:read
id*stringThe invoice id.
^inv_[0-7][0-9a-hjkmnp-tv-z]{25}$OK
application/json- response
id*string^inv_[0-7][0-9a-hjkmnp-tv-z]{25}$external_id*stringYour own id for this invoice, as you sent it.
status*stringstamped once the SAT accepted it. After a cancellation: cancellation_requested while the receiver must accept it, then cancelled.
"stamped""cancellation_requested""cancelled"type*stringSAT c_TipoDeComprobante of the CFDI, as sent.
"I""E""P""T""N"uuid*stringFolio fiscal the SAT assigned.
uuidverification_url?stringSAT page that verifies the invoice.
uristamp*The SAT stamp (TimbreFiscalDigital). Print it on your own representation of the CFDI.
issuer*receiver*third_party?|The taxpayer on whose behalf it was issued, or null.
place_of_issue?stringPostal code where it was issued.
items*array<>related_invoices?array<>Invoices this one is related to. Empty when there are none.
payment_method*string"PUE""PPD"payment_form*stringcfdi_use*stringcurrency*"MXN""MXN"subtotal*stringSum of the items before taxes.
^[0-9]+\.[0-9]{2}$vat*stringVAT transferred.
^[0-9]+\.[0-9]{2}$withholdings?|Total withheld. Null when nothing is withheld.
total*stringsubtotal + vat − withholdings.
^[0-9]+\.[0-9]{2}$periodicity?stringGlobal invoices only.
months?stringGlobal invoices only.
year?stringGlobal invoices only.
cancellation?|Null until you request a cancellation.
metadata?As you sent it.
created_at*stringdate-timestamped_at*stringdate-timeupdated_at*stringdate-timecurl -X GET 'https://api.dev.b2b.heru.app/v1/invoices/inv_01m4ra8w8mfa8svf5396b2p5e1'{ "id": "inv_01m4ra8w8mfa8svf5396b2p5e1", "external_id": "INV-2026-000245", "status": "stamped", "type": "I", "uuid": "5829F7E9-4996-450C-BE13-9EE83FD56065", "verification_url": "https://verificacfdi.facturaelectronica.sat.gob.mx/default.aspx?id=5829F7E9-4996-450C-BE13-9EE83FD56065&re=PDE180514R21&rr=HEGL900101K44&tt=1160.00&fe=ydyupw==", "stamp": { "sat_certificate_number": "00001000000509465028", "issuer_certificate_number": "00001000000712345678", "pac_rfc": "SPR190613I52", "issuer_seal": "GHbnil3a0FVwE7ynElV7a/eMdiNsWGBg72T2sHjC6CSRg4CIP947uTmefzvTKPcAoTI9NKFKCAVRf/i6w0HP+Op7Twhh/i2cHOGUUMfWDh/ILDldff/tt7OVzRiunV/Mb8FIWL7yjvU4qWeLzhKSi3WhAAKI9wJW9DBBsid3Q9566BqAldbGgN9YIoPNTdFKPLj9CXK5uSWqnt5jcllVUx3CscBVdoxpCHXfGUN9blsdOXKQ8SV3lv4weMup2+moMzsHXiNTXR6iAkk+WycILJfBGOXk3EIu8+a2fp/IOW+KL6wmPcEEqumiNkK8LeXXtljmVnFMi236w0Fuydyupw==", "sat_seal": "i0o/7TJngD+XRxvsWYHvdAEuw4ozKSJToKkCo6M054CavGKcbwBzzoDvmKQXHsgOCtyRdv9aOGG/UrqBnAffWF36C2TatEaD1b4Y5A6X7KIROheWwr/5zbddOflrlufSQIySnPEzCmE+sgQ7So7RqXJmtpEGW+eXwjRH1YoF2h0TQ5jqGkpTSTjiyoRvMWvC/FPC9O9HJtsXiRHLxWWzQGvsWAXdYNwFYVvI4oXzj38quDonetE+bUi+Qu7KA/xJQdEwsvhdUn7JLoqzXqcKnp2306uy7GFD7Wl/1tMIBPiJqX8x06qXWMEa0WFWM3gWzI0PVtXRoBjYDF8pdwoHpA==", "original_chain": "||1.1|5829F7E9-4996-450C-BE13-9EE83FD56065|2026-10-12T09:04:08|SPR190613I52|GHbnil3a0FVwE7ynElV7a/eMdiNsWGBg72T2sHjC6CSRg4CIP947uTmefzvTKPcAoTI9NKFKCAVRf/i6w0HP+Op7Twhh/i2cHOGUUMfWDh/ILDldff/tt7OVzRiunV/Mb8FIWL7yjvU4qWeLzhKSi3WhAAKI9wJW9DBBsid3Q9566BqAldbGgN9YIoPNTdFKPLj9CXK5uSWqnt5jcllVUx3CscBVdoxpCHXfGUN9blsdOXKQ8SV3lv4weMup2+moMzsHXiNTXR6iAkk+WycILJfBGOXk3EIu8+a2fp/IOW+KL6wmPcEEqumiNkK8LeXXtljmVnFMi236w0Fuydyupw==|00001000000509465028||" }, "issuer": { "rfc": "PDE180514R21", "name": "PLATAFORMA DEMO", "tax_regime": "601", "postal_code": "11000" }, "receiver": { "rfc": "HEGL900101K44", "name": "JOSE LUIS HERNANDEZ GARCIA", "tax_regime": "612", "postal_code": "06600", "email": "joseluis.hernandez@cliente.example" }, "third_party": null, "place_of_issue": "11000", "items": [ { "description": "Servicio de consultoría", "quantity": 1, "unit_code": "E48", "unit_price": "1000.00", "product_code": "84111506", "tax_object": "02", "vat_rate": "0.16", "subtotal": "1000.00", "vat": "160.00", "withholdings": null } ], "related_invoices": [], "payment_method": "PUE", "payment_form": "03", "cfdi_use": "G03", "currency": "MXN", "subtotal": "1000.00", "vat": "160.00", "withholdings": null, "total": "1160.00", "cancellation": null, "metadata": {}, "created_at": "2026-10-12T15:04:05.208Z", "stamped_at": "2026-10-12T15:04:08.422Z", "updated_at": "2026-10-12T15:04:08.422Z"}List invoicesGET
Most recent first. Needs the `invoices:read` scope.
Get a download linkGET
Returns a signed link to the stamped invoice on `download.heru.app`, valid for 15 minutes. `format=xml` is the CFDI XML as the SAT stored it, the document with fiscal validity; `format=pdf` is a printable PDF with the SAT seal and the QR to verify it. Needs the `invoices:download` scope.