FacturaGPT API para generar CFDI desde tickets en Mexico
Envias la imagen del ticket y los datos fiscales del receptor. FacturaGPT extrae la informacion, detecta el flujo de facturacion del comercio y te entrega el XML y PDF de forma asincrona.
Para plataformas de gastos, fintechs, ERP, software contable y empresas con alto volumen de tickets.
Pensado para integraciones B2B. No esta diseñado como herramienta de consumo para facturar un solo ticket manualmente.
Listo para webhooks y procesos en background.
Sin mantener portales y reglas por comercio en tu producto.
Pensado para equipos y plataformas con tickets recurrentes.
Entrega programatica del CFDI final cuando el proceso concluye.
Que es FacturaGPT
FacturaGPT es una API B2B para generar CFDI en Mexico a partir de tickets. Tu sistema envia la imagen del ticket y la informacion fiscal del receptor, FacturaGPT ejecuta el flujo de facturacion del comercio en segundo plano y entrega el XML y PDF cuando el CFDI esta listo.
Lo que resuelve
Centraliza en una sola integracion la extraccion del ticket, la deteccion del comercio y la ejecucion del flujo de facturacion oficial.
- Una sola API para multiples comercios
- Reduce trabajo manual y deuda tecnica
- Evita construir logica por portal
Para quien es
Si tus usuarios o equipos suben tickets y necesitas recuperar CFDI sin construir integraciones por comercio, esta API esta diseñada para ti.
- Plataformas de gastos
- Fintech y tarjetas corporativas
- ERP y software contable
- Equipos financieros con 100+ tickets al mes
Como funciona
El flujo esta diseñado para que tu equipo integre una sola vez y reciba los resultados por webhook o por consulta de estado.
Envias el ticket
Mandas ticket_image con un external_id y la informacion fiscal del receptor.
FacturaGPT extrae y valida
La API ejecuta OCR del ticket y devuelve de inmediato un primer resultado con estatus processing.
Se ejecuta el flujo del comercio
FacturaGPT detecta el canal de facturacion y corre el proceso correspondiente en segundo plano.
Recibes el CFDI
Tu sistema recibe el resultado por webhook o consulta el estatus con GET /api/v1/get_factura_status/{session_id}.
Ejemplo de request
Usa el endpoint real de produccion. El request se divide en datos del ticket y datos fiscales del receptor.
curl -X POST https://api.facturagpt.com.mx/api/v1/get_factura \
-H "Authorization: Bearer fgpt_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"external_id": "expense_12345",
"ticket_image": "<base64-encoded image>",
"save_customer": true,
"uso_cfdi": "G03",
"payment_method": "28",
"user_info": {
"razon_social": "ACME SA DE CV",
"rfc": "XAXX010101000",
"email": "finance@acme.com",
"regimen": "601",
"cp": "11560"
},
"webhook_url": "https://your-server.com/webhooks/facturagpt",
"test_mode": false
}'
Campos clave
- external_id: idempotencia y reconciliacion
- ticket_image: imagen del ticket en base64
- user_info o csf_pdf: datos fiscales del receptor
- save_customer: guarda el perfil fiscal para futuras solicitudes
Reglas importantes
- Debes enviar customer_id o datos fiscales crudos
- test_mode: true ejecuta el flujo sin cobrar
- El webhook debe estar configurado para produccion
- Enviar el mismo external_id con otro payload devuelve conflicto
Respuesta inicial
La primera respuesta no es el CFDI final. El request fue aceptado, el OCR ya corrio y el proceso continua en background.
{
"ok": true,
"data": {
"session_id": "id_abc123",
"external_id": "expense_12345",
"status": "processing",
"ocr_result": {
"merchant_name": "Starbucks",
"merchant_rfc": "SCA9312224NA",
"amount": "125.50",
"net_amount": "108.19",
"tax_amount": "17.31",
"tax_rate": "0.16",
"currency": "MXN",
"date": "2026-03-06",
"payment_method": "card",
"ticket_readable": true
}
},
"error": null,
"meta": {
"version": "2026-03",
"session_id": "id_abc123",
"timestamp": "2026-03-06T12:00:00Z"
}
}
Estados y consulta de progreso
Usa GET /api/v1/get_factura_status/{session_id} para confirmar resultados, reconciliar registros o verificar lo ocurrido despues de un webhook.
Estados
- processing: solicitud aceptada, automatizacion en curso
- completed: CFDI generado correctamente y cobrable
- failed: no se genero CFDI y no es cobrable
Patron recomendado
- Usa webhooks como canal principal
- Usa polling solo como verificacion o reconciliacion
- Guarda siempre external_id y session_id
{
"ok": true,
"data": {
"session_id": "id_abc123",
"status": "completed",
"ocr": {
"ticket": {
"merchant_name": "Starbucks",
"merchant_rfc": "SCA9312224NA",
"total": 125.5,
"date": "2026-03-06"
}
}
},
"error": null,
"meta": {
"version": "2026-03",
"session_id": "id_abc123",
"timestamp": "2026-03-06T12:02:00Z"
}
}
Webhooks
Los webhooks son la forma recomendada de recibir resultados. Configura tu URL en el dashboard o usa webhook_url como override por request.
Eventos
- factura.completed: CFDI listo y archivos disponibles
- factura.failed: el proceso fallo despues de reintentos
- Responde rapido con 200 y procesa en background
Buenas practicas
- Deduplica con idempotency_key
- Guarda el payload antes de procesarlo
- Asume at-least-once delivery
{
"event": "factura.completed",
"version": "2026-03",
"idempotency_key": "factura.completed:id_abc123:1741132800",
"session_id": "id_abc123",
"external_id": "expense_12345",
"status": "completed",
"completed_at": "2026-03-06T12:01:23Z",
"processing_time_seconds": 34,
"files": {
"xml_url": "https://api.facturagpt.com.mx/api/v1/files/id_abc123/xml",
"pdf_url": "https://api.facturagpt.com.mx/api/v1/files/id_abc123/pdf"
}
}
Casos de uso
Esta API esta pensada para integrarse en flujos reales de producto y operacion, no como una herramienta de uso individual.
Recuperacion automatica de CFDI
Convierte tickets de gastos en CFDI dentro de tu plataforma sin pedir que el usuario facture manualmente en cada comercio.
Tarjetas corporativas y spend
Asocia cada transaccion con su ticket y automatiza la recuperacion del CFDI para mejorar control y deducibilidad.
ERP y software contable
Integra facturacion automatica desde tickets para acelerar cierres, conciliacion y carga documental.
Equipos financieros con alto volumen
Reduce carga operativa y soporte interno cuando tu empresa procesa cientos o miles de tickets al mes.
Por que no construir esto internamente
El costo no es solo tecnico. Tambien es operativo, de mantenimiento y de soporte a medida que cambian los flujos de cada comercio.
El problema real
- Cada comercio tiene su propio flujo y sus propias reglas
- Los portales cambian con el tiempo
- La recuperacion de CFDI mezcla OCR, logica fiscal y operacion
- Tu equipo termina manteniendo excepciones y soporte
Lo que externalizas con FacturaGPT
- Deteccion del flujo del comercio
- Ejecucion del proceso de facturacion
- Entrega asincrona de XML y PDF
- Una sola integracion para un problema multi-comercio
Solicitar sandbox
Cuéntanos un poco sobre tu caso de uso. Te enviaremos mas informacion por email y, despues del envio, podras crear tu cuenta para empezar a probar la API.
Preguntas frecuentes
Las preguntas que mas ayudan a un equipo tecnico a decidir si esta API encaja con su flujo.
¿La API funciona de forma sincronica o asincronica?
Funciona de forma asincrona. El request inicial devuelve processing y un session_id. El resultado final llega por webhook o se consulta por estatus.
¿Que necesito enviar para generar una factura?
Debes enviar ticket_image, external_id y el perfil fiscal del receptor mediante customer_id, user_info o csf_pdf.
¿Puedo reutilizar un perfil fiscal guardado?
Si. Puedes guardar el perfil con save_customer y despues reutilizar el customer_id en nuevas solicitudes.
¿Que pasa si el comercio no emite CFDI?
La sesion termina con estatus failed. Ese resultado no es cobrable y se puede manejar desde tu sistema como un caso fallido.
¿Como recibo el XML y PDF?
El resultado llega por webhook cuando la factura queda completada y los archivos tambien se pueden descargar a traves de los endpoints de archivos.
¿Hay modo de pruebas?
Si. Puedes ejecutar el flujo con test_mode: true para probar sin cobrar saldo.
Prueba FacturaGPT en tu flujo
Si estas evaluando como automatizar CFDI desde tickets en Mexico, este es el mejor punto para iniciar la conversacion y activar pruebas.