Fiscalapi

Validación CFDI: certeza fiscal
sobre cada factura que recibe tu empresa

Verifica estructura, sellos digitales, vigencia del certificado, estatus en el SAT y listas 69-B de cualquier XML timbrado antes de registrarlo, pagarlo o deducirlo. Una llamada a la API, siete criterios oficiales del SAT, un veredicto auditable por criterio.

Un CFDI timbrado no es, por sí mismo, un CFDI deducible.

Un comprobante puede tener un timbre válido y aun así carecer de efectos fiscales: porque el emisor fue publicado como definitivo en el listado 69-B, porque el comprobante fue cancelado después de entregado, porque el certificado con el que se selló ya había vencido, o porque el XML fue alterado después de firmarse. Ninguna de esas condiciones es visible en el PDF que llega a cuentas por pagar.

Las consecuencias no son técnicas: deducciones rechazadas, IVA no acreditable, créditos fiscales determinados en revisión y un plazo de 30 días hábiles para acreditar materialidad cuando un proveedor entra en lista definitiva. Validar en el momento de la recepción convierte ese riesgo en una decisión informada antes del pago.

Los siete criterios del SAT, un solo endpoint.

Cada validación se solicita por su identificador, se ejecuta contra las fuentes oficiales del SAT y devuelve un estado con su descripción y un resultado/veredicto binario. Tú eliges cuáles ejecutar; la respuesta explica cada veredicto.

Estructura del XML

sat.xml.structure

Confirma que el documento cumple el Anexo 20 de su versión y los complementos declarados. Descarta XML mal formados, truncados o con valores fuera de catálogo antes de que entren a tu ERP.

Vigencia del certificado del emisor

sat.certificate.validity

Comprueba que el CFDI fue emitido dentro del periodo de validez del certificado de sello digital. Un comprobante firmado con un certificado vencido no es válido aunque el sello verifique.

Sello del emisor

sat.cfdi.sello

Verifica que el sello corresponda al contenido y al certificado del emisor. Garantiza que el XML que recibiste no se modificó desde que se firmó.

Sello del SAT

sat.tfd.sello

Verifica que el Timbre Fiscal Digital fue emitido por el SAT a través de un PAC autorizado y no fue fabricado ni modificado.

Estatus en el SAT

sat.cfdi.status

Consulta el estado actual del comprobante (vigente, cancelado, no encontrado). Es la única forma de detectar cancelaciones posteriores a la entrega.

Listado 69-B (EFOS)

sat.blacklist.69b

Identifica si el emisor está publicado como Empresa que Facturan Operaciones Simuladas (EFOS), con oficio y fechas de publicación en portal SAT y DOF.

Listado 69-B Bis

sat.blacklist.69bbis

Identifica emisores publicados por transmisión indebida de pérdidas fiscales. Relevante en operaciones con partes relacionadas y reestructuras corporativas.

El catálogo es público y versionado: GET /api/v4/sat-validations devuelve los criterios disponibles con su descripción, para que tu integración no dependa de documentación externa.

Integración en tres pasos.

Sin configuración previa, sin cargar catálogos ni listas del SAT.

  1. 1

    Envía el XML

    Un POST /api/v4/sat-validations con el comprobante en base64 y la lista de criterios a ejecutar. Si solo necesitas consultar los listados 69-B y 69-B Bis, basta con enviar el RFC.

  2. 2

    Recibe un veredicto por criterio

    Cada validación regresa type, status y passed. La descripción del estado incluye los hechos que lo sustentan: oficio, fechas de publicación, número de certificado, respuesta del SAT.

  3. 3

    Decide con evidencia

    Bloquea el registro, condiciona el pago o abre una revisión con el proveedor, y conserva la respuesta como soporte de auditoría.

Simula la petición y mira la respuesta.

Valida solo lo que tu operación necesita: dos criterios para filtrar proveedores en listas negras, los siete para autorizar un pago. El costo cambia con lo que marcas.

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

Cuerpo de la petición

El CFDI completo en base64. Admite los siete criterios.

validationTypes
7 criterios · 7 créditos$3.50

Un crédito por criterio validado. Una respuesta http 400 no consume créditos.

