Hasta 200 comprobantes por mes
Gs. 1.000.000 por año (2 meses gratis)
Enviá un JSON, recibí un identificador, y el gateway de ECAV firma, transmite a la DNIT y te devuelve el CDC, el XML y el KuDE. Es la misma API que usa el módulo de Odoo.
Es un gateway REST de facturación electrónica para Paraguay, pensado para sistemas que no son Odoo: un ERP propio o de terceros, un punto de venta, un e-commerce, una facturación recurrente. Vos armás el documento en JSON. El gateway construye el XML, lo valida, lo firma con tu certificado, lo envía a SIFEN, consulta el lote y guarda el XML y el KuDE.
El modelo es asíncrono: toda emisión responde 202 con un identificador, y el resultado se consulta o llega por webhook. No hay modo síncrono. La latencia promedio es de menos de 2 segundos, así que consultar el resultado cada segundo da una experiencia casi inmediata sin sostener una conexión abierta.
Si ya usás Odoo, probablemente no necesites la API: el módulo de Odoo usa este mismo gateway.
https://sifen.ecav.com.py.Authorization: Bearer sk_live_.... Para pruebas se usa una clave sk_test_....context.environment y tiene que ser coherente con el prefijo de la clave.Para obtener una clave, escribinos. Antes de la primera llamada necesitás tener resueltos los requisitos de la DNIT: certificado .p12, habilitación como facturador electrónico, timbrado y CSC.
Se hace con un POST /v1/sifen/documents. El cuerpo tiene cuatro partes: document_kind (factura, autofactura, nota_credito, nota_debito o remision), invoice_data (el documento: receptor, ítems, condición de pago), params_data (el emisor y el timbrado) y context (certificado, CSC, ambiente y una referencia tuya).
curl -X POST https://sifen.ecav.com.py/v1/sifen/documents \
-H "Authorization: Bearer sk_test_XXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: FAC-2026-0001" \
-d @factura.json
{
"document_kind": "factura",
"invoice_data": {
"establecimiento": "001",
"punto": "001",
"tipoTransaccion": 2,
"tipoImpuesto": 1,
"moneda": "PYG",
"condicion": { "tipo": 1, "entregas": [{ "tipo": 1, "monto": 110000 }] },
"cliente": { "ruc": "5012345-6", "razonSocial": "Cliente SA" },
"items": [{ "descripcion": "Servicio mensual", "cantidad": 1, "precioUnitario": 110000 }]
},
"params_data": { "ruc": "80000000-7", "timbradoNumero": "12345678" },
"context": {
"certificate_b64": "<.p12 en base64>",
"certificate_password": "<contraseña del .p12>",
"csc": "<CSC>",
"csc_id": "0001",
"environment": "test",
"document_ref": "FAC-2026-0001"
}
}
El gateway responde de inmediato, sin esperar a la DNIT:
HTTP/1.1 202 Accepted
{
"request_id": "req-8f3a1c2e9b7d4e60",
"poll_url": "/v1/sifen/documents/req-8f3a1c2e9b7d4e60",
"webhook_will_fire": true,
"processing_delayed": false
}
Dos detalles que ahorran problemas:
request_id y el documento no se emite dos veces. La clave es única por tenant. Usá, por ejemplo, el identificador del documento en tu sistema.context como certificate_b64 y certificate_password. Las demás formas de entregarlo están en el manual de integración.La referencia completa de campos por tipo de documento, el código de verificación de webhooks y las opciones para el certificado no se publican acá: se entregan en el manual de integración cuando se activa tu cuenta. Pedí tu clave y te lo enviamos.
Con GET /v1/sifen/documents/{request_id o CDC}. Funciona con el identificador de la emisión o con el CDC del documento, y solo ves los de tu tenant.
curl https://sifen.ecav.com.py/v1/sifen/documents/req-8f3a1c2e9b7d4e60 \
-H "Authorization: Bearer sk_test_XXXXXXXXXXXXXXXX"
{
"request_id": "req-8f3a1c2e9b7d4e60",
"cdc": "01800000007001001000000122026110511234567892",
"state": "accepted",
"sifen_status_code": "0260",
"sifen_status_message": "Autorización del DE satisfactoria",
"xml_url": "<URL firmada del XML>",
"kude_url": "<URL firmada del KuDE>",
"extra": { "protocolo": "<número de autorización>" }
}
El campo state toma uno de estos valores: pending (encolado), signed (firmado, con CDC y XML, a la espera de la DNIT), accepted (aprobado), accepted_obs (aprobado con observación), rejected, cancelled, inutilized o error (error técnico, sin veredicto de SIFEN). sifen_status_code y sifen_status_message traen el código y el mensaje de la DNIT; extra.protocolo es el número de autorización que agrega la DNIT al documento.
Si necesitás la respuesta de la DNIT en ese momento y no la que ya tenemos registrada, POST /v1/sifen/documents/{id}/consult le pregunta a SIFEN con el certificado que enviás en context.
Cada cambio de estado se puede entregar con un POST a tu URL. Las entregas van firmadas con HMAC-SHA256 con el secreto de tu webhook, y llevan cabeceras para verificar la firma, identificar el evento y descartar repetidas. La entrega es al menos una vez, así que una puede repetirse; si tu endpoint falla muchas veces seguidas, el gateway lo desactiva. Webhooks y consulta conviven: podés usar los dos. El código de verificación está en el manual de integración.
| Endpoint | Para qué sirve |
|---|---|
POST /v1/sifen/documents |
Emitir un documento. |
POST /v1/sifen/documents/batch |
Emitir hasta 50 documentos en una solicitud. Cada uno se valida por separado: uno inválido no tumba a los demás. |
GET /v1/sifen/documents/{request_id o CDC} |
Consultar el estado y los enlaces al XML y al KuDE. |
POST /v1/sifen/documents/{id}/consult |
Preguntarle a SIFEN en el momento. |
POST /v1/sifen/documents/{cdc}/cancel |
Cancelar un documento aprobado, con su motivo. |
POST /v1/sifen/range/inutilize |
Inutilizar un rango de numeración. |
POST /v1/sifen/documents/{cdc}/nominacion y /transporte |
Eventos de nominación y de datos de transporte. |
POST /v1/sifen/documents/{cdc}/kude |
Regenerar el KuDE. |
POST /v1/sifen/receptor-events/... |
Eventos del receptor: conformidad, disconformidad, desconocimiento y notificación. |
GET /v1/sifen/events/{request_id} |
Resultado de un evento (cancelación, inutilización, etc.). |
GET /v1/sifen/ruc/{ruc} y /ruc-search |
Consultar el padrón de la DNIT por RUC o por nombre. |
La consulta de RUC es la misma que ofrece la herramienta gratuita Consulta tu RUC. Para decodificar o validar un CDC sin código, usá el validador de CDC.
| Código | Cuándo |
|---|---|
| 202 | Documento encolado. |
| 401 | Falta la clave, o es inválida o está revocada. |
| 402 | Se agotó el límite de gasto del plan. |
| 403 | Suscripción suspendida o pausada. |
| 404 | El documento no existe o no es de tu tenant. |
| 413 | El cuerpo supera el tamaño máximo. |
| 422 | Falla la validación. La respuesta indica qué campo. |
| 429 | Cola saturada. Trae Retry-After: reintentá pasado ese tiempo. |
Un documento que la DNIT rechaza no consume cuota: se descuenta solo cuando SIFEN lo acepta.
Con una clave sk_test_ y context.environment en test, el gateway usa el ambiente de pruebas de la DNIT. Según la guía de pruebas de la DNIT, allí el timbrado de prueba es el RUC sin dígito verificador, de 8 dígitos, y el documento lleva la leyenda de ambiente de prueba, que el gateway agrega. La DNIT ofrece además un prevalidador para revisar un XML antes de enviarlo. El primer mes de ECAV SIFEN es gratis y sin tarjeta.
Los planes son los de ECAV SIFEN, por volumen mensual de comprobantes, y valen para las tres vías (API, Odoo y portal). Hay más detalle en precios.
Hasta 200 comprobantes por mes
Gs. 1.000.000 por año (2 meses gratis)
Hasta 500 comprobantes por mes
Gs. 2.000.000 por año (2 meses gratis)
Comprobantes ilimitados (uso razonable) · IVA incluido
Gs. 3.000.000 por año (2 meses gratis)
Uso razonable en Empresa: a partir de 3.000 comprobantes por mes te contactamos para asegurarte el mejor plan.
No. Toda emisión responde 202 con un request_id y el resultado se consulta con un GET o llega por webhook. La latencia promedio es de menos de 2 segundos.
Enviá el encabezado Idempotency-Key con un valor único por operación, por ejemplo el identificador del documento en tu sistema. Si reintentás con la misma clave, recibís el mismo request_id sin una emisión nueva.
Sí. POST /v1/sifen/documents/batch acepta hasta 50 documentos por solicitud; cada uno se valida y se encola por separado, y el gateway los agrupa en el mismo lote de SIFEN.
El documento queda en proceso y no se pierde: el gateway reintenta el envío cuando la DNIT no responde, y tu sistema consulta el resultado por request_id hasta que haya veredicto, o lo recibe por webhook.
Con POST /v1/sifen/documents/{cdc}/cancel y un motivo. Si el plazo que fija la DNIT para ese tipo de documento ya venció, el gateway responde 422 con el detalle.
En el manual de integración, que entregamos al activar tu cuenta: trae los campos de cada tipo de documento, el código para verificar webhooks y las opciones para el certificado. Escribinos para pedir tu clave y recibirlo.
Desde Gs. 100.000 por mes según el volumen de comprobantes, con el primer mes gratis. Ver los planes más arriba y en precios.