Documentacao da API

API REST para emissao de NF-e e NFC-e. Comunicacao direta com a SEFAZ, assinatura digital e DANFE automatico.

Base URL: https://api.axiom-nfe.com

Autenticacao

A API usa HTTP Basic Auth. Envie sua API key como username e deixe a senha vazia.

Authorization: Basic {base64(api_key + ':')}

Exemplo com curl:

curl -u "nfe_SuaApiKeyAqui:" https://api.axiom-nfe.com/nfe/emitir

Para uso interno (produtos Axioma), use o header X-Axiom-Internal.

Respostas de erro

Erros retornam JSON com campo error e opcionalmente details.

{
  "error": "Validation failed",
  "details": ["CNPJ is required", "UF is required"]
}
StatusSignificado
400Dados invalidos ou faltando
401API key invalida ou ausente
403Sem permissao para este recurso
404Recurso nao encontrado
422SEFAZ rejeitou o documento
429Rate limit excedido
502Erro de comunicacao com a SEFAZ

Rate Limiting

Headers retornados em toda resposta:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1709751234
PlanoLimite
Sandbox10 req/min
Basico60 req/min
Plus120 req/min
Premium300 req/min
Enterprise1.000 req/min

Cadastrar empresa

POST /empresas

Cadastra uma empresa (CNPJ) para emissao de documentos.

Body

CampoTipoDescricao
cnpj *stringCNPJ (14 digitos)
razaoSocial *stringRazao social
nomeFantasiastringNome fantasia
ie *stringInscricao estadual
crt *number1=Simples, 2=SN Excesso, 3=Normal
endereco *object{ xLgr, nro, xBairro, cMun, xMun, uf, cep }
ambientestring"homologacao" (default) ou "producao"
curl -X POST -u "nfe_key:" \
  -H "Content-Type: application/json" \
  -d '{
    "cnpj": "12345678000195",
    "razaoSocial": "Empresa Teste Ltda",
    "ie": "1234567890",
    "crt": 1,
    "endereco": {
      "xLgr": "Rua Teste",
      "nro": "100",
      "xBairro": "Centro",
      "cMun": "4314902",
      "xMun": "Porto Alegre",
      "uf": "RS",
      "cep": "90000000"
    }
  }' \
  https://api.axiom-nfe.com/empresas

Listar empresas

GET /empresas

Lista todas as empresas do cliente.

Upload de certificado A1

PUT /empresas/:id/certificado

Envia o certificado digital (PFX) e a senha.

Body

CampoTipoDescricao
pfx *stringArquivo PFX em base64
senha *stringSenha do certificado

Emitir NF-e

POST /nfe/emitir

Emite uma NF-e (modelo 55). Processamento assincrono: envia o lote e consulta o retorno.

Headers

HeaderValor
X-Empresa-Id *ID da empresa cadastrada

Body

CampoTipoDescricao
dest *objectDestinatario: { CNPJ ou CPF, xNome, endereco }
produtos *arrayLista de produtos (xProd, NCM, CFOP, qCom, vUnCom, impostos)
pagamento *arrayFormas de pagamento: [{ tPag, vPag }]
ideobjectSobreescrever campos de identificacao (serie, natOp, etc)
freteobjectDados de transporte/frete
infAdicobjectInformacoes adicionais { infCpl, infAdFisco }

Resposta (200 - Autorizado)

{
  "message": "NF-e authorized",
  "chaveAcesso": "35260212345678000195550010000000011234567890",
  "protocolo": {
    "nProt": "135260000001234",
    "dhRecbto": "2026-02-15T10:30:00-03:00",
    "cStat": "100",
    "xMotivo": "Autorizado o uso da NF-e"
  },
  "status": "authorized"
}

Resposta (202 - Processando)

{
  "message": "NF-e sent to SEFAZ, still processing",
  "chaveAcesso": "35260212345678000195550010000000011234567890",
  "nRec": "351000012345678",
  "status": "processing"
}

Consultar NF-e

GET /nfe/:chaveAcesso

Consulta os detalhes de uma NF-e pela chave de acesso (44 digitos).

