Saltar al contenido

SDKs oficiales para Node.js, PHP y Python.

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.

Crear y timbrar un CFDI. La misma API v5 en Node.js, PHP y Python.

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.

Node.jsAPI v5
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);
PHPAPI v5
$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'];
PythonAPI v5
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"])
Misma respuestacfdi.UUID: 6FA90F39-2D7A-4F1C-…más el XML en Base64 y la liga al PDF

Un SDK por lenguaje, la misma API v5.

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.

Node.js

SDK oficial · Nuevo

Para integrar la API v5 en tu backend de Node.js.

PHP

SDK oficial · Nuevo

Para integrar la API v5 en tu sistema en PHP sin armar las peticiones con curl.

Python

SDK oficial · Nuevo

Para integrar la API v5 en tu sistema o tus scripts en Python.

Lo que obtienes con la API v5.

La misma API v5

Mismos endpoints, misma llave X-Api-Key y mismas respuestas que la API documentada.

Sandbox gratis

Integra contra el sandbox, que timbra con un PAC de pruebas; esos CFDI no tienen validez fiscal.

Pagas folios, no la API

El SDK no tiene costo. Cada CFDI timbrado usa 1 folio y tus folios no caducan.

Timbrado PAC ultrarrápido y con respaldo

Si un PAC no responde, tu CFDI se timbra igual. Tu código no cambia.

Lo que la API resuelve por ti.

Con el método JSON de la API v5 envías los datos del comprobante y lo demás ya está resuelto.

Sin XML ni sello

Envías los datos del CFDI en JSON; la API arma el XML, lo sella con tu CSD y lo timbra.

Folio y fecha automáticos

Folio y Fecha aceptan el valor "AUTO"; en Carta Porte, también el IdCCP.

XML y PDF en la respuesta

Recibes el UUID, el XML en Base64 y las ligas al PDF y al XML. El PDF sale con la plantilla que elijas.

Envío por correo al timbrar

Con enviar_mail, el CFDI se envía a tu cliente en el mismo paso.

Errores del SAT explicados en español

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.

Complementos vigentes

Recibo de pago 2.0, nómina 1.2, Carta Porte 3.1, Comercio Exterior 2.0 y los demás complementos vigentes.

Documentación y soporte de personas reales.

Personas reales por WhatsApp

Si te atoras con la integración, te atiende alguien del equipo en el +52 81 2044 5452.

Webhooks y servidor MCP

También nuevo: avisos cuando se timbra, cancela o paga un CFDI, y conexión con Claude, ChatGPT o Gemini.

Preguntas frecuentes

¿Qué lenguajes tienen SDK oficial?

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.

¿Necesito un SDK para usar la API?

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.

¿El SDK tiene costo?

No. Pagas folios, no la API: cada CFDI timbrado usa 1 folio, igual que en la web, y tus folios no caducan.

¿Puedo probar con el sandbox?

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.

¿Puedo timbrar Carta Porte, nómina y recibos de pago con el SDK?

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.

¿Qué pasa si mi CFDI tiene un error?

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

¿Dónde encuentro la instalación y los ejemplos?

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.

Timbra desde tu sistema con la API v5.

Crea tu cuenta con 10 folios de regalo, sin tarjeta. El sandbox es gratis y la API viene incluida: pagas folios.