Before you record, pay, or deduct any stamped XML (stamping: the certification by a SAT-authorized provider that makes a CFDI valid), check its structure, seals, certificate validity, status with the SAT (Mexico's tax authority), and the issuer's standing on the SAT's Article 69-B lists. One call to the CFDI validation API (CFDI: Mexico's electronic invoice), seven official SAT criteria, one verdict per criterion.
A CFDI can carry a valid digital tax stamp (Timbre Fiscal Digital, the SAT seal the PAC adds to a CFDI) and still have no tax effect. The issuer may be listed as definitive on the Lista 69-B (the SAT list of taxpayers presumed to invoice nonexistent transactions). The CFDI may also have been canceled after delivery, it may have been sealed with a certificate that had already expired, or the XML may have been altered after it was signed. None of this shows up in the PDF that reaches accounts payable.
Request each validation by its ID. Each one runs against the SAT's official sources and returns a status, its description, and a pass/fail verdict. You pick which ones to run, and the response explains every verdict.
sat.xml.structureConfirms that the XML follows Anexo 20 (the SAT technical standard that defines the CFDI: its XML structure, catalogs, and validation rules) for its CFDI version, plus every complement (an XML extension the SAT defines for specific operations) it declares. Catches malformed or truncated XML and values outside the SAT catalogs before they reach your ERP.
sat.certificate.validityChecks that the CFDI was issued within the validity period of the issuer's CSD (the digital seal certificate used to sign CFDIs). A CFDI signed with an expired certificate isn't valid for tax purposes, even if its seal checks out.
sat.cfdi.selloVerifies that the digital seal (the issuer's signature over the CFDI, made with its CSD) matches the CFDI's content and the issuer's certificate. It guarantees that the XML you received hasn't changed since it was signed.
sat.tfd.selloVerifies that the digital tax stamp was issued by the SAT through a PAC (a SAT-authorized provider that stamps CFDIs) and wasn't forged or altered.
sat.cfdi.statusChecks the CFDI's current status: active (vigente: not canceled with the SAT), canceled, or not found. It's the only check that catches cancellations made after delivery.
sat.blacklist.69bIdentifies whether the issuer is listed as an EFOS (Empresas que Facturan Operaciones Simuladas, taxpayers that issue invoices for simulated transactions), with the official notice and the publication dates on the SAT portal and in the DOF (Mexico's official gazette).
sat.blacklist.69bbisIdentifies issuers on the Lista 69-B Bis (the SAT list of taxpayers presumed to have improperly transferred tax losses). Relevant to related-party transactions and corporate restructurings.
GET /api/v4/sat-validations returns the available criteria with their descriptions, so your integration doesn't depend on external documentation.Nothing to configure beforehand and no SAT catalogs or lists to load.
Call POST /api/v4/sat-validations with the CFDI in base64 and the criteria to run. To check only the Lista 69-B and Lista 69-B Bis, sending the issuer's RFC (Mexico's taxpayer ID) is enough.
Each validation returns type, status, and passed. The status description includes the facts behind it: official notice, publication dates, certificate number, and the SAT's response.
Block the posting, hold the payment, or open a review with the supplier. Keep the response as audit evidence.
Run only the checks you need: two criteria to screen suppliers against SAT blacklists, all seven to approve a payment. The cost changes with what you select.
Request body
The full CFDI in base64. Supports all seven criteria.
One validation per criterion checked. An HTTP 400 response doesn't consume validations.
Each result includes passed, a boolean that tells you whether that criterion was met: true means it was met, false means it wasn't.
{
"data": [
{
"type": {
"id": "sat.xml.structure",
"description": "Verifica mediante el servicio oficial de verificación de CFDI del SAT que el XML sea un documento bien formado y cumpla la estructura del Anexo 20 de su versión y la de los complementos declarados en schemaLocation. Detecta atributos obligatorios ausentes, valores fuera de catálogo y patrones inválidos."
},
"status": {
"id": "Valido",
"description": "Documento bien formado que cumple el XSD del Anexo 20 de su versión y los XSD de los complementos declarados en schemaLocation, según el verificador del SAT.",
"details": null
},
"passed": true
}
],
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}Example with fixed data: a CFDI that passes every technical check and still has no tax effect, because the issuer is on the definitive Lista 69-B. Available in the official SDKs for .NET, TypeScript/Node, Python, PHP, and Java, with a free test environment.
One verdict serves finance, procurement, compliance, and engineering.
Validate before you pay. Each supplier CFDI is checked when it arrives, and the result is attached to the payment order. CFDIs from issuers on the definitive Lista 69-B are stopped before they create a tax liability.
Continuous monitoring of your supplier base against the Lista 69-B and Lista 69-B Bis, with publication dates to calculate legal deadlines and document due diligence.
One endpoint, a stable response contract, and a catalog you can query. No SAT lists to maintain, no DOF to parse, and no cryptographic verification of seals and certificates to build.
Evidence for each CFDI to support deductions and IVA credits (IVA: Mexico's value-added tax, VAT; IVA credit: offsetting the IVA you paid against the IVA you charge) in a tax audit, and early visibility into supplier risk.
Structure and seals are checked with the SAT's verification services and status with the SAT's query service. The Lista 69-B and Lista 69-B Bis come from the official publications, with the cutoff date in every response.
CFDI invoicing, bulk CFDI download, and now CFDI validation, all in one place, with the same credentials and the same SDKs.
A fixed response contract, stable identifiers, and a public catalog. It fits batch jobs at period close and real-time validation as CFDIs arrive.
Every verdict includes the status description with the data behind it, ready to file alongside the CFDI.
Detailed documentation, official SDKs, and tools to help you integrate quickly.
Each validated criterion costs $0.50 MXN, IVA included. See pricing.
Take the next step
Sign up for the test environment, send an XML, and get the verdict on all seven criteria in seconds. No contract, no setup.