sat.xml.structuresat.certificate.validitysat.cfdi.sellosat.tfd.sellosat.cfdi.statussat.blacklist.69b · Definitivosat.blacklist.69bbis

Cada resultado trae passed, un booleano que indica si ese criterio se cumplió: true lo cumple, false no.

{
  "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
    },
    {
      "type": {
        "id": "sat.certificate.validity",
        "description": "Comprueba que la fecha de emisión del CFDI esté comprendida entre NotBefore y NotAfter del certificado del emisor contenido en Certificado. Un CFDI firmado fuera de la vigencia del certificado carece de validez aunque el sello verifique."
      },
      "status": {
        "id": "Vigente",
        "description": "La fecha de emisión del CFDI está comprendida entre NotBefore y NotAfter del certificado del emisor.",
        "details": "Emisión 2026-08-18T11:56:42 (hora de México); certificado 30001000000500003416 de EKU9003173C9 vigente del 2023-05-12 al 2027-05-12"
      },
      "passed": true
    },
    {
      "type": {
        "id": "sat.cfdi.sello",
        "description": "Verifica mediante el servicio oficial de verificación de CFDI del SAT que el atributo Sello corresponda a la cadena original del comprobante y a la llave pública del certificado contenido en Certificado. Confirma que el contenido no fue alterado después de firmarse y que el firmante posee la llave privada de ese certificado."
      },
      "status": {
        "id": "Valido",
        "description": "El verificador del SAT confirma que el atributo Sello verifica contra la cadena original del comprobante con la llave pública del certificado del emisor.",
        "details": null
      },
      "passed": true
    },
    {
      "type": {
        "id": "sat.tfd.sello",
        "description": "Verifica mediante el servicio oficial de verificación de CFDI del SAT que el atributo SelloSAT del TimbreFiscalDigital corresponda al certificado del SAT identificado por NoCertificadoSAT. Confirma que el timbre fue emitido por el SAT a través de un PAC y no fue fabricado ni modificado."
      },
      "status": {
        "id": "Valido",
        "description": "El verificador del SAT confirma que el atributo SelloSAT verifica contra la cadena original del TimbreFiscalDigital con el certificado del SAT identificado por NoCertificadoSAT.",
        "details": null
      },
      "passed": true
    },
    {
      "type": {
        "id": "sat.cfdi.status",
        "description": "Consulta ConsultaCFDIService del SAT con UUID, RFC emisor, RFC receptor y total, y reporta el estado actual del comprobante. Es la única validación que refleja cancelaciones posteriores a la emisión."
      },
      "status": {
        "id": "Vigente",
        "description": "ConsultaCFDIService reporta el comprobante como Vigente; se incluyen EsCancelable y EstatusCancelacion devueltos por el SAT.",
        "details": "Estado Vigente; CodigoEstatus S - Comprobante obtenido satisfactoriamente.; EsCancelable Cancelable con aceptación; EstatusCancelacion "
      },
      "passed": true
    },
    {
      "type": {
        "id": "sat.blacklist.69b",
        "description": "Busca el RFC del emisor en el listado completo del artículo 69-B CFF y devuelve la situación vigente. Definitivo implica que los CFDI del emisor no producen efectos fiscales y activa el plazo de 30 días hábiles para el receptor."
      },
      "status": {
        "id": "Definitivo",
        "description": "El emisor no desvirtuó la presunción y fue publicado en el listado definitivo. Con efectos generales, sus comprobantes no producen ni produjeron efecto fiscal. El receptor cuenta con 30 días hábiles desde la publicación en el DOF para acreditar materialidad o corregirse (art. 69-B, párrafo octavo).",
        "details": "RFC EKU9003173C9; corte del listado 2026-07-31"
      },
      "passed": false
    },
    {
      "type": {
        "id": "sat.blacklist.69bbis",
        "description": "Busca el RFC del emisor en el listado del artículo 69-B Bis CFF (transmisión indebida del derecho a disminuir pérdidas fiscales) y devuelve la situación vigente. Relevante en operaciones con partes relacionadas y reestructuras."
      },
      "status": {
        "id": "NoListado",
        "description": "El RFC del emisor no figura en ninguna etapa del listado del artículo 69-B Bis al corte indicado.",
        "details": "RFC EKU9003173C9; corte del listado 2026-06-05"
      },
      "passed": true
    }
  ],
  "succeeded": true,
  "message": "",
  "details": "",
  "httpStatusCode": 200
}

