Inicio rápido
En unos minutos timbras tu primer CFDI 4.0 en el sandbox, gratis y sin validez fiscal. Solo necesitas una terminal con curl y tu CSD a la mano.
1. Crea tu cuenta de sandbox
Regístrate en sandbox-app.facturadigital.com.mx/registro. El registro te pide tu Constancia de Situación Fiscal y tu Certificado de Sello Digital (CSD: .cer, .key y contraseña). No lo confundas con la e.firma.
El sandbox es una cuenta aparte de la de producción: sus CFDI se timbran con un proveedor de pruebas y nunca llegan al SAT.
2. Copia tu llave
En tu cuenta de sandbox, entra a Configuración › API y desarrolladores y copia la Llave vigente. Guárdala en una variable de entorno; es como una contraseña.
3. Comprueba la llave
export FD_API=https://sandbox-app.facturadigital.com.mx/api/v5
export FD_API_KEY="tu llave vigente"
curl -sS "$FD_API/account/balance" -H "X-Api-Key: $FD_API_KEY"{ "message": "10 credits available.", "balance": 10, "code": 200 }Si responde code 501, la llave no corresponde a esa URL: revisa que las dos sean del sandbox. Más en Llave y ambientes.
4. Timbra tu primer CFDI
Guarda este JSON como factura.json. Es una factura de ingreso con un concepto e IVA del 16 % a XENON INDUSTRIAL ARTICLES, un contribuyente de prueba que publica el SAT. Cambia Emisor.RegimenFiscal por tu régimen; el RFC y el nombre del emisor los pone la API desde tu cuenta.
{
"Version": "4.0",
"Serie": "A",
"Folio": "1",
"Fecha": "AUTO",
"FormaPago": "03",
"MetodoPago": "PUE",
"Moneda": "MXN",
"TipoDeComprobante": "I",
"Exportacion": "01",
"LugarExpedicion": "64000",
"SubTotal": "2501.00",
"Total": "2901.16",
"Emisor": { "RegimenFiscal": "601" },
"Receptor": {
"Rfc": "XIA190128J61",
"Nombre": "XENON INDUSTRIAL ARTICLES",
"DomicilioFiscalReceptor": "76343",
"RegimenFiscalReceptor": "601",
"UsoCFDI": "G03"
},
"Conceptos": [
{
"ClaveProdServ": "01010101",
"Cantidad": "2",
"ClaveUnidad": "H87",
"Descripcion": "Producto de prueba",
"ValorUnitario": "1250.50",
"Importe": "2501.00",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{ "Base": "2501.00", "Impuesto": "002", "TipoFactor": "Tasa", "TasaOCuota": "0.160000", "Importe": "400.16" }
]
}
}
],
"Impuestos": {
"TotalImpuestosTrasladados": "400.16",
"Traslados": [
{ "Base": "2501.00", "Impuesto": "002", "TipoFactor": "Tasa", "TasaOCuota": "0.160000", "Importe": "400.16" }
]
}
}curl -sS -X POST "$FD_API/invoice/create" \
-H "X-Api-Key: $FD_API_KEY" \
--data-urlencode "json@factura.json"{
"message": "The document was generated successfully",
"code": 200,
"cfdi": {
"UUID": "6F1A2B3C-4D5E-4F60-8172-93A4B5C6D7E8",
"FechaTimbrado": "2026-11-03T10:30:12",
"XmlBase64": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4…",
"PDF": "https://sandbox-app.facturadigital.com.mx/docs/pdf/6F1A2B3C-…",
"…": "…"
}
}cfdi.UUIDes el folio fiscal.cfdi.XmlBase64es el XML timbrado. Guárdalo en tu sistema.cfdi.PDFabre el PDF con tu plantilla.
5. Pasa a producción
- Crea tu cuenta en app.facturadigital.com.mx/registro: trae 10 folios de regalo.
- Copia la llave vigente de esa cuenta, en Configuración › API y desarrolladores.
- Cambia la URL base a
https://app.facturadigital.com.mx/api/v5y la llave. El resto del código es el mismo. - Cada CFDI timbrado usa 1 folio; cancelar no usa folio. Compra más folios en tu cuenta cuando los necesites; no caducan.
Siguientes pasos
Revisado contra la API v5 en producción el 2026-11-03.