Até 200 documentos por mês
Gs. 1.000.000 por ano (2 meses grátis)
Envie um JSON, receba um identificador, e o gateway da ECAV assina, transmite à DNIT e devolve o CDC, o XML e o KuDE. É a mesma API que o módulo do Odoo usa.
É um gateway REST de faturamento eletrônico para o Paraguai, pensado para sistemas que não são Odoo: um ERP próprio ou de terceiros, um PDV, um e-commerce, uma cobrança recorrente. Você monta o documento em JSON. O gateway constrói o XML, valida, assina com o seu certificado, envia ao SIFEN, consulta o lote e guarda o XML e o KuDE.
O modelo é assíncrono: toda emissão responde 202 com um identificador, e o resultado é consultado ou chega por webhook. Não há modo síncrono. A latência média é de menos de 2 segundos, então consultar o resultado a cada segundo dá uma experiência quase imediata sem manter uma conexão aberta.
Se você já usa Odoo, provavelmente não precisa da API: o módulo do Odoo usa este mesmo gateway.
https://sifen.ecav.com.py.Authorization: Bearer sk_live_.... Para testes usa-se uma chave sk_test_....context.environment e tem de ser coerente com o prefixo da chave.Para obter uma chave, escreva para nós. Antes da primeira chamada você precisa ter resolvidos os requisitos da DNIT: certificado .p12, habilitação como emissor eletrônico, timbrado e CSC.
Com um POST /v1/sifen/documents. O corpo tem quatro partes: document_kind (factura, autofactura, nota_credito, nota_debito ou remision), invoice_data (o documento: receptor, itens, condição de pagamento), params_data (o emissor e o timbrado) e context (certificado, CSC, ambiente e uma referência sua).
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"
}
}
O gateway responde na hora, sem esperar a DNIT:
HTTP/1.1 202 Accepted
{
"request_id": "req-8f3a1c2e9b7d4e60",
"poll_url": "/v1/sifen/documents/req-8f3a1c2e9b7d4e60",
"webhook_will_fire": true,
"processing_delayed": false
}
Dois detalhes que evitam problemas:
request_id e o documento não é emitido duas vezes. A chave é única por tenant. Use, por exemplo, o identificador do documento no seu sistema.context como certificate_b64 e certificate_password. As outras formas de entregá-lo estão no manual de integração.A referência completa de campos por tipo de documento, o código de verificação de webhooks e as opções para o certificado não são publicados aqui: são entregues no manual de integração quando a sua conta é ativada. Peça a sua chave e nós o enviamos.
Com GET /v1/sifen/documents/{request_id ou CDC}. Funciona com o identificador da emissão ou com o CDC do documento, e você só vê os do seu 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>" }
}
O campo state assume um destes valores: pending (enfileirado), signed (assinado, com CDC e XML, à espera da DNIT), accepted (aprovado), accepted_obs (aprovado com observação), rejected, cancelled, inutilized ou error (erro técnico, sem veredicto do SIFEN). sifen_status_code e sifen_status_message trazem o código e a mensagem da DNIT; extra.protocolo é o número de autorização que a DNIT acrescenta ao documento.
Se você precisa da resposta da DNIT naquele momento e não da que já temos registrada, POST /v1/sifen/documents/{id}/consult pergunta ao SIFEN com o certificado que você envia em context.
Cada mudança de estado pode ser entregue com um POST para a sua URL. As entregas vão assinadas com HMAC-SHA256 com o segredo do seu webhook, e levam cabeçalhos para verificar a assinatura, identificar o evento e descartar repetidas. A entrega é pelo menos uma vez, então uma pode se repetir; se o seu endpoint falhar muitas vezes seguidas, o gateway o desativa. Webhooks e consulta convivem: você pode usar os dois. O código de verificação está no manual de integração.
| Endpoint | Para que serve |
|---|---|
POST /v1/sifen/documents |
Emitir um documento. |
POST /v1/sifen/documents/batch |
Emitir até 50 documentos em uma solicitação. Cada um é validado separadamente: um inválido não derruba os demais. |
GET /v1/sifen/documents/{request_id ou CDC} |
Consultar o estado e os links do XML e do KuDE. |
POST /v1/sifen/documents/{id}/consult |
Perguntar ao SIFEN na hora. |
POST /v1/sifen/documents/{cdc}/cancel |
Cancelar um documento aprovado, com seu motivo. |
POST /v1/sifen/range/inutilize |
Inutilizar uma faixa de numeração. |
POST /v1/sifen/documents/{cdc}/nominacion e /transporte |
Eventos de nominação e de dados de transporte. |
POST /v1/sifen/documents/{cdc}/kude |
Regenerar o KuDE. |
POST /v1/sifen/receptor-events/... |
Eventos do receptor: conformidade, desconformidade, desconhecimento e notificação. |
GET /v1/sifen/events/{request_id} |
Resultado de um evento (cancelamento, inutilização, etc.). |
GET /v1/sifen/ruc/{ruc} e /ruc-search |
Consultar o cadastro da DNIT por RUC ou por nome. |
A consulta de RUC é a mesma da ferramenta gratuita Consulta de RUC. Para decodificar ou validar um CDC sem escrever código, use o validador de CDC.
| Código | Quando |
|---|---|
| 202 | Documento enfileirado. |
| 401 | A chave falta, é inválida ou foi revogada. |
| 402 | O limite de gasto do plano se esgotou. |
| 403 | Assinatura suspensa ou pausada. |
| 404 | O documento não existe ou não é do seu tenant. |
| 413 | O corpo excede o tamanho máximo. |
| 422 | A validação falhou. A resposta indica qual campo. |
| 429 | Fila saturada. Traz Retry-After: tente de novo depois desse tempo. |
Um documento que a DNIT rejeita não consome cota: ela só é descontada quando o SIFEN aceita o documento.
Com uma chave sk_test_ e context.environment em test, o gateway usa o ambiente de testes da DNIT. Segundo o guia de testes da DNIT, ali o timbrado de teste é o RUC sem dígito verificador, de 8 dígitos, e o documento leva a legenda de ambiente de teste, que o gateway acrescenta. A DNIT oferece ainda um prevalidador para revisar um XML antes de enviá-lo. O primeiro mês do ECAV SIFEN é grátis e sem cartão.
Os planos são os do ECAV SIFEN, por volume mensal de documentos, e valem para as três vias (API, Odoo e portal). Há mais detalhes em preços.
Até 200 documentos por mês
Gs. 1.000.000 por ano (2 meses grátis)
Até 500 documentos por mês
Gs. 2.000.000 por ano (2 meses grátis)
Documentos ilimitados (uso razoável) · IVA incluído
Gs. 3.000.000 por ano (2 meses grátis)
Uso razoável no Empresa: a partir de 3.000 documentos por mês entramos em contato para garantir o melhor plano.
Não. Toda emissão responde 202 com um request_id e o resultado é consultado com um GET ou chega por webhook. A latência média é de menos de 2 segundos.
Envie o cabeçalho Idempotency-Key com um valor único por operação, por exemplo o identificador do documento no seu sistema. Se tentar de novo com a mesma chave, recebe o mesmo request_id sem uma nova emissão.
Sim. POST /v1/sifen/documents/batch aceita até 50 documentos por solicitação; cada um é validado e enfileirado separadamente, e o gateway os agrupa no mesmo lote do SIFEN.
O documento fica em processo e não se perde: o gateway tenta o envio de novo quando a DNIT não responde, e seu sistema consulta o resultado por request_id até haver veredicto, ou o recebe por webhook.
Com POST /v1/sifen/documents/{cdc}/cancel e um motivo. Se o prazo que a DNIT define para esse tipo de documento já venceu, o gateway responde 422 com o detalhe.
No manual de integração que entregamos ao ativar a sua conta: traz os campos de cada tipo de documento, o código para verificar webhooks e as opções para o certificado. Escreva para nós para pedir a sua chave e recebê-lo.
A partir de Gs. 100.000 por mês conforme o volume de documentos, com o primeiro mês grátis. Veja os planos acima e em preços.