Get a retention certificate
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 certificate with its status, the withheld taxes, the complement and the folio fiscal.
Needs the retention_certificates:read scope.
oauth2 retention_certificates: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: retention_certificates:read
id*stringThe retention certificate id.
^rtc_[0-7][0-9a-hjkmnp-tv-z]{25}$OK
application/json- response
id*string^rtc_[0-7][0-9a-hjkmnp-tv-z]{25}$external_id*stringYour own id, as you sent it.
status*stringstamped once the SAT accepted it; cancellation_requested while the SAT processes a cancellation; cancelled when the SAT confirmed it.
"stamped""cancellation_requested""cancelled"uuid*stringFolio fiscal the SAT assigned.
uuidverification_url*stringSAT page that verifies the certificate; tt is the total of the operation.
uristamp*The SAT stamp (TimbreFiscalDigital). Print it on your own representation of the CFDI.
issuer*receiver*place_of_issue*stringPostal code where it was issued.
period*Months the withholdings cover.
retention_code*stringdescription?string|nullamounts*Amounts of the operation the withholdings come from.
withheld_taxes*array<>total_withheld*stringSum of withheld_taxes.
^[0-9]+(\.[0-9]{1,6})?$related_certificates*array<>Certificates this one replaces. Empty when there are none.
platform?|The complement, with retention_code 26. Null otherwise.
cancellation?|Null until you request a cancellation.
metadata?created_at*stringdate-timestamped_at*stringdate-timeupdated_at*stringdate-timecurl -X GET 'https://api.dev.b2b.heru.app/v1/retention-certificates/rtc_01m4rdmjy8fr1tn1re492c0z4j'{ "id": "rtc_01m4rdmjy8fr1tn1re492c0z4j", "external_id": "RET-2026-000013", "status": "stamped", "uuid": "59C6F5BE-075D-4079-AD15-0B23A967A6C0", "verification_url": "https://prodretencionverificacion.clouda.sat.gob.mx/?id=59C6F5BE-075D-4079-AD15-0B23A967A6C0&re=PDE180514R21&rr=HEGL900101K44&tt=9450.00&fe=bHhBKA==", "stamp": { "sat_certificate_number": "00001000000509465028", "issuer_certificate_number": "00001000005687795825", "pac_rfc": "SPR190613I52", "issuer_seal": "qRXkuhx3RbYWauYlV3UAv8YYRvjAV0OeqDp8SEn2X5tYPZCbrQjOF9GvnTOUnTBr53h8COzlm4WlGNXHZnKMrSMP2KRbn3und/dzobPgK1mE27mgvpG9+prdYtgZ1vbnVecKX7PB8FiGUOJVbnGadEeyHT5GL/f+UO9IGz0Y2kho3p7UZDJS0XEp0HHfvQ3+YNCX/ysZq/KMyXBfJH7FFnTkPJ0YuzUZKEfu/oYXkCWGImuUJ8GiNS01jL4efi6KMhx6IV3FmIBGUxfm6minHYGuZjOxVh4ueD3rCvehLd2WEfYXaZjfR2HPG3XBvqzZUC1rMeNKAqMRBLcHbHhBKA==", "sat_seal": "id2m4j4hIMaLas7/UwcOfOaio62Zqf3HcmaE3p+GKIGYsX9ufiHiWyE6skSMwahtHqoccsgNyRswrrEBThzy9y041zLKaVl0cWNKdxbDTANj/Kh6MFrWrGityN2hUf0USvdD+MJvZKvVliajw7v/Az5W7PrgQSCC6Iz68oMU6/mbcFwdXVT82IJwNxM8E/944wi3mUG1Idcov035HY+sGIpMbLPZrfWa5LF5cH57hglwXcOXajvGLe433OKJSody7tZ81lXdzXoLYb4FEHha/JbqRyJuDTcTOb3MlqUMpHOYJwranp7KQn3kq7qncDEKiQrYOT6I0ts6JET4s93W7A==", "original_chain": "||1.1|59C6F5BE-075D-4079-AD15-0B23A967A6C0|2026-10-16T19:03:07|SPR190613I52|qRXkuhx3RbYWauYlV3UAv8YYRvjAV0OeqDp8SEn2X5tYPZCbrQjOF9GvnTOUnTBr53h8COzlm4WlGNXHZnKMrSMP2KRbn3und/dzobPgK1mE27mgvpG9+prdYtgZ1vbnVecKX7PB8FiGUOJVbnGadEeyHT5GL/f+UO9IGz0Y2kho3p7UZDJS0XEp0HHfvQ3+YNCX/ysZq/KMyXBfJH7FFnTkPJ0YuzUZKEfu/oYXkCWGImuUJ8GiNS01jL4efi6KMhx6IV3FmIBGUxfm6minHYGuZjOxVh4ueD3rCvehLd2WEfYXaZjfR2HPG3XBvqzZUC1rMeNKAqMRBLcHbHhBKA==|00001000000509465028||" }, "issuer": { "rfc": "PDE180514R21", "name": "PLATAFORMA DEMO", "tax_regime": "601", "postal_code": "11000" }, "receiver": { "rfc": "HEGL900101K44", "name": "JOSE LUIS HERNANDEZ GARCIA", "tax_regime": "625", "postal_code": "06600", "email": null }, "place_of_issue": "11000", "period": { "start_month": "09", "end_month": "09", "year": "2026" }, "retention_code": "26", "description": null, "amounts": { "total": "9450.00", "taxable": "9450.00", "exempt": "0.00" }, "withheld_taxes": [ { "tax": "ISR", "base": "9450.00", "rate": "0.021", "amount": "198.45", "payment_type": "04" }, { "tax": "VAT", "base": "1432.00", "rate": "0.5", "amount": "716.00", "payment_type": "01" } ], "total_withheld": "914.45", "related_certificates": [], "platform": { "service_type": "02", "periodicity": "02", "isr_payment_type": "04", "tips": "640.00", "period": { "from": "2026-09-01", "to": "2026-09-30" }, "services": [ { "date": "2026-09-06", "payment_form": "03", "price_without_vat": "2850.00", "vat_rate": "0.16", "vat": "456.00", "commission": { "base": "2850.00", "rate": "0.10", "amount": "285.00" }, "government_contribution": null }, { "date": "2026-09-13", "payment_form": "03", "price_without_vat": "3120.00", "vat_rate": "0.16", "vat": "499.20", "commission": { "base": "3120.00", "rate": "0.10", "amount": "312.00" }, "government_contribution": null }, { "date": "2026-09-20", "payment_form": "03", "price_without_vat": "2980.00", "vat_rate": "0.16", "vat": "476.80", "commission": { "base": "2980.00", "rate": "0.10", "amount": "298.00" }, "government_contribution": null }, { "date": "2026-09-27", "payment_form": "09", "price_without_vat": "500.00", "vat_rate": null, "vat": null, "commission": null, "government_contribution": null } ], "totals": { "services": 4, "price_without_vat": "9450.00", "vat_transferred": "1432.00", "vat_withheld": "716.00", "isr_withheld": "198.45", "vat_delivered": "716.00", "platform_fees": "895.00", "government_contributions": "0.00" } }, "cancellation": null, "metadata": {}, "created_at": "2026-10-16T19:03:07Z", "stamped_at": "2026-10-16T19:03:07Z", "updated_at": "2026-10-16T19:03:07Z"}List retention certificatesGET
Most recent first. For the monthly reconciliation, filter by `period` and page through with `cursor`; add `status=stamped` to leave out cancellations. Needs the `retention_certificates:read` scope.
Get a download linkGET
Returns a signed link to the stamped certificate on `download.heru.app`, valid for 15 minutes. `format=xml` is the CFDI as the SAT stored it, the document with fiscal validity; `format=pdf` is a printable version with the SAT seal and the QR to verify it. The files are never at a public address: request a new link each time someone needs them. Needs the `retention_certificates:download` scope.