Ejemplo con datos fijos: un comprobante que verifica en todo y aun así no produce efectos fiscales, porque el emisor está en el listado 69-B definitivo. Disponible en los SDK oficiales para .NET, TypeScript/Node, Python, PHP y Java, con sandbox de pruebas sin costo.

Para quién es la validación CFDI

Un mismo veredicto sirve a finanzas, compras, compliance e ingeniería.

Cuentas por pagar y procurement

Validar antes de pagar. Cada CFDI de proveedor se verifica al recibirse y el resultado acompaña la orden de pago; los comprobantes de emisores en lista definitiva se detienen antes de generar un pasivo fiscal.

Cadena de suministro y compliance de proveedores

Monitoreo continuo de tu base de proveedores contra los listados 69-B y 69-B Bis, con fechas de publicación para computar plazos legales y documentar la diligencia debida.

Tech leads y arquitectos

Un endpoint, un contrato de respuesta estable y un catálogo consultable. Sin mantener listas del SAT, sin parsear el DOF, sin implementar la verificación criptográfica de sellos y certificados.

Dirección financiera y fiscal

Evidencia por comprobante para sustentar deducciones y acreditamientos ante una revisión, y visibilidad temprana del riesgo por proveedor.

Por qué Fiscalapi

  • Fuentes oficiales, no aproximaciones

    Estructura y sellos mediante los servicios de verificación del SAT; estatus mediante el servicio de consulta del SAT; listados 69-B y 69-B Bis tomados de las publicaciones oficiales, con fecha de corte en cada respuesta.

  • Una plataforma para el ciclo completo del CFDI

    Emisión, descarga masiva y ahora validación con la misma cuenta, las mismas credenciales y los mismos SDK.

  • Diseñado para integrarse, no para consultarse a mano

    Contrato de respuesta fijo, identificadores estables y catálogo público; apto para procesos batch de cierre y para validación en línea al recibir.

  • Evidencia auditable

    Cada veredicto incluye la descripción del estado con los datos que lo fundamentan, lista para archivarse junto al comprobante.

Cada criterio ejecutado cuesta $0.50 MXN con IVA incluido, desde 200 validaciones. Consulta los planes de validación.

Preguntas frecuentes sobre la validación de CFDI

¿Qué diferencia hay entre validar un CFDI y timbrarlo?

El timbrado certifica un comprobante en el momento de su emisión. La validación verifica, en cualquier momento posterior, que el XML sigue siendo íntegro, vigente y fiscalmente efectivo: sellos, certificado, estatus en el SAT y situación del emisor en los listados del artículo 69-B.

¿Un CFDI de un emisor en el listado 69-B definitivo sigue siendo válido?

No produce efectos fiscales. El artículo 69-B del CFF establece que, publicado el listado definitivo, los comprobantes del emisor se consideran, con efectos generales, sin efecto fiscal alguno, y otorga al receptor 30 días hábiles para acreditar la materialidad de la operación o corregir su situación.

¿Con qué frecuencia se actualizan los listados 69-B y 69-B Bis?

Fiscalapi incorpora cada publicación oficial del SAT y devuelve la fecha de corte del listado en cada respuesta, de modo que tu sistema conoce la vigencia de la información con la que decide.

¿Puedo validar solo algunos criterios?

Sí. El request indica qué validaciones ejecutar y el catálogo completo se consulta en GET /api/v4/sat-validations. Para los listados 69-B y 69-B Bis puedes enviar únicamente el RFC del emisor, sin XML.

¿La validación modifica o almacena mi XML?

No. El comprobante se procesa únicamente para emitir el veredicto: no se altera y no se almacena ni el XML ni la respuesta durante la petición. Conservar el resultado como evidencia queda en manos de tu sistema.

Da el siguiente paso

Valida tu primer CFDI hoy.

Crea una cuenta de sandbox, envía un XML y recibe el veredicto de los siete criterios en segundos. Sin contrato, sin configuración.