FacturAPI es el PAC que más usan los developers en México por una razón simple: tiene una API REST moderna, documentación decente y se integra con cualquier sistema en horas, no en semanas. Si tu ERP, e-commerce o app necesita timbrar CFDI 4.0 automáticamente, esta guía te lleva de cero a primer XML timbrado en menos de 4 horas de trabajo real.
Datos basados en más de 30 integraciones que hemos hecho con FacturAPI en producción durante los últimos 4 años para clientes mexicanos de diferentes industrias.
Qué es FacturAPI y por qué lo recomendamos
FacturAPI es un Proveedor Autorizado de Certificación (PAC) certificado por el SAT que expone toda su funcionalidad vía API REST. A diferencia de PACs tradicionales (Edicom, Solución Factible) que pelean con SOAP y documentación enredada, FacturAPI se siente como Stripe pero para CFDI.
Ventajas técnicas:
- API REST con respuestas en JSON
- SDKs oficiales en Node, Python, Go, PHP, .NET
- Sandbox completo gratis para desarrollo
- Webhooks para notificaciones asíncronas
- Documentación con ejemplos curl que funcionan
- Soporte para emisión, cancelación, complementos de pago, retenciones y comercio exterior
Cuándo NO usar FacturAPI:
- Necesitas integración SOAP con un sistema legacy enterprise
- Tu volumen pasa de 50,000 facturas/mes (revisa pricing, otros PACs salen más baratos)
- Tu compliance corporativo exige un PAC específico no negociable
Paso 1: Crear cuenta y obtener API keys
Ve a factura.com/api/dashboard (FacturAPI es propiedad de Factura.com) y crea cuenta con tu email. Después necesitas:
- Datos fiscales de tu empresa o cliente que va a emitir (RFC, régimen, dirección).
- Certificado de Sello Digital (CSD) del SAT. Son dos archivos (.cer y .key) y una contraseña. Si tu cliente no lo tiene, debe tramitarlo en el portal del SAT (gratis, toma 1-3 días).
- API keys de FacturAPI: una para test (sandbox) y una para producción. Las generas en el dashboard.
Pro tip: nunca subas la API key de producción al repositorio. Va en variables de entorno o un secret manager.
Paso 2: Subir el CSD al panel de FacturAPI
Antes de timbrar necesitas subir el CSD del emisor al panel:
- Dashboard → Organizaciones → Tu organización → Certificados
- Sube los dos archivos (.cer y .key) y la contraseña
- FacturAPI valida con el SAT que el CSD está vigente
Si el CSD está revocado o vencido, FacturAPI te lo dice inmediatamente. No timbrarás nada hasta arreglar eso.
Paso 3: Primera factura via API (Node.js)
Con el SDK oficial:
npm install facturapi
Código mínimo para timbrar una factura:
import Facturapi from 'facturapi';
const facturapi = new Facturapi('sk_test_TU_API_KEY');
const invoice = await facturapi.invoices.create({
customer: {
legal_name: 'CLIENTE EJEMPLO SA DE CV',
tax_id: 'XAXX010101000',
tax_system: '601', // Regimen General de Ley
address: {
zip: '06600'
}
},
items: [
{
quantity: 1,
product: {
description: 'Servicio de desarrollo de software',
product_key: '81111500', // Clave SAT para servicios de IT
price: 5000,
tax_included: false,
taxes: [
{ type: 'IVA', rate: 0.16 }
],
unit_key: 'E48', // Servicio
unit_name: 'Servicio'
}
}
],
payment_form: '03', // Transferencia electronica
payment_method: 'PUE', // Pago en una exhibicion
use: 'G03', // Gastos en general
type: 'I' // Ingreso
});
console.log('Folio:', invoice.folio_number);
console.log('UUID:', invoice.uuid);
console.log('PDF URL:', invoice.pdf);
console.log('XML URL:', invoice.xml);
Si todo va bien, FacturAPI timbra contra SAT y te regresa el UUID, el PDF y el XML en 2-5 segundos.
Paso 4: Validar datos del receptor ANTES de timbrar
Este es el error más común que vemos en producción. Si los datos del receptor están mal (RFC inválido, código postal incorrecto, régimen incompatible), el SAT rechaza la factura y FacturAPI te cobra el intento igual.
Validar antes de timbrar:
// Validar RFC contra lista LRFC del SAT
const rfcValid = await facturapi.tools.taxIdValidation({
tax_id: 'XAXX010101000',
tax_system: '601'
});
if (!rfcValid.is_valid) {
throw new Error('RFC no encontrado en lista del SAT');
}
// Validar codigo postal en catalogo SAT
const zipValid = await facturapi.tools.zipValidation({
zip: '06600'
});
Implementar estas validaciones te ahorra 15-20% de intentos rechazados.
Paso 5: Manejo de errores en producción
Los errores más frecuentes y cómo manejarlos:
| Error | Causa | Acción |
|---|---|---|
| CFDI40104 | RFC del receptor no existe en lista SAT | Validar RFC con tool antes de timbrar |
| CFDI40105 | Codigo postal no esta en catalogo | Validar zip y/o usar el del emisor como fallback |
| CFDI40158 | Regimen Fiscal Receptor incompatible | Validar regimen segun tipo de persona |
| CFDI40177 | Objeto de impuesto requerido en concepto | Agregar campo objeto_imp en cada item |
| 503/504 | SAT caido temporalmente | Retry exponencial: 1m, 5m, 15m, 1h |
| 429 | Rate limit FacturAPI | Throttle a 5 req/seg max en sandbox, 50 en prod |
Paso 6: Webhooks para integraciones asíncronas
Para flujos donde no quieres bloquear la respuesta al cliente, configura webhooks:
- Dashboard FacturAPI → Webhooks → Agregar endpoint con la URL de tu servidor
- Selecciona eventos:
invoice.created,invoice.canceled,invoice.payment_received - FacturAPI llama a tu endpoint con payload JSON cuando ocurre el evento
- Verifica la firma con el secret de webhooks para asegurar que el request viene de FacturAPI
Esto es ideal para WooCommerce, Shopify u otros sistemas donde el flujo de compra no debe esperar 5 segundos al timbrado.
Paso 7: Cancelaciones
Cancelar un CFDI requiere indicar motivo según catálogo SAT:
- 01: Comprobante emitido con errores con relación
- 02: Comprobante emitido con errores sin relación
- 03: No se llevó a cabo la operación
- 04: Operación nominativa relacionada en factura global
const canceled = await facturapi.invoices.cancel('INVOICE_ID', {
motive: '02'
});
// Verificar status de aceptacion
const status = await facturapi.invoices.retrieve('INVOICE_ID');
console.log('Cancelacion status:', status.cancellation_status);
// 'pending', 'accepted', 'rejected'
Importante: si el monto del CFDI es mayor a 1,000 pesos, el receptor debe aceptar la cancelación dentro de 72 horas. Tu sistema debe consultar el status para confirmar.
Costos reales de FacturAPI
Pricing al momento de escribir (verifica en factura.com/pricing):
- Starter: 0.50 pesos por timbre, sin renta mensual. Ideal para arrancar.
- Pro: Renta mensual + bolsa de timbres con precio reducido. Si emites 500+ al mes, conviene.
- Enterprise: Volumen alto, precios negociados, SLA específico.
Para una empresa que emite 1,000 facturas/mes, el costo en FacturAPI es típicamente 300-500 pesos/mes. Mucho menos que un empleado capturando manualmente.
Cuándo contratarnos para integrar FacturAPI
Si tienes equipo técnico interno con experiencia en APIs REST, integrar FacturAPI es trabajo de 1-3 días. Si tu equipo está saturado o no tiene experiencia con CFDI 4.0, contratarnos te ahorra 4-8 semanas de errores y aprendizaje.
En DevActivo ofrecemos integración completa de FacturAPI con tu sistema desde 8,000 pesos en 4-7 días. Incluye validaciones, manejo de errores, webhooks, cancelaciones y testing en sandbox antes de pasar a producción.
También integramos otros PACs (Edicom, Solución Factible, SW Sapien) y construimos pipelines completos con n8n para automatizar el flujo end-to-end. Agenda una llamada y te damos propuesta cerrada en 48 horas.
Servicios relacionados: