Referência da API

    Endpoints, campos obrigatórios e códigos de erro. Base: https://notahub.api.br/api/v1

    Como chamar

    É HTTP e JSON, sem SDK obrigatório. Toda rota exige a API Key e todas respondem no mesmo envelope.

    envelope de resposta
    // sucesso
    { "success": true, "data": { … } }
    
    // erro
    { "success": false, "error": { "code": "…", "message": "…", "details": … } }

    Autenticação por Authorization: Bearer <chave> ou X-API-Key: <chave>. A chave identifica o emitente, por isso nenhuma rota recebe CNPJ do emitente.

    Endpoints

    Emissão

    Consomem cota de notas do plano.

    MétodoCaminhoDescrição
    POST
    /nfe/emitirEmite NF-e (modelo 55).
    POST
    /nfce/emitirEmite NFC-e (modelo 65).

    Eventos

    MétodoCaminhoDescrição
    POST
    /cancelarCancela uma nota autorizada.
    POST
    /carta-correcaoCorrige dados que não alteram valores nem destinatário.
    POST
    /inutilizarInutiliza uma faixa de numeração não usada.

    Consultas

    Não consomem cota de notas.

    MétodoCaminhoDescrição
    GET
    /consultar/{chave}Situação atual da nota na SEFAZ.
    GET
    /statusDisponibilidade do serviço da SEFAZ.
    GET
    /cotasUso e limite do plano no mês.

    Arquivos

    MétodoCaminhoDescrição
    POST
    /nota/{chave}/xmlXML autorizado da nota.
    POST
    /nota/{chave}/pdfDANFE em PDF.
    POST
    /nota/{chave}/evento/{tipo}/xmlXML do evento (cancelamento, carta de correção).
    POST
    /nota/{chave}/evento/{tipo}/pdfPDF do evento.

    Notas recebidas

    Notas que terceiros emitiram contra o seu CNPJ.

    MétodoCaminhoDescrição
    GET
    /recebidasLista as notas capturadas.
    POST
    /recebidas/sincronizarBusca novidades na SEFAZ agora.
    POST
    /recebidas/{chave}/manifestarManifestação do destinatário.
    GET
    /recebidas/{chave}/xmlXML da nota recebida.

    Contingência

    MétodoCaminhoDescrição
    GET
    /contingenciaSituação atual e tamanho da fila.
    GET
    /contingencia/pendentesNotas aguardando transmissão.
    POST
    /contingencia/ativarEntra em contingência.
    POST
    /contingencia/desativarVolta à emissão normal.

    Consultas auxiliares

    Têm cota própria, separada da de notas.

    MétodoCaminhoDescrição
    GET
    /cnpj/{cnpj}Dados cadastrais na Receita Federal.
    GET
    /cep/{cep}Endereço a partir do CEP.
    GET
    /consultas/usoUso de consultas no mês.

    POST /nfe/emitir

    destinatario e itens são obrigatórios. O restante tem padrão.

    Destinatário

    nome, logradouro, numero, bairro, cidade, uf e cep são obrigatórios, mais cnpj ou cpf. Se você não mandar cod_municipio, ele é herdado do município do emitente.

    Itens

    CampoObrigatórioObservação
    descricaosimDescrição do produto, como sai na DANFE.
    quantidadesimNumérico. Aceita fração conforme a unidade.
    valor_unitariosimNumérico, em reais.
    ncmsim8 dígitos. Errar aqui é a rejeição mais comum.
    cfopnãoPadrão 5102 (venda dentro do estado).
    codigonãoSeu código interno do produto.
    unidadenãoUN, KG, CX… Padrão UN.
    eannãoCódigo de barras, se houver.
    csosnnãoSimples Nacional. Padrão 102.
    descontonãoValor absoluto do desconto no item.
    ibs_cbsnãoGrupos da reforma tributária (NT 2025.002).

    POST /nfce/emitir

    Venda ao consumidor final. O destinatário é opcional (nota sem identificação); em compensação pagamentos importa, porque a NFC-e exige a forma de pagamento. Requer CSC configurado.

    corpo
    {
      "itens": [
        { "descricao": "Café 500g", "quantidade": 1, "valor_unitario": 32.90, "ncm": "09012100" }
      ],
      "pagamentos": [
        { "forma": "17", "valor": 32.90 }
      ],
      "consumidor": { "cpf": "123.456.789-00" }
    }

    Formas: 01 dinheiro, 03 cartão de crédito, 04 cartão de débito, 17 PIX.

    Erros

    HTTPQuando acontece
    401API Key ausente, inválida ou desativada.
    403Empresa bloqueada, pendente de ativação, ou cota de notas do mês esgotada.
    400Payload inválido, ou a SEFAZ rejeitou a nota. A mensagem traz o motivo.
    404Nota não encontrada, ou não pertence à empresa da sua API Key.
    500Falha interna. Consulte a nota pela chave antes de tentar de novo.

    Rejeição da SEFAZ chega como 400 com o texto original dela em error.message — inclusive o número da rejeição, que é o que você pesquisa para entender a causa.

    Webhooks

    Em vez de consultar a nota em laço, cadastre uma URL no portal e receba a mudança de status. Cada entrega leva uma assinatura HMAC-SHA256 do corpo, com o segredo que aparece só na criação do endpoint.

    headers da entrega
    X-NotaHub-Evento: nota_autorizada
    X-NotaHub-Entrega: 4821
    X-NotaHub-Tentativa: 1
    X-NotaHub-Assinatura: sha256=a3f1…

    Confira a assinatura antes de confiar no corpo. Reentrega com espera crescente de 1 minuto a 6 horas; depois de 20 falhas seguidas o endpoint é desativado.