Manual de la API
Emite comprobantes electrónicos e intégralos con tu sistema. Compatible con el contrato api/v1 anterior.
Swagger UI (probar en vivo) Descargar colección Postman
Introducción
Esta API REST permite emitir factura, notas de crédito y débito, retención, guía de remisión y
liquidación de compra. Si ya consumías api/v1, sigue funcionando.
URL base:
https://facturacion.disisot.com/facturacion/api/v1
Las peticiones y respuestas son application/json (UTF-8).
Autenticación
Cada petición se autentica con el token del emisor en la cabecera X-Key:
X-Key: <token del emisor> Content-Type: application/json
El token de cada emisor está en el panel (sección Emisores). A diferencia del sistema anterior,
ya no se envía la clave del certificado (X-Password): el
.p12 nunca sale del servidor.
Proceso de emisión
La emisión es asíncrona:
- Envías el comprobante → respuesta inmediata con la clave de acceso y el estado inicial.
- El sistema firma (XAdES), envía al SRI y consulta autorización en segundo plano.
- Por cada cambio de estado se notifica a tu
callback_urlcon elcustom_uidque enviaste (ver Webhooks).
Estados: borrador → validado → firmado → enviado → autorizado → notificado (o rechazado / error).
Emitir factura
POST https://facturacion.disisot.com/facturacion/api/v1/invoices/issue
Cuerpo
{
"ambiente": "1", // 1 pruebas, 2 producción
"tipo_emision": "1",
"custom_uid": "abc-123", // tu id para idempotencia y callback
"secuencial": "123", // opcional; si se omite, lo asigna el sistema
"fecha_emision": "2026-06-20 10:00:00",
"emisor": {
"ruc": "1790012345001",
"razon_social": "MI EMPRESA S.A.",
"establecimiento": { "codigo": "001", "punto_emision": "001" },
"obligado_contabilidad": true
},
"comprador": {
"tipo_identificacion": "05", // ver tabla
"identificacion": "1710034065001",
"razon_social": "JUAN PEREZ",
"direccion": "Av. Siempre Viva 123",
"email": "cliente@correo.com"
},
"detalles": [
{
"codigo_principal": "P001",
"descripcion": "SERVICIO PROFESIONAL",
"cantidad": 1,
"precio_unitario": 100.00,
"descuento": 0.00,
"impuestos": [
{ "codigo": "2", "codigo_porcentaje": "4", "tarifa": 15, "base_imponible": 100.00, "valor": 15.00 }
]
}
],
"pagos": [ { "forma_pago": "01", "total": 115.00 } ],
"info_adicional": { "telefono": "099..." }
}
Respuesta
{
"Code": 200,
"Mensaje": "Comprobante recibido",
"claveAcceso": "2006202601179001234500110010010000001231234567813",
"numeroDocumento": "001-001-000000123",
"estado": "borrador"
}
El XML firmado, la autorización y el RIDE se completan en segundo plano y se avisan por callback.
Ejemplo con curl
curl -X POST https://facturacion.disisot.com/facturacion/api/v1/invoices/issue \
-H "X-Key: TU_TOKEN_DE_EMISOR" \
-H "Content-Type: application/json" \
-d '{ "ambiente":"1","custom_uid":"abc-123",
"emisor":{"ruc":"1790012345001","establecimiento":{"codigo":"001","punto_emision":"001"}},
"comprador":{"tipo_identificacion":"05","identificacion":"1710034065001","razon_social":"JUAN PEREZ","direccion":"Av. 123"},
"detalles":[{"descripcion":"SERVICIO","cantidad":1,"precio_unitario":100,
"impuestos":[{"codigo":"2","codigo_porcentaje":"4","tarifa":15}]}],
"pagos":[{"forma_pago":"01","total":115}] }'
# Consultar y descargar
curl https://facturacion.disisot.com/facturacion/api/v1/invoices/{claveAcceso} -H "X-Key: TU_TOKEN_DE_EMISOR"
curl https://facturacion.disisot.com/facturacion/api/v1/ver/{claveAcceso}/pdf -H "X-Key: TU_TOKEN_DE_EMISOR" -o ride.pdf
Emitir desde XML (solo clientes legacy)
POST https://facturacion.disisot.com/facturacion/api/v1/invoices/issue-xml
FacturacionCliente.php).
Las integraciones nuevas deben usar la emisión por JSON
(/invoices/issue): es más simple y no debes armar ni validar el XML.
Envía el XML ya armado como archivo en el campo xml
(multipart) o como cuerpo application/xml. El servicio lo
firma, lo envía al SRI y lo autoriza
(el certificado lo aporta el emisor del X-Key; el XML puede ir sin firmar).
Respuesta 201: { "Code":"200", "claveAcceso":"…", "numeroDocumento":"001-002-000000007", "estado":"RECIBIDA" }.
Validaciones: el RUC del XML debe coincidir con el emisor, la clave de acceso debe tener 49 dígitos y no estar duplicada.
Ejemplo con curl
curl -X POST https://facturacion.disisot.com/facturacion/api/v1/invoices/issue-xml \ -H "X-Key: TU_TOKEN_DE_EMISOR" \ -H "X-Password: CLAVE_DEL_CERTIFICADO" \ -F "xml=@factura.xml"
Notas de crédito / débito
POST https://facturacion.disisot.com/facturacion/api/v1/credit-notes/issue ·
POST https://facturacion.disisot.com/facturacion/api/v1/debit-notes/issue
Mismo formato que la factura, más el documento que se modifica:
"documento_modificado": {
"tipo": "01", // 01 = factura
"numero": "001-001-000000050",
"fecha_emision": "2026-05-10",
"motivo": "DEVOLUCIÓN PARCIAL"
}
Retención
POST https://facturacion.disisot.com/facturacion/api/v1/retentions/issue
{
"ambiente": "1", "custom_uid": "ret-1",
"emisor": { "ruc": "1790012345001", "establecimiento": { "codigo":"001","punto_emision":"001" } },
"sujeto_retenido": { "tipo_identificacion":"04", "identificacion":"1790...001", "razon_social":"PROVEEDOR" },
"periodo_fiscal": "06/2026",
"retenciones": [
{
"codigo": "1", // 1 renta, 2 IVA
"codigo_porcentaje": "303",
"base_imponible": 100.00, "porcentaje": 10, "valor_retenido": 10.00,
"tipo_documento_sustento": "01",
"numero_documento_sustento": "001001000000050", // 15 dígitos, sin guiones
"fecha_emision_documento_sustento": "2026-05-10"
}
]
}
Guía de remisión
POST https://facturacion.disisot.com/facturacion/api/v1/waybills/issue
{
"ambiente": "1", "custom_uid": "guia-1",
"emisor": { "ruc": "1790012345001", "establecimiento": { "codigo":"001","punto_emision":"001" } },
"transportista": { "razon_social":"TRANSPORTES X", "tipo_identificacion":"04", "identificacion":"1790...001", "placa":"PXY1234" },
"fecha_inicio_transporte": "2026-06-20", "fecha_fin_transporte": "2026-06-21",
"destinatarios": [
{
"identificacion": "1710034065001", "razon_social": "CLIENTE",
"direccion": "Av. Destino 99", "motivo_traslado": "Venta",
"items": [ { "codigo_principal":"P001", "descripcion":"PRODUCTO", "cantidad":3 } ]
}
]
}
Liquidación de compra
POST https://facturacion.disisot.com/facturacion/api/v1/purchase-settlements/issue
Mismo formato que la factura; el comprador es el proveedor al que se le liquida.
Consultar comprobante
GET https://facturacion.disisot.com/facturacion/api/v1/invoices/{claveAcceso}
{
"claveAcceso": "2006...813",
"numeroDocumento": "001-001-000000123",
"estado": "autorizado",
"autorizado_en": "2026-06-20 10:05:00"
}
Descargar XML / RIDE
GET https://facturacion.disisot.com/facturacion/api/v1/ver/{claveAcceso}/xml — XML autorizado
GET https://facturacion.disisot.com/facturacion/api/v1/ver/{claveAcceso}/pdf — RIDE (PDF)
Reenviar / reprocesar
Reprocesar (re-firmar y reenviar al SRI)
Si un comprobante quedó en error o rechazado y ya corregiste la causa,
puedes reprocesarlo (vuelve a pasar por firma → SRI → autorización):
POST https://facturacion.disisot.com/facturacion/api/v1/invoices/{claveAcceso}/reissue
También: credit-notes, debit-notes,
retentions, ats-retentions, waybills,
purchase-settlements con /{claveAcceso}/reissue.
{
"Code": "200",
"Mensaje": "Comprobante reenviado a procesar (firma/SRI/autorización)",
"claveAcceso": "2006...813",
"estado": "borrador"
}
Reenviar el correo al receptor
POST https://facturacion.disisot.com/facturacion/api/v1/edocs/send-email/{claveAcceso}
{ "Code": "200", "Mensaje": "Reenvío de correo encolado", "claveAcceso": "2006...813" }
Compras (SRI)
Consulta las compras (comprobantes recibidos) descargadas del SRI, con sus impuestos y el
crédito tributario. Usa la API nueva con token Bearer (no X-Key):
GET https://facturacion.disisot.com/api/v1/compras?periodo=YYYY-MM
Obtén el token con POST https://facturacion.disisot.com/api/v1/auth/login. Parámetros opcionales: periodo (YYYY-MM), emisor_id.
curl "https://facturacion.disisot.com/api/v1/compras?periodo=2026-06" \
-H "Authorization: Bearer TU_TOKEN"
{
"periodo": "2026-06",
"totales": { "base": 100.00, "iva": 15.00, "total": 115.00, "credito_tributario": 15.00 },
"compras": [
{
"codigo_comprobante": "...", "ruc_emisor": "1790...001", "razon_social_emisor": "PROVEEDOR",
"fecha_emision": "2026-06-15", "numero": "001-001-000000005", "tipo_comprobante": "FACTURA",
"base": 100.00, "iva": 15.00, "total": 115.00, "credito_tributario": true,
"impuestos": [ { "nombre": "IVA", "porcentaje": 15, "base": 100.00, "valor": 15.00 } ]
}
]
}
Webhooks (callback)
Configura la URL de callback del emisor (en el panel, al editar el emisor, o por API).
Por cada cambio de estado, el sistema hace un POST con cuerpo JSON a esa URL:
POST https://tu-sistema.com/callback
Content-Type: application/json
X-Signature: sha256=<HMAC-SHA256 del cuerpo con tu secreto>
{
"custom_uid": "abc-123",
"estado": "autorizado",
"mensaje": null,
"clave_acceso": "2006...813",
"numero_documento": "001-001-000000123"
}
Verificar la firma
Cada emisor tiene un secreto de webhook (visible y regenerable en el panel, al editar el emisor).
Calcula el HMAC del cuerpo crudo y compáralo con la cabecera X-Signature:
# PHP
$firma = 'sha256=' . hash_hmac('sha256', $rawBody, $secreto);
if (! hash_equals($firma, $request->header('X-Signature'))) { http_response_code(401); exit; }
El custom_uid es la pieza de correlación: úsalo para casar el aviso con tu venta.
Se reintenta hasta 3 veces ante fallos.
Integraciones y conectores
Además de la API directa, hay conectores y kits listos para los sistemas
más usados. Todos consumen los mismos endpoints de este manual, así que puedes partir de uno
y adaptarlo. El código está en la carpeta integrations/ del proyecto y la
guía completa en docs/integracion-terceros.md.
SDK y plataformas
| SDK PHP | Cliente sin dependencias (cURL) con métodos para factura, NC/ND, retención, guía y liquidación. |
| WooCommerce | Plugin de WordPress: emite al cambiar el estado del pedido, con enlace al RIDE. |
| Zapier | App con acción “Emitir factura” para automatizar desde miles de apps. |
| Make (Integromat) | App personalizada con el módulo de emisión. |
| Odoo 17 | Módulo que agrega el botón “Emitir al SRI” en las facturas de cliente. |
ERP y CRM
| SAP Business One | Starter C# (.NET): lee la factura del Service Layer y la emite. |
| Dynamics 365 Business Central | Extensión AL: emite al registrar (post) la factura de venta. |
| Sage (50 / 200 / Business Cloud) | Middleware REST (Node.js) que recibe la factura de Sage y la emite. |
| Zoho (Books / CRM) | Función Deluge (o Zoho Flow sin código) disparada al crear la factura. |
| EspoCRM | Extensión (hook PHP) que emite al guardar la factura; alternativa no-code con Workflow. |
¿Usas otro sistema? Con la API REST + webhooks puedes integrar cualquier ERP/CRM. Toma el conector más parecido como base o revisa la guía de integración.
Tablas de referencia
Tipo de identificación del comprador
| 04 | RUC |
| 05 | Cédula |
| 06 | Pasaporte |
| 07 | Consumidor final |
| 08 | Identificación del exterior |
Códigos de IVA (codigo_porcentaje)
| 0 | 0% |
| 4 | 15% |
| 2 | 12% |
| 5 | 5% |
| 6 | No objeto de impuesto |
| 7 | Exento |
Formas de pago (forma_pago)
| 01 | Sin sistema financiero (efectivo) |
| 19 | Tarjeta de crédito |
| 20 | Otros con sistema financiero |
| 17 | Dinero electrónico |
Ambiente
| 1 | Pruebas (certificación) |
| 2 | Producción |
¿Listo para integrar? Crea tu cuenta y obtén el token de tu emisor.