Your system calls one API. SEFAZ stays out of your way.
NF-e, NFC-e, CT-e, CT-e OS, and MDF-e — request one, get back a signed, authorized document. When the origin SEFAZ is down we retry through the state's SVC, then EPEC if you're authorized, automatically. Your webhook fires the moment the status changes.
curl -X POST https://nfja.com.br/api/v1/nfe \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Idempotency-Key: 6f1c9c0e-3b7a-..." \
-d '{
"ref": "pedido-2001",
"recipient": { "name": "Cliente Exemplo Ltda" },
"items": [ ... ]
}'
Autorizado o uso da NF-e
sefaz_code 100 · pedido-2001
XML and DANFE ready
Integrations
- SEFAZ
-
- IBPT
- NFePHP
- Direct to SEFAZ
- A1 certificate
- Automatic SVC/EPEC contingency
- Data handled under the LGPD
Modules
Six pieces. One API.
Each piece removes a manual step — no spreadsheet on the side, no certificate juggling, no second system to double-check SEFAZ.
Issue by API
Call one endpoint — we build, sign, and transmit the XML for you.
Automatic failover
Origin SEFAZ down? We retry through the state's SVC, then EPEC if you're authorized — no extra call from you.
Webhooks
The moment status changes, your system knows — no polling.
A1 certificate
Upload it once. We sign every document with it until it expires.
Multi-company
One account, as many issuing companies as you need, each with its own environment and numbering.
Operations panel
Every SEFAZ interaction, XML, and DANFE — one click away.
- pedido-2001 NF-e · 55 Authorized Protocol received
- pedido-2002 NFC-e · 65 Authorized XML and DANFE ready
- frete-0417 CT-e · 57 Processing Awaiting SEFAZ
- manifesto-88 MDF-e · 58 Authorized Webhook delivered
Illustration of the Documents screen in the panel (sample data).
Pipeline
From your call to an authorized document in seconds, not tickets.
This is the actual path a document takes through the gateway — nothing hidden.
-
01
NF-e, CT-e, or MDF-e request
arrives through the API
-
02
XML built and signed
with your company's A1 certificate
-
03
Sent to SEFAZ
origin, then SVC, then EPEC if needed
-
04
Authorized
a protocol number comes back
-
05
Your system is notified
webhook fires, XML and DANFE ready
Your API call reaches the gateway. The XML is assembled field by field. Signed with your company's A1 certificate. Transmitted to SEFAZ — origin, then SVC, then EPEC. SEFAZ answers with a protocol number. Your webhook fires; XML and DANFE are ready.
How it works
From your first call to an authorized document, step by step.
Nothing hidden — this is exactly what runs, in this order.
-
01
Get a token
An account token creates companies and certificates; a company token issues documents — each scoped to only the abilities you grant.
-
02
Register the company and its certificate
CNPJ and A1 certificate, validated and stored once.
-
03
Call the document endpoint
POST to /nfe, /nfce, /cte, or /mdfe with the payload — we build, sign, and transmit it.
-
04
We handle SEFAZ
Origin down? We retry through the SVC, then EPEC if authorized — you never see the outage.
-
05
Your system gets notified
A webhook fires on every status change; XML and DANFE are ready to download.
How to use
One request in, one authorized document out.
Send the JSON with your company token. The gateway answers right away and notifies your webhook when SEFAZ decides.
POST to /api/v1/nfe with your company token. The Idempotency-Key makes retries safe. Replace SEU_TOKEN with your token.
curl -X POST https://nfja.com.br/api/v1/nfe \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Idempotency-Key: 6f1c9c0e-3b7a-4d52-9d3e-1c2f8a7b5e10" \
-H "Content-Type: application/json" \
-d '{
"ref": "pedido-2001",
"identification": {
"operation_nature": "Venda de mercadoria",
"operation_type": 1,
"destination": 2,
"purpose": 1,
"final_consumer": 0,
"buyer_presence": 9
},
"recipient": {
"name": "Cliente Exemplo Ltda",
"cnpj": "11222333000181",
"state_registration_indicator": 1,
"state_registration": "12345678"
},
"items": [
{
"code": "CAN-AZ-001",
"description": "Caneta esferográfica azul",
"ncm": "96081000",
"cfop": "6101",
"commercial_unit": "CX",
"commercial_quantity": "10.0000",
"commercial_unit_price": "25.0000000000",
"gross_amount": "250.00"
}
],
"totals": {
"products_amount": "250.00",
"document_amount": "250.00"
},
"payments": [
{ "indicator": 1, "method": "15", "amount": "250.00", "date": "2026-10-13" }
],
"transport": { "freight_mode": 9 }
}'
202 Accepted: the document is processing while SEFAZ answers. Fields shown are the main ones.
HTTP/1.1 202 Accepted
{
"id": "0198f2a4-5c1e-7d3b-9a64-2b8f1e0c7d55",
"ref": "pedido-2001",
"model": 55,
"environment": 2,
"status": "processing_authorization",
"emission_type": 1,
"series": 1,
"number": 1042,
"access_key": null,
"protocol": null,
"sefaz_code": null,
"sefaz_message": null,
"transmission_attempts": 0,
"links": {
"self": "/api/v1/nfe/pedido-2001",
"xml": "/api/v1/nfe/pedido-2001/xml",
"danfe": "/api/v1/nfe/pedido-2001/danfe"
}
}
When the status changes we POST this event to your URL, signed in the X-Fiscal-Gateway-Signature header.
POST https://seu-sistema.com.br/webhooks/nfja
X-Fiscal-Gateway-Signature: t=1760659200,v1=<hmac-sha256>
X-Fiscal-Gateway-Event-Id: 0198f2a4-9e10-7a21-8c3d-5f6b7a8c9d01
{
"id": "0198f2a4-9e10-7a21-8c3d-5f6b7a8c9d01",
"type": "nfe.status_changed",
"occurred_at": "2026-10-16T21:41:07-03:00",
"environment": 2,
"company_id": "0198f2a3-1b2c-7d4e-8f50-6a7b8c9d0e1f",
"document": {
"ref": "pedido-2001",
"model": 55,
"status": "authorized",
"emission_type": 1,
"sequence": 2,
"series": 1,
"number": 1042,
"access_key": "35261011222333000181550010000010421000010427",
"protocol": "135260000012345",
"sefaz_code": 100,
"sefaz_message": "Autorizado o uso da NF-e",
"transmission_attempts": 1,
"links": {
"self": "/api/v1/nfe/pedido-2001",
"xml": "/api/v1/nfe/pedido-2001/xml",
"danfe": "/api/v1/nfe/pedido-2001/danfe"
}
}
}
Abbreviated payload — every field is described in the API reference.
Read the docsPay for volume. No surprise on the invoice.
Every plan includes the full API, webhooks, the A1 certificate, and the panel. What changes is the monthly volume and the document models.
Start
To start integrating and issuing.
200 documents/month
overage R$ 0,49/doc
- NF-e and NFC-e
- Webhooks
- A1 certificate
- 1 issuing company
- Operations panel
Pro
HIGHLIGHTFor operations with more than one model.
1.000 documents/month
overage R$ 0,32/doc
- Everything in Start
- CT-e, CT-e OS, and MDF-e
- SVC/EPEC contingency
- Tax calculation
- Up to 5 issuing companies
Escala
For high volume and several companies.
5.000 documents/month
overage R$ 0,22/doc
- Everything in Pro
- GNRE
- DF-e distribution service
- Unlimited issuing companies
Enterprise
Custom volume and terms.
volume on request
overage on request
- Everything in Escala
- Negotiated commercial terms
- Implementation support
FAQ
Frequently asked questions
Next step
Stop managing SEFAZ. Start issuing.
Put fiscal document issuance behind one API — with automatic contingency and a webhook for every change.