API SRI para facturación electrónica
Capa REST sobre los webservices SOAP del SRI Ecuador. Esquema offline vigente, los 3 modos A/B/C, transmisión inmediata 2026 y manejo estructurado de errores SRI. Sin armar XMLs ni firmar XAdES-BES por tu cuenta.
import { Factuplan, FactuplanError } from "factuplan"
const factuplan = new Factuplan(process.env.FACTUPLAN_API_KEY!, {
ruc: "0993378150001",
})
try {
const factura = await factuplan.invoices.create({
customer: {
identificationType: "RUC",
identification: "0950194407001",
legalName: "Cliente Demo S.A.",
email: "facturas@cliente.ec",
},
items: [
{
code: "SERV-001",
description: "Servicio de consultoría",
quantity: 1,
unitPrice: 500,
taxType: "IVA_RATE",
tax: 15,
},
],
sendEmail: true,
})
console.log("Clave de acceso SRI:", factura.accessKey) // 49 dígitos
console.log("Estado inicial:", factura.status) // DRAFT: la emisión sigue en segundo plano hasta COMPLETED
} catch (err) {
if (err instanceof FactuplanError) {
// La API rechazó la solicitud (validación, cupo, API key...)
console.error("Factuplan rechazó:", err.statusCode, err.code, err.message)
// Un rechazo del SRI no llega aquí: llega después, en el webhook invoice.rejected
// o al consultar el estado del comprobante con factuplan.invoices.getStatus(id)
}
} Por qué usar API de Factuplan en lugar de integrar directo con el SRI
La API REST del SRI no existe — el SRI expone webservices SOAP con XMLs firmados XAdES-BES. Integrar directo es desarrollo de 2-6 meses con un team experto. Factuplan te entrega esa capa.
-
Esquema offline SRI desde 2022
Implementación completa del esquema offline vigente desde 2022 con la Ficha Técnica v2.32 (noviembre 2025). Generación de XML, firma XAdES-BES con tu P12, envío al SRI y manejo de respuestas — todo manejado por la API.
-
Modos A, B y C del SRI
Soporte de los 3 modos definidos por el SRI: Modo A (Factuplan firma + autoriza + envía email), Modo B (tú generas XML, nosotros firmamos y autorizamos), Modo C (tú gestionas transmisión al SRI). Misma API key para los 3.
-
Transmisión inmediata 2026
Cumple por defecto con la Resolución NAC-DGERCGC25-00000017: todos los comprobantes (facturas, NC, ND, retenciones, guías) se transmiten al SRI en tiempo real, antes de iniciar la operación.
-
Manejo estructurado de errores SRI
Los mensajes del SRI llegan en JSON, en el campo messages de GET /v1/developer/receipts/:id/status y en reason del webhook: cada uno con type, code, message y additionalInfo. Sin parsear respuestas SOAP heterogéneas como con la API directa del SRI.
-
Firma electrónica gestionada
Carga tu P12 una vez en el dashboard de Factuplan. La firma se almacena cifrada con AES-256-GCM aislada por cuenta. Cada XML enviado al SRI se firma automáticamente sin que tu app vea el certificado.
-
Clave de acceso de 49 dígitos generada
Factuplan calcula la clave de acceso correctamente con dígito verificador módulo 11. Sin rechazos del SRI por claves mal generadas, sin código aleatorio repetido, sin estructuras incorrectas.
Operaciones SRI soportadas
Cobertura completa del catálogo del SRI Ecuador. Todos los comprobantes electrónicos + ciclo de vida (emisión, consulta, anulación).
| Método | Endpoint | Operación |
|---|---|---|
| POST | /v1/developer/invoices | Emitir factura electrónica al SRI |
| POST | /v1/developer/credit-notes | Emitir nota de crédito (con documento sustento vinculado) |
| POST | /v1/developer/debit-notes | Emitir nota de débito |
| POST | /v1/developer/sign-and-authorize | Firmar y autorizar tu propio XML (Modo B); es la vía para guías de remisión, que no tienen endpoint JSON |
| POST | /v1/developer/withholdings | Emitir comprobante de retención |
| POST | /v1/developer/purchase-settlements | Emitir liquidación de compra de bienes y servicios |
| GET | /v1/developer/receipts/:id/status | Consultar el estado de un comprobante (en proceso, AUTHORIZED, COMPLETED, REJECTED, RETURNED, ERROR) |
| POST | /v1/developer/receipts/:id/void | Marcar un comprobante como anulado en Factuplan (body: reason). No emite nota de crédito ni lo anula en el SRI: eso lo haces tú |
Referencia técnica completa con schemas, payloads y respuestas en /docs/api.
Validaciones SRI manejadas automáticamente
La API valida localmente lo que el SRI rechazaría y devuelve errores estructurados cuando aplica.
Validaciones locales antes de enviar al SRI
- Tipo de identificación correcto (RUC=13 dígitos, cédula=10)
- Tarifas de IVA del catálogo SRI (0%, 5%, 8%, 15%, exento, no objeto)
- Secuencial asignado por Factuplan en cada punto de emisión, sin duplicados
- Clave de acceso de 49 dígitos con módulo 11 correcto
Errores del SRI manejados
- Error 35: el archivo no cumple la estructura XML del SRI
- Error 39: firma inválida (certificado vencido o emitido para otro RUC)
- Error 43: clave de acceso registrada (el SRI ya tenía ese comprobante; Factuplan consulta su autorización en vez de darlo por rechazado)
- Error 45: secuencial registrado (el SRI ya tiene un comprobante con ese número)
- Error 52: un dato del comprobante no coincide con lo que espera el SRI (el detalle llega en additionalInfo)
- Error 56: establecimiento cerrado en el SRI
- Error 65: fecha de emisión que el SRI no acepta (demasiado antigua o posterior al día en que la recibe)
- Error 70: clave de acceso en procesamiento (el SRI ya lo tiene en cola; Factuplan espera su autorización)
Estados de comprobantes en el SRI
Los estados que refleja la respuesta del SRI, tal como llegan en el campo status de la API. Un comprobante autorizado termina en COMPLETED y uno que no se pudo enviar queda en ERROR; los webhooks avisan authorized, rejected o error.
-
RECEIVED_SRIEn procesamiento
El SRI recibió el XML y está validando. Máximo legal 24 horas; típicamente 2-5 segundos en horarios normales.
-
AUTHORIZEDAutorizado
El SRI validó todo y el comprobante quedó registrado con número de autorización = clave de acceso de 49 dígitos. Es un estado de paso: cuando el PDF está listo (y el correo enviado, si aplica) el comprobante termina en COMPLETED.
-
REJECTEDRechazado
El SRI no aceptó el comprobante, en la recepción o en la autorización (firma, datos, estructura del XML, etc.). Debe corregirse y emitirse de nuevo: sale con secuencial nuevo.
-
ERRORError
El comprobante no terminó de emitirse: un paso falló tras los reintentos (lo más común, que el SRI no responda). No es un rechazo del SRI. Si la causa fue la comunicación con el SRI, Factuplan lo reintenta automáticamente; también puedes reintentarlo tú con POST /v1/developer/invoices/:id/retry.
¿Estás evaluando si Factuplan API te conviene?
Esta página cubre el ángulo integración técnica con el SRI. Para la propuesta comercial general (pricing, casos de uso, comparativa con otras APIs), revisa la landing comercial de la API. Para la referencia técnica detallada de cada endpoint, abre las docs.
Landing comercial /api
Propuesta de valor, comparativa con otras APIs ecuatorianas, pricing y casos de uso por vertical.
Ver landingDocs técnicas /docs/api
Referencia completa con schemas JSON, validaciones, códigos de error y ejemplos por endpoint.
Abrir docsHub developers
Acceso rápido a Docs, SDK Node/TS, Postman Collection, snippets en 6 lenguajes, changelog y comunidad.
Ver hub¿Qué hace exactamente la API de Factuplan con el SRI?
Factuplan API es una capa sobre los webservices SOAP del SRI Ecuador que simplifica la integración a una API REST moderna con JSON. Internamente: 1) Recibe tu request JSON con datos de la operación; 2) Valida el formato de los datos (tipo y longitud de la identificación, tarifas de IVA, que los pagos sumen el total, etc.); 3) Genera el XML según la Ficha Técnica del SRI v2.32; 4) Firma el XML con XAdES-BES usando tu certificado P12 cargado en el workspace; 5) Envía al webservice SOAP del SRI (recepción + autorización); 6) Deja la respuesta del SRI disponible en JSON (estado del comprobante y webhooks), con los mensajes y códigos del SRI si los hay; 7) Genera el RIDE PDF y envía el email al cliente (por defecto; con sendEmail: false no se envía). Todo el proceso toma típicamente unos segundos.
¿Cuál es la diferencia entre integrar directamente con el SRI vs usar Factuplan API?
Integrar directo con el SRI requiere: 1) Cliente SOAP en tu stack (XML, WSDL, namespaces); 2) Generación manual de XMLs respetando schemas XSD del SRI y la Ficha Técnica v2.32; 3) Firma XAdES-BES con librerías de criptografía (extraer P12, firmar con SHA-256, agregar timestamp, validar canónicamente); 4) Cálculo manual de la clave de acceso de 49 dígitos con módulo 11; 5) Manejo de errores SOAP con códigos del SRI mal documentados; 6) Reintentos cuando el SRI cae; 7) Generación del RIDE PDF y envío de email. Es desarrollo de 2-6 meses con un team experto. Factuplan API te entrega todo eso en una API REST estándar que llamas desde cualquier lenguaje en minutos.
¿Cuáles son los modos A, B y C del SRI?
Son las 3 formas de operar definidas por el SRI: Modo A (recomendado, default en Factuplan): el sistema de facturación electrónica genera el XML, lo firma con tu P12, lo autoriza ante el SRI y genera el RIDE PDF — flujo end-to-end automatizado. Modo B: tú generas el XML por tu cuenta (útil si tu ERP ya tiene un generador de XMLs SRI) y se lo envías a Factuplan, que lo firma y autoriza. Modo C: tú generas el XML, Factuplan solo lo firma con tu P12 (POST /v1/developer/sign) y el envío al SRI lo haces tú. Los 3 modos usan la misma API key y se eligen por endpoint según convenga a tu arquitectura. La mayoría de integraciones usan Modo A porque es más simple.
¿Qué pasa si el SRI está caído y necesito facturar?
El SRI define un mecanismo de contingencia: emites el comprobante con tipo de emisión 2 (en lugar de 1 = normal) en la clave de acceso, entregas el RIDE preliminar al cliente, y cuando el SRI vuelve, reenvías el XML para autorización formal. Factuplan API no emite en contingencia (siempre usa tipo de emisión 1), pero tampoco bloquea tu venta: el POST responde de inmediato con la clave de acceso de 49 dígitos y el envío al SRI ocurre en segundo plano, con reintentos. Si el SRI sigue sin responder, el comprobante queda en ERROR (recibes invoice.error) y Factuplan lo reintenta automáticamente cuando el SRI vuelve. Recibes el evento invoice.authorized vía webhook cuando el SRI finalmente autoriza.
¿Cómo verifico el estado SRI de un comprobante después de emitirlo?
Tres formas: 1) Asincrónica via webhooks: configuras tu endpoint en Dashboard → Developer → Webhooks y recibes invoice.authorized o invoice.rejected cuando el SRI responde (invoice.rejected trae los mensajes del SRI en reason). Es lo recomendado para producción. 2) Sincrónica via GET /v1/developer/receipts/:id/status que retorna el estado actual (status) y, si fue rechazado, los mensajes del SRI en messages. 3) Manual con la herramienta /herramientas/verificar-factura-sri usando la clave de acceso de 49 dígitos. AUTHORIZED confirma que el SRI registró el comprobante y COMPLETED es el estado final (PDF listo y correo enviado, si aplica); RECEIVED_SRI es transitorio (esperando autorización); REJECTED requiere corregir los datos y emitir de nuevo; ERROR significa que el comprobante no terminó de emitirse y se puede reintentar.
¿Qué errores del SRI maneja la API automáticamente?
Factuplan API valida antes de enviar al SRI para evitar errores comunes: formato de la identificación del cliente, tarifa IVA fuera de catálogo y pagos que no suman el total; además genera por ti el secuencial y la clave de acceso. Los errores del SRI (firma vencida, certificado emitido para otro RUC, datos del establecimiento desactualizados, etc.) no llegan como excepción: el comprobante queda en REJECTED y los mensajes del SRI, con su código, vienen en messages de GET /v1/developer/receipts/:id/status y en el webhook invoice.rejected. No te rechaza silenciosamente — siempre sabes exactamente qué pasó y cómo arreglarlo.
¿Puedo emitir todos los comprobantes electrónicos del SRI?
Sí. La API soporta los 6 tipos de comprobantes electrónicos definidos por el SRI: facturas (código 01), liquidaciones de compra de bienes y servicios (03), notas de crédito (04), notas de débito (05), guías de remisión (06) y comprobantes de retención (07). Cinco tienen endpoint JSON dedicado (/v1/developer/invoices, /credit-notes, /debit-notes, /withholdings, /purchase-settlements); la guía de remisión se emite enviando tu propio XML a /v1/developer/sign-and-authorize (Modo B) o desde el panel. Todos pasan por el mismo flujo de firma y autorización, con la misma autorización oficial del SRI y la misma clave de acceso de 49 dígitos.
¿La API funciona en sandbox sin firma electrónica real?
Sí. Con una API key de pruebas (prefijo ak_test_*) los comprobantes que emites por los endpoints JSON (Modo A) son ficticios y NO se envían al SRI real — la recepción y la autorización se simulan, y el número de autorización es TEST- seguido de la clave de acceso. Si además emites con el contribuyente de pruebas que trae tu cuenta nueva (RUC 9999999990001), tampoco necesitas firma electrónica: el XML no se firma. Los comprobantes de sandbox se eliminan automáticamente cada hora para mantener el ambiente limpio. Esto permite que developers prueben la integración completa sin necesidad de obtener firma electrónica P12 ni RUC activo. El Modo B (sign-and-authorize) es distinto: incluso con ak_test_* firma con tu certificado y envía el XML al ambiente de pruebas del SRI. Cuando estés listo para producción, cambias la API key por ak_live_*, cargas tu firma real en el dashboard y los comprobantes empiezan a enviarse al SRI real con autorización oficial.
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