Fiscalapi

CFDI validation for every invoice your company receives

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 stamped CFDI isn't automatically a deductible one.

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.

Seven SAT criteria, one endpoint.

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.

XML structure

sat.xml.structure

Confirms 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.

Issuer certificate validity

sat.certificate.validity

Checks 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.

Issuer's digital seal

sat.cfdi.sello

Verifies 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 seal

sat.tfd.sello

Verifies 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 status

sat.cfdi.status

Checks 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.

Lista 69-B (EFOS)

sat.blacklist.69b

Identifies 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).

Lista 69-B Bis

sat.blacklist.69bbis

Identifies 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.

The catalog is public and versioned: GET /api/v4/sat-validations returns the available criteria with their descriptions, so your integration doesn't depend on external documentation.

Integrate in three steps.

Nothing to configure beforehand and no SAT catalogs or lists to load.

  1. 1

    Send the XML

    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.

  2. 2

    Get a verdict per criterion

    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.

  3. 3

    Decide with evidence

    Block the posting, hold the payment, or open a review with the supplier. Keep the response as audit evidence.

Simulate the request and see the response.

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.

POST https://test.fiscalapi.com/api/v4/sat-validations200 OKJSON

Request body

The full CFDI in base64. Supports all seven criteria.

validationTypes
1 criterion · 1 validation$0.50 MXN

One validation per criterion checked. An HTTP 400 response doesn't consume validations.

sat.xml.structure

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.

Who CFDI validation is for

One verdict serves finance, procurement, compliance, and engineering.

Accounts payable and procurement

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.

Supply chain and supplier compliance

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.

Tech leads and architects

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.

Finance and tax leadership

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.

Why Fiscalapi

  • Official sources, not approximations

    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.

  • One platform for the full CFDI lifecycle

    CFDI invoicing, bulk CFDI download, and now CFDI validation, all in one place, with the same credentials and the same SDKs.

  • Built for integration, not manual checks

    A fixed response contract, stable identifiers, and a public catalog. It fits batch jobs at period close and real-time validation as CFDIs arrive.

  • Auditable evidence

    Every verdict includes the status description with the data behind it, ready to file alongside the CFDI.

Each validated criterion costs $0.50 MXN, IVA included. See pricing.

Frequently asked questions about CFDI validation

What's the difference between validating a CFDI and stamping it?

Stamping certifies a CFDI at the moment it's issued. Validation checks, at any later time, that the XML is still intact, active, and effective for tax purposes: seals, certificate, status with the SAT, and the issuer's standing on the Article 69-B lists.

Is a CFDI from an issuer on the definitive Lista 69-B still valid for tax purposes?

It has no tax effect. Under Article 69-B of the CFF (Código Fiscal de la Federación, Mexico's Federal Tax Code), once the definitive list is published, the issuer's CFDIs are deemed, with general effect, to have no tax effect at all. The recipient then has 30 business days to prove that the transaction took place or to correct its tax situation.

How often are the Lista 69-B and Lista 69-B Bis updated?

Fiscalapi incorporates every official SAT publication and returns the list's cutoff date in every response, so your system knows how current the information behind each decision is.

Can I validate only some criteria?

Yes. The request states which validations to run, and you can query the full catalog at GET /api/v4/sat-validations. For the Lista 69-B and Lista 69-B Bis, you can send only the issuer's RFC, without the XML.

Does validation modify or store my XML?

No. The CFDI is processed only to issue the verdict: it isn't altered, and neither the XML nor the response is stored during the request. Keeping the result as evidence is up to your system.

Take the next step

Validate your first CFDI today.

Sign up for the test environment, send an XML, and get the verdict on all seven criteria in seconds. No contract, no setup.