Saltar al contenido
Factuplan
Hub para developers

Facturación electrónica para desarrolladores

API REST + SDK TypeScript oficial para integrar facturación electrónica SRI Ecuador en tu app. Sandbox sin tarjeta, webhooks firmados, Postman, snippets en 6 lenguajes.

Facturación electrónica SRI para desarrolladores: emite tu primera factura en 6 lenguajes

Mismo flujo, distinto stack. Snippet oficial para cada uno.

TypeScript
import { Factuplan } from "factuplan"

const factuplan = new Factuplan(process.env.FACTUPLAN_API_KEY!, {
  ruc: "0993378150001",
})

const factura = await factuplan.invoices.create({
  customer: { identificationType: "RUC", identification: "0950194407001", legalName: "Cliente" },
  items: [{ description: "Servicio", quantity: 1, unitPrice: 500, taxType: "IVA_RATE", tax: 15 }],
  sendEmail: true,
})

console.log(factura.accessKey) // 49 dígitos
Python
import requests, os

r = requests.post(
    "https://api.factuplan.com.ec/v1/developer/invoices",
    headers={"X-API-Key": os.environ["FACTUPLAN_API_KEY"], "x-taxpayer-ruc": "0993378150001"},
    json={
        "customer": {"identificationType": "RUC", "identification": "0950194407001", "legalName": "Cliente"},
        "items": [{"description": "Servicio", "quantity": 1, "unitPrice": 500, "taxType": "IVA_RATE", "tax": 15}],
        "sendEmail": True,
    },
)
print(r.json()["data"]["accessKey"])
PHP
<?php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.factuplan.com.ec']);

$response = $client->post('/v1/developer/invoices', [
    'headers' => ['X-API-Key' => getenv('FACTUPLAN_API_KEY'), 'x-taxpayer-ruc' => '0993378150001'],
    'json' => [
        'customer' => ['identificationType' => 'RUC', 'identification' => '0950194407001', 'legalName' => 'Cliente'],
        'items' => [['description' => 'Servicio', 'quantity' => 1, 'unitPrice' => 500, 'taxType' => 'IVA_RATE', 'tax' => 15]],
        'sendEmail' => true,
    ],
]);
echo json_decode($response->getBody(), true)['data']['accessKey'];
Go
package main

import (
    "bytes"
    "encoding/json"
    "net/http"
    "os"
)

func main() {
    payload, _ := json.Marshal(map[string]interface{}{
        "customer": map[string]string{"identificationType": "RUC", "identification": "0950194407001", "legalName": "Cliente"},
        "items": []map[string]interface{}{{"description": "Servicio", "quantity": 1, "unitPrice": 500, "taxType": "IVA_RATE", "tax": 15}},
        "sendEmail": true,
    })
    req, _ := http.NewRequest("POST", "https://api.factuplan.com.ec/v1/developer/invoices", bytes.NewBuffer(payload))
    req.Header.Set("X-API-Key", os.Getenv("FACTUPLAN_API_KEY"))
    req.Header.Set("x-taxpayer-ruc", "0993378150001")
    http.DefaultClient.Do(req)
}
Ruby
require "net/http"
require "json"
require "uri"

uri = URI("https://api.factuplan.com.ec/v1/developer/invoices")
req = Net::HTTP::Post.new(uri, {
  "X-API-Key" => ENV["FACTUPLAN_API_KEY"],
  "x-taxpayer-ruc" => "0993378150001",
  "Content-Type" => "application/json",
})
req.body = {
  customer: { identificationType: "RUC", identification: "0950194407001", legalName: "Cliente" },
  items: [{ description: "Servicio", quantity: 1, unitPrice: 500, taxType: "IVA_RATE", tax: 15 }],
  sendEmail: true,
}.to_json

res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts JSON.parse(res.body).dig("data", "accessKey")
cURL
curl https://api.factuplan.com.ec/v1/developer/invoices \
  -H "X-API-Key: $FACTUPLAN_API_KEY" \
  -H "x-taxpayer-ruc: 0993378150001" \
  -H "Content-Type: application/json" \
  -d '{
    "customer": {"identificationType": "RUC", "identification": "0950194407001", "legalName": "Cliente"},
    "items": [{"description": "Servicio", "quantity": 1, "unitPrice": 500, "taxType": "IVA_RATE", "tax": 15}],
    "sendEmail": true
  }'

Para flujos avanzados (notas de crédito, guías de remisión, retenciones, webhooks), abre la referencia completa.

Quickstart en 6 pasos

De cero a primera factura autorizada por el SRI en menos de 10 minutos.

  1. Crea cuenta en app.factuplan.com.ec (sin tarjeta, 2 minutos)

  2. Anda a Developer → Create API key. Copia el ak_test_* (solo se muestra una vez)

  3. Guarda la key en variable de entorno FACTUPLAN_API_KEY

  4. Instala el SDK: npm install factuplan (Node/TypeScript) o usa la API REST directa

  5. Emite tu primera factura ficticia con factuplan.invoices.create(...)

  6. Verifica el estado en el dashboard. Cuando estés listo, intercambia ak_test_* por ak_live_*

Casos de uso por industria

Productos que ya integran Factuplan API en producción.

  • E-commerce / marketplaces

    Shopify, WooCommerce, Tienda Nube, Magento, plataformas custom. Emisión automática al confirmar pago.

  • POS / retail

    Sistemas de caja con impresión automática del RIDE y QR para el cliente al momento del cobro.

  • ERP / Backoffice

    SAP, Odoo, ERPNext, Defontana, sistemas propios. Sincronización vía API + webhooks.

  • SaaS vertical multi-tenant

    Plataforma para hoteles, clínicas, talleres, gimnasios. Cada tenant emite con su propio RUC.

  • FoodTech / delivery

    Apps de pedidos, dark kitchens, marketplace de restaurantes. Factura al usuario final desde el flujo de pago.

  • Pasarelas de pago

    Procesadores que disparan factura al confirmar transacción. Webhook → API → autorización en segundos.

Changelog reciente

Cambios técnicos del producto que afectan integraciones.

Mayo 2026

  • 🚀 Landing comercial /api y hub /desarrolladores publicados
  • 📦 SDK TypeScript v0.8.0 con webhooks tipados y soporte de Modo B
  • 🔧 Postman Collection actualizada: 26 endpoints en 4 secciones (emisión Modo A/B/C, comprobantes, catálogos, certificado) con variables pre-configuradas

Enero 2026

  • ⚡ Transmisión inmediata al SRI activada por defecto (Resolución NAC-DGERCGC25-00000017)
  • 💰 Nuevas tarifas ICE 2026 cargadas automáticamente en el catálogo
  • 🔐 Webhooks firmados con HMAC SHA-256 con timestamp anti-replay

Noviembre 2025

  • 📄 Ficha Técnica del SRI v2.32 implementada (catálogos actualizados)
  • 🆕 Endpoint de búsqueda masiva de comprobantes recibidos en el SRI
  • 🐛 Fix: validación local de RUC con tercer dígito 7 y 8 (rechazo correcto)

Soporte y comunidad

Acceso directo cuando algo se traba o necesitas un puntero rápido.

  • Soporte por WhatsApp

    Hablas con un developer del equipo de Factuplan. Sin colas de ticket. Respuesta típica en menos de 1 hora hábil.

    Contáctanos
  • Tutoriales del blog

    Guías paso a paso para Node.js, PHP, SDK TypeScript, integración WooCommerce y patrones avanzados.

    Ver blog técnico
  • Centro de ayuda

    Documentación general, casos comunes, troubleshooting. Útil para la operación día a día y onboarding.

    Centro de ayuda

FAQ

Preguntas frecuentes

¿No encuentras tu respuesta? Escríbenos.

¿Cómo arranco a integrar Factuplan en mi app?

Tres pasos: 1) Crea cuenta gratis en app.factuplan.com.ec (sin tarjeta de crédito); 2) En el dashboard, anda a Developer → Create API key y copia la clave ak_test_* (solo se muestra una vez); 3) Instala el SDK con npm install factuplan (si usas Node/TypeScript) o consume la API REST directamente. La primera factura ficticia la emites en menos de 10 minutos en sandbox. Cuando esté funcionando, cambias la API key por una de producción (ak_live_*) sin tocar tu código.

¿Qué diferencia hay entre /api, /desarrolladores y /docs/api?

Las tres páginas tienen objetivos distintos: /api es la landing comercial — explica el valor, casos de uso, comparativa con otras APIs y tiene CTA para crear API key; está pensada para developers que están evaluando. /desarrolladores (esta página) es el hub que centraliza recursos para developers ya activos: docs, SDK, Postman, snippets, changelog, comunidad. /docs/api es la referencia técnica detallada de cada endpoint: payloads completos, errores, schemas. Las tres están cross-linked, pero el flujo natural es /api (decisión) → /desarrolladores (recursos) → /docs/api (referencia día a día).

¿El SDK funciona en otros lenguajes además de TypeScript?

El SDK oficial actual es para Node.js/TypeScript (paquete factuplan en npm). Para otros lenguajes (Python, PHP, Go, Ruby, .NET, etc.) la integración se hace contra la API REST directa, que está completamente documentada en /docs/api con snippets oficiales en cada lenguaje. La API REST es estándar HTTPS + JSON con sobre data/meta, así que cualquier cliente HTTP serve. Si tu proyecto justifica un SDK oficial en otro lenguaje, puedes solicitarlo en /contacto. SDKs en Python y PHP están en evaluación según demanda de la comunidad.

¿Hay un sandbox completo o solo respuestas simuladas?

Sandbox completo. Las API keys con prefijo ak_test_* emiten comprobantes ficticios que pasan por el flujo real de Factuplan (validación de datos, firma simulada, autorización simulada del SRI, generación de RIDE PDF, dispatch de webhooks). No se envían al SRI real, lo que permite probar sin consumir tu cuota de producción. Los comprobantes de sandbox se eliminan automáticamente cada hora para mantener el ambiente limpio. Los webhooks de sandbox también disparan, así puedes probar el flujo end-to-end sin tarjeta de crédito.

¿Cómo manejo webhooks en producción?

Configura tu endpoint HTTPS en Dashboard → Developer → Webhooks. Copia el webhook secret. Tu endpoint debe: 1) Leer el body raw (sin parsear antes); 2) Verificar el header x-factuplan-signature con HMAC SHA-256 del body usando tu secret; 3) Procesar el evento (idealmente async/encolado en una queue); 4) Responder 200 OK rápido (< 5 segundos). Si tu endpoint falla o tarda, Factuplan reintenta con backoff exponencial hasta 24 horas. Eventos principales: invoice.authorized, invoice.rejected, credit_note.authorized, waybill.authorized, withholding.authorized.

¿Puedo contribuir al SDK o reportar bugs?

Sí. El SDK Node/TypeScript es open source y se desarrolla públicamente. El repositorio está disponible en GitHub bajo el nombre factuplan/factuplan-node (link próximamente publicado aquí). Aceptamos issues, pull requests y feedback de la comunidad. Para reportar bugs de la API REST o del dashboard, contáctanos por WhatsApp con el requestId del response (viene en el campo meta.requestId): así nuestro equipo puede tracear el error en producción y resolverlo rápido. Para feature requests, también /contacto o directamente en GitHub.

¿Cómo se ve el roadmap del producto?

El roadmap público se mantiene en /desarrolladores/roadmap (próximamente). Mientras tanto, el changelog reciente de cambios técnicos lo ves en esta misma página. Próximos hitos confirmados: SDK Python (Q3 2026), CLI oficial para emisión desde terminal (Q3 2026), endpoints de reportería avanzada con agregaciones (Q4 2026), webhooks bidireccionales para sincronizar catálogos desde tu ERP (Q4 2026). Si necesitas algo específico que no aparece en el roadmap, ábrelo en /contacto: el equipo prioriza por demanda real de la comunidad developer.

Empieza a facturar electrónicamente hoy

1 mes gratis al comprar tu firma electrónica con FirmaOK. Sin tarjeta de crédito.

Empresas activas
+1.000
Calificación clientes
4.9/5
Tiempo de onboarding
<1 día
Disponibilidad SRI
24/7
  • Configuración en minutos
  • Cancela cuando quieras
  • Soporte en español ecuatoriano