Node.js
SDK oficial · Nuevo
Para integrar la API v5 en tu backend de Node.js.
Llama a la API v5 de timbrado CFDI 4.0 desde tu lenguaje, sin armar las peticiones a mano. Misma API, misma llave X-Api-Key y sandbox gratis. Pagas folios, no la API.
Así se ve la llamada a POST /invoice/create con el cliente HTTP de cada lenguaje: tu llave en el header X-Api-Key y el CFDI en el campo json. El SDK oficial hace esta llamada por ti; la instalación y los métodos están en la documentación.
import { readFile } from "node:fs/promises"; const factura = await readFile("factura.json", "utf8"); const res = await fetch( "https://app.facturadigital.com.mx/api/v5/invoice/create", { method: "POST", headers: { "X-Api-Key": process.env.FD_API_KEY }, body: new URLSearchParams({ json: factura }), }); const { cfdi } = await res.json();console.log(cfdi.UUID);$factura = file_get_contents('factura.json'); $ch = curl_init( 'https://app.facturadigital.com.mx/api/v5/invoice/create');curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['X-Api-Key: ' . getenv('FD_API_KEY')], CURLOPT_POSTFIELDS => http_build_query(['json' => $factura]),]); $res = json_decode(curl_exec($ch), true);echo $res['cfdi']['UUID'];import os, requests with open("factura.json") as f: factura = f.read() res = requests.post( "https://app.facturadigital.com.mx/api/v5/invoice/create", headers={"X-Api-Key": os.environ["FD_API_KEY"]}, data={"json": factura},) print(res.json()["cfdi"]["UUID"])Cada SDK llama a la misma API v5: mismos endpoints, misma llave X-Api-Key y mismas respuestas. ¿Usas otro lenguaje? La API funciona con cualquier cliente HTTPS.
SDK oficial · Nuevo
Para integrar la API v5 en tu backend de Node.js.
SDK oficial · Nuevo
Para integrar la API v5 en tu sistema en PHP sin armar las peticiones con curl.
SDK oficial · Nuevo
Para integrar la API v5 en tu sistema o tus scripts en Python.
Mismos endpoints, misma llave X-Api-Key y mismas respuestas que la API documentada.
Integra contra el sandbox, que timbra con un PAC de pruebas; esos CFDI no tienen validez fiscal.
El SDK no tiene costo. Cada CFDI timbrado usa 1 folio y tus folios no caducan.
Si un PAC no responde, tu CFDI se timbra igual. Tu código no cambia.
Con el método JSON de la API v5 envías los datos del comprobante y lo demás ya está resuelto.
Envías los datos del CFDI en JSON; la API arma el XML, lo sella con tu CSD y lo timbra.
Folio y Fecha aceptan el valor "AUTO"; en Carta Porte, también el IdCCP.
Recibes el UUID, el XML en Base64 y las ligas al PDF y al XML. El PDF sale con la plantilla que elijas.
Con enviar_mail, el CFDI se envía a tu cliente en el mismo paso.
Si el CFDI no cumple el esquema del SAT, no se timbra: la respuesta trae code 702 y la lista errors con el elemento y el campo de cada error.
Recibo de pago 2.0, nómina 1.2, Carta Porte 3.1, Comercio Exterior 2.0 y los demás complementos vigentes.
Referencia de la API v5 y guía de cada SDK en docs.facturadigital.com.mx.
Si te atoras con la integración, te atiende alguien del equipo en el +52 81 2044 5452.
También nuevo: avisos cuando se timbra, cancela o paga un CFDI, y conexión con Claude, ChatGPT o Gemini.
Node.js, PHP y Python. Si usas otro lenguaje, la API v5 funciona con cualquier cliente que haga peticiones HTTPS: curl, fetch, Guzzle, requests o HttpClient.
No. La API v5 es REST sobre HTTPS: envías formularios y recibes JSON. El SDK te ahorra armar las peticiones y leer las respuestas a mano.
No. Pagas folios, no la API: cada CFDI timbrado usa 1 folio, igual que en la web, y tus folios no caducan.
Sí. El SDK llama a la misma API v5, así que funciona con el sandbox, que es gratis y timbra con un PAC de pruebas; esos CFDI no tienen validez fiscal. Para producción cambias a la URL y la llave de producción.
Sí. El SDK llama a la API v5, que acepta factura, nota de crédito, recibo de pago 2.0, nómina 1.2, Carta Porte 3.1 y los demás complementos vigentes.
No se timbra. Si el CFDI no cumple el esquema del SAT, la API responde con code 702, un resumen en español y la lista errors con el elemento, el campo y el mensaje de cada error; por ejemplo: «Elemento 'Comprobante': El campo 'Exportacion' es obligatorio.»
En la documentación, en docs.facturadigital.com.mx. Si te atoras, escríbenos por WhatsApp al +52 81 2044 5452 y te atiende una persona del equipo.
Crea tu cuenta con 10 folios de regalo, sin tarjeta. El sandbox es gratis y la API viene incluida: pagas folios.