ECAV SIFEN

API SIFEN: integração de faturamento eletrônico via REST

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.

ECAV SIFEN API
Visão rápida
REST
API com JSON
50
documentos por solicitação em lote
HMAC
webhooks assinados
O que é

O que é a API SIFEN da ECAV e o que ela resolve?

É 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.

Autenticação

Como me autentico e qual URL uso?

  • A URL base de produção é https://sifen.ecav.com.py.
  • Cada solicitação leva Authorization: Bearer sk_live_.... Para testes usa-se uma chave sk_test_....
  • A chave identifica o seu tenant. Uma chave inválida ou revogada devolve 401.
  • O ambiente do SIFEN (teste ou produção) vai em 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.

Emitir

Como emito uma nota fiscal eletrônica pela API?

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).

Solicitação
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
factura.json (dados fictícios)
{
  "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:

Resposta
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:

  • Idempotency-Key. Se você tentar de novo após um timeout com a mesma chave, recebe o mesmo 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.
  • Certificado. Vai em 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.

Consultar

Como consulto o resultado de um documento?

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.

Consulta
curl https://sifen.ecav.com.py/v1/sifen/documents/req-8f3a1c2e9b7d4e60 \
  -H "Authorization: Bearer sk_test_XXXXXXXXXXXXXXXX"
Resposta (documento aprovado)
{
  "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.

Webhooks

Como recebo o resultado por webhook, sem consultar?

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.

Endpoints

Que outros endpoints a API SIFEN tem?

EndpointPara 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.

Erros

Que códigos de resposta ela devolve?

CódigoQuando
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.

Testes

Como testo a integração sem emitir de verdade?

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.

Planos

Quanto custa a API SIFEN?

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.

Empreenda
Gs. 100.000 /mês

Até 200 documentos por mês

Gs. 1.000.000 por ano (2 meses grátis)

Empresa
Gs. 300.000 /mês

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.

Perguntas frequentes

Perguntas frequentes sobre a API SIFEN

A API é síncrona?

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.

Como evito emitir duas vezes o mesmo documento?

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.

Posso enviar vários documentos em uma única chamada?

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 que acontece se a DNIT estiver fora do ar?

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.

Como cancelo um documento pela API?

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.

Onde está a referência completa dos campos?

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.

Quanto custa?

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.

Vamos falar sobre sua empresa.

Agende 30 minutos com um consultor. Sem roteiro, sem slides. Mostramos o produto e dizemos se faz sentido.

WhatsApp