Validador de JSON
Pega el JSON que mandas a POST /invoice/create y revisa, antes de timbrar, si los importes cuadran y si el receptor cumple las reglas del SAT. Cada observación trae la clave de error que te devolvería el SAT o la API.
La revisión local corre en tu navegador mientras escribes. Usa datos de prueba: no hace falta poner los de tu cliente.
Revisión local
Sin observaciones en la revisión local.
Validar con la API de sandbox
Manda el JSON a la API v5 del sandbox, que arma el XML y lo valida contra el esquema del SAT como en producción, sin timbrarlo. No revisa la lista de RFC del SAT (CFDI40143 y similares): eso pasa al timbrar.
La validación con la API no está disponible en este momento. La revisión local sigue funcionando.
Qué revisa en tu navegador
- La estructura: que el texto sea JSON, que
Versionsea "4.0" y que estén los campos obligatorios del esquema del SAT. - Los catálogos chicos del SAT: c_TipoDeComprobante, c_Exportacion, c_Moneda, c_FormaPago, c_MetodoPago, c_RegimenFiscal, c_UsoCFDI, c_ObjetoImp, c_Impuesto, c_TipoFactor y c_Pais.
- Las reglas del receptor: forma del RFC, régimen contra el tipo de persona (CFDI40158), uso contra el régimen (CFDI40161) y las reglas del RFC genérico (CFDI40130, CFDI40146, CFDI40149, CFDI40159).
- La aritmética: Importe de cada concepto con los márgenes del SAT (CFDI40167), impuestos por concepto (CFDI40180), SubTotal (CFDI40108), traslados y retenciones globales (CFDI40205, CFDI40215, CFDI40221, CFDI40211) y Total (CFDI40119).
- Los decimales de cada importe contra los que permite la moneda (CFDI40107, CFDI40112, CFDI40220).
No revisa los catálogos grandes (c_ClaveProdServ, c_ClaveUnidad, c_CodigoPostal), los complementos ni la lista de RFC del SAT. Esos los valida la API al timbrar.
Qué hace la validación con la API
Manda tu JSON a POST /invoice/create del sandbox con OmitirTimbrado: "si". La API arma el XML, lo sella con el certificado de prueba de una cuenta del sandbox y lo valida contra el esquema del SAT, igual que en producción, pero se detiene antes de timbrar. Si algo falla, ves la misma respuesta que recibiría tu sistema: code, message y, en un 702, la lista errors.
- El emisor es el de la cuenta de pruebas del sandbox; tu JSON solo aporta
Emisor.RegimenFiscal. - Si mandas
Folio: "AUTO", se valida con el folio 1, porque las series automáticas dependen de cada cuenta. - No se mandan correos ni se usa una plantilla de PDF:
enviar_mailyplantilla_idse quitan antes de enviar. - Las validaciones contra la lista de RFC del SAT (CFDI40143 a CFDI40148) no corren aquí. Para verlas, timbra en tu cuenta de sandbox.
Revisado contra la API v5 en producción el 2026-11-03.