Listar NF-e

GET /nfe?status=authorized&limit=50

Lista NF-e da empresa. Filtros: status, limit (max 200).

Emitir NFC-e

POST /nfce/emitir

Emite uma NFC-e (modelo 65). Processamento sincrono (PDV). Requer CSC configurado.

Mesmo body que /nfe/emitir. Destinatario opcional para NFC-e abaixo de R$ 200.

Configurar CSC (NFC-e)

PUT /nfce/config/:empresaId

Configura o Codigo de Seguranca do Contribuinte para NFC-e.

Body

CampoTipoDescricao
CSC *stringCodigo de Seguranca do Contribuinte
idCSC *stringIdentificador do CSC (1 ou 2)
serienumberSerie da NFC-e (default: 1)

Cancelamento

POST /eventos/cancelar

Cancela uma NF-e/NFC-e autorizada (ate 24h apos autorizacao).

Body

CampoTipoDescricao
chaveAcesso *stringChave de acesso (44 digitos)
justificativa *stringMotivo (minimo 15 caracteres)

Carta de correcao (CC-e)

POST /eventos/carta-correcao

Envia carta de correcao para uma NF-e. Maximo 20 por nota. Nao aplicavel a NFC-e.

Body

CampoTipoDescricao
chaveAcesso *stringChave de acesso (44 digitos)
correcao *stringTexto da correcao (minimo 15 caracteres)

Manifestacao do destinatario

POST /eventos/manifestacao

Registra manifestacao sobre uma NF-e recebida.

Body

CampoTipoDescricao
chaveAcesso *stringChave de acesso
tpEvento *string210200=Confirmacao, 210210=Ciencia, 210220=Desconhecimento, 210240=Nao realizada
justificativastringObrigatorio para 210240 (min 15 chars)

Inutilizacao de numeracao

POST /inutilizar

Inutiliza uma faixa de numeracao (numeros que foram pulados).

Body

CampoTipoDescricao
ano *numberAno (ex: 2026)
serie *numberSerie
nNFIni *numberNumero inicial
nNFFin *numberNumero final
justificativa *stringMotivo (min 15 chars)
modelonumber55 (default) ou 65

Download DANFE (PDF)

GET /danfe/:chaveAcesso

Retorna o PDF do DANFE (NF-e: A4, NFC-e: 80mm termico). Inline por padrao.

Para download: /danfe/:chaveAcesso/download

Download XML autorizado

GET /xml/:chaveAcesso

Retorna o XML autorizado (nfeProc) para download.

Webhooks

Registre URLs para receber callbacks em tempo real sobre eventos dos seus documentos.

POST /webhooks

Registra um webhook.

Body

CampoTipoDescricao
url *stringURL que recebera os callbacks (HTTPS recomendado)
eventsarrayEventos para ouvir (todos por padrao)
secretstringSecret para assinatura HMAC-SHA256

Eventos disponiveis

EventoDescricao
nfe.authorizedNF-e autorizada pela SEFAZ
nfe.rejectedNF-e rejeitada/denegada
nfce.authorizedNFC-e autorizada
nfce.rejectedNFC-e rejeitada
evento.cancelamentoCancelamento aprovado
evento.carta_correcaoCC-e aprovada

Payload do webhook

{
  "event": "nfe.authorized",
  "data": {
    "chaveAcesso": "35260212345678000195550010000000011234567890",
    "modelo": 55,
    "nProt": "135260000001234"
  },
  "timestamp": "2026-02-15T10:30:00.000Z"
}

Verificacao de assinatura

Se voce configurou um secret, cada callback inclui o header X-Axiom-Signature:

// Verificar a assinatura
const crypto = require('crypto');
const timestamp = req.headers['x-axiom-timestamp'];
const body = JSON.stringify(req.body);
const expected = crypto
  .createHmac('sha256', SEU_SECRET)
  .update(`${timestamp}.${body}`)
  .digest('hex');
const valid = req.headers['x-axiom-signature'] === `sha256=${expected}`;

Status da SEFAZ

GET /consulta/status

Verifica se a SEFAZ da UF da empresa esta online.