Skip to content

Instantly share code, notes, and snippets.

@frfernandezdev
Created May 27, 2026 19:31
Show Gist options
  • Select an option

  • Save frfernandezdev/66021fa3a56f53d07ed37c1c6317fd19 to your computer and use it in GitHub Desktop.

Select an option

Save frfernandezdev/66021fa3a56f53d07ed37c1c6317fd19 to your computer and use it in GitHub Desktop.
facturapi-alternatives

Análisis: Facturapi como alternativa a factura.com para Cileo

Fecha: 2026-05-27 Contexto: factura.com tiene límites de empresas (emisores), clientes (receptores) y por RFC que chocan con la arquitectura multi-tenant de Cileo.


1. Problema actual con factura.com

factura.com opera con límites por cuenta que impactan directamente en Cileo:

Recurso Límite factura.com Impacto en Cileo
Empresas (emisores) Limitado Cada owner es un emisor distinto
Clientes (receptores) Limitado Cada tenant es un receptor
RFCs por cuenta Limitado Cada owner tiene RFC propio

Modelo de credenciales actual (complejo):

FACTURA_API_KEY (global)          → headers generales
factura_api_key (por owner)       → encriptado en FiscalData
factura_api_secret_key (por owner) → encriptado en FiscalData

2. Facturapi — La alternativa recomendada

2.1 Ventajas clave para Cileo

  • Multi-RFC sin límite: API multi-RFC sin costo adicional por organización
  • Sin límite de emisores: cada owner es una organización
  • Sin límite de receptores: customers ilimitados por organización
  • Validación SAT automática: al crear un customer valida RFC contra el SAT
  • Borradores: soporta drafts antes de timbrar
  • SDK Node.js oficial: npm install facturapi
  • Webhooks: eventos async de timbrado, cancelación, etc.
  • Idempotency Key: evita duplicados al reintentar
  • external_id: para linkear facturas con registros de Cileo
  • Facturación asíncrona: para facturas grandes no bloquea

2.2 Precios

Concepto Costo
Suscripción API $299 MXN/mes
Por timbre $0.60 MXN (IVA incl.)
Organizaciones extra (RFCs) Sin costo adicional
Facturación Web $199 MXN/mes + $0.60/timbre
Usuarios adicionales $99 MXN/mes c/u

A alto volumen: precios personalizados con ventas.


3. Mapeo endpoint por endpoint

3.1 Emisores (Owners / Propietarios)

Actualmente en cileo-backend/src/app/factura/services/emiter.service.ts:

factura.com Facturapi Fricción
POST /v4/account/create (FormData con CSD) POST /v2/organizations + PUT /v2/organizations/{id}/certificates 🟢 Baja — separan creación y subida de CSD
POST /v4/account/{id}/update PUT /v2/organizations/{id}/tax-info 🟢 Directo
DELETE /v4/account/{id}/delete DELETE /v2/organizations/{id} 🟢 Directo
GET /v1/current/account GET /v2/organizations/{id} 🟢 Directo
GET /v4/series GET /v2/organizations/{id}/series 🟢 Directo

3.2 Receptores (Tenants / Inquilinos)

Actualmente en cileo-backend/src/app/factura/services/receiver.service.ts:

factura.com Facturapi Fricción
POST /v1/clients/create POST /v2/customers 🟢 Mejor — valida RFC contra SAT
POST /v1/clients/{id}/update PUT /v2/customers/{id} 🟢 Directo
POST /v1/clients/destroy/{id} DELETE /v2/customers/{id} 🟢 Directo

3.3 Facturas (CFDI 4.0)

Actualmente en cileo-backend/src/app/factura/services/invoice.service.ts:

factura.com Facturapi Fricción
POST /v4/cfdi40/create (FormData) POST /v2/invoices (JSON) 🟢 Mejor — JSON puro
POST /v4/cfdi40/{uid}/timbrarborrador POST /v2/invoices/{id}/stamp 🟢 Directo
PUT /v4/cfdi40/{uid}/update (borrador) PUT /v2/invoices/{id} (borrador) 🟢 Directo
GET /v4/cfdi40/{uid}/pdf GET /v2/invoices/{id}/pdf 🟢 Directo
GET /v4/cfdi40/{uid}/xml GET /v2/invoices/{id}/xml 🟢 Directo
POST /v4/cfdi40/{uid}/cancel DELETE /v2/invoices/{id}/cancel 🟢 Directo

3.4 Complemento de Pago

Actualmente en cileo-backend/src/app/billings/services/complemento-pago.service.ts:

factura.com Facturapi Fricción
POST /v4/cfdi40/create (payload complemento) POST /v2/invoices con type: "P" 🟢 Facturapi tiene tipo Pago nativo

4. Simplificación del modelo de credenciales

Actual (factura.com)

┌─────────────────────────────────────┐
│  Variables de entorno                │
│  FACTURA_API_KEY       (global)      │
│  FACTURA_API_SECRET_KEY (global)     │
└──────────┬──────────────────────────┘
           │
┌──────────▼──────────────────────────┐
│  FiscalData (por owner)              │
│  factura_api_key         (encriptado)│
│  factura_api_secret_key  (encriptado)│
│  factura_emmiter_id                 │
└─────────────────────────────────────┘

Con Facturapi

┌──────────────────────────────────────┐
│  Variables de entorno                 │
│  FACTURAPI_USER_KEY   (admin global)  │
└──────────┬───────────────────────────┘
           │
┌──────────▼───────────────────────────┐
│  FiscalData (por owner)               │
│  facturapi_organization_id            │
│  (La Live Key se obtiene de la org)   │
└──────────────────────────────────────┘

Beneficio: se elimina la necesidad de encriptar/desencriptar credenciales por owner.


5. Flujo de facturación comparado

factura.com (actual)

flowchart LR
    A[Cileo Backend] -->|POST /v4/cfdi40/create| B[factura.com API]
    B -->|FormData con items| C{¿Draft?}
    C -->|Sí| D[Devuelve borrador]
    C -->|No| E[Timbra directo]
    D --> F[POST /v4/cfdi40/{uid}/timbrarborrador]
    E --> G[Devuelve UUID]
    F --> G
Loading

Facturapi

flowchart LR
    A[Cileo Backend] -->|POST /v2/invoices| B[Facturapi API]
    B -->|JSON con status| C{¿Draft?}
    C -->|Sí| D[Devuelve invoice draft]
    C -->|No| E[Timbra + devuelve invoice valid]
    D --> F[POST /v2/invoices/{id}/stamp]
    E --> G[UUID + PDF/XML listos]
    F --> G
Loading

6. Lo que Facturapi suma que factura.com no tiene

Feature factura.com Facturapi
Multi-RFC ilimitado ❌ Límites ✅ Sin límite
Webhooks ❌ No ✅ 6 tipos de eventos
Idempotency Key ❌ No ✅ Evita duplicados
external_id ❌ No ✅ Link con DB propia
Catálogo de productos ❌ No ✅ Reutilizable vía API
SDK oficial Node.js ❌ No npm i facturapi
Async invoicing ❌ No ✅ Para facturas grandes
Validación SAT automática ❌ No ✅ Al crear customer

7. Puntos de atención en la migración

7.1 CSD (Certificado de Sello Digital)

  • Hoy: suben CER+KEY en un solo POST como FormData
  • Facturapi: PUT /v2/organizations/{id}/certificates con el CSD en body
  • Impacto: cambio mecánico, separar la subida

7.2 Payload de factura

  • Hoy: FormData → factura.com
  • Facturapi: JSON limpio
  • Impacto: los campos son muy similares, cambia serialización

7.3 Complemento de Pago

  • Hoy: construyen ComplementoPagoDto específico
  • Facturapi: type: "P" con received_payments
  • Impacto: más fácil, no hay que construir el XML del complemento

7.4 Series

  • Hoy: factura_invoice_serie y factura_complemento_de_pagos_serie numéricos
  • Facturapi: series alfanuméricas (hasta 25 chars)
  • Impacto: migración one-time

7.5 API Keys por organización

  • Hoy: una API key global + credenciales por owner encriptadas
  • Facturapi: User Key (admin) + Live Key por organización
  • Impacto: se elimina factura_api_key/factura_api_secret_key de FiscalData

8. Conclusión

La migración de factura.com a Facturapi tiene una fricción baja a media. El mapping endpoint es casi 1:1 y los cambios son más mecánicos que conceptuales. Facturapi además simplifica el modelo de credenciales que actualmente es lo más complejo de la integración.

Pasos siguientes sugeridos:

  1. Crear cuenta de prueba en Facturapi (14 días gratis)
  2. Probar los endpoints clave en sandbox
  3. Planificar migración de datos de emisores (owners) y receptores (tenants)
  4. Migrar facturación en paralelo con feature flag
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment