Documentação / NFC-e v1
API REST fiscal

NFC-e modelo 65: configure o CSC, emita o cupom e acompanhe a autorização.

Referência prática das diferenças da NFC-e em relação à NF-e, usando o mesmo contrato assíncrono, certificado A1, idempotência e acompanhamento por status ou webhook.

Atualizado em .

Antes da primeira emissão

Empresa
Ativa, no mesmo ambiente da chave de API e com endereço fiscal completo.
Certificado
A1 válido e pertencente ao CNPJ emissor.
CSC
csc_id e csc_token cadastrados na empresa para formar o QR Code da NFC-e.
Ambiente
Comece com chave e empresa em homologacao; produção exige chave e empresa de produção.
CSC não vai no payload: ele pertence à configuração da empresa e nunca deve ser exposto no frontend, log ou corpo de uma venda.

IBS/CBS — Reforma Tributária

Quando a regra vigente exigir IBS/CBS, informe o grupo por item em items[].taxes.ibscbs. A API valida a estrutura e calcula os valores usando a base do item após desconto.

"ibscbs": {
  "cst": "000",
  "classification_code": "000001",
  "state_rate": 0.1,
  "municipal_rate": 0,
  "cbs_rate": 0.9
}

O escopo cobre a tributação regular (CST 000), a redução de alíquota (CST 200) e a imunidade / não incidência (CST 410), com 37 cClassTrib liberados em NFC-e pela tabela oficial do IT 2025.002 v1.60 — o par, a vigência, o tipo de alíquota e a permissão para o modelo são validados por ela. Um código aceito em NF-e pode ser vedado em NFC-e; a decisão é da tabela. Na redução, o percentual vem do cClassTrib e não do payload. Classificações que exigem grupos ainda não implementados são bloqueadas com a indicação de qual grupo falta. Confirme as alíquotas aplicáveis à operação com a regra fiscal vigente. A plataforma não aplica defaults tributários fictícios.

Guia prático da Reforma Tributária: Veja exemplos completos de payloads para NFC-e no varejo e resolução de rejeições no Guia Prático de IBS e CBS na API.

Exemplo completo

curl --request POST \
  --url https://fiscal.contora.com.br/api/v1/nfe/drafts \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --header 'Content-Type: application/json' \
  --header 'X-Company-Document: CNPJ_SEM_MASCARA' \
  --header 'Idempotency-Key: venda-1002-nfce' \
  --data '{
    "document_type": "nfce",
    "series": 1,
    "number": 1002,
    "payload": {
      "nature_operation": "Venda ao consumidor",
      "operation_type": "saida",
      "consumer_final": true,
      "presence_indicator": 1,
      "items": [{
        "code": "SKU-1",
        "name": "Produto de demonstração",
        "ncm": "22030000",
        "cfop": "5102",
        "unit": "UN",
        "quantity": 1,
        "unit_price": 10.00,
        "taxes": {
          "icms": {"code": "102", "origin": 0},
          "pis": {"code": "49", "aliquot": 0},
          "cofins": {"code": "49", "aliquot": 0}
        }
      }],
      "payments": [{"method": "01", "indicator": 0, "amount": 10.00}]
    }
  }'
Regime tributário: 102 é CSOSN e serve ao exemplo de Simples Nacional/MEI. Empresas de regime normal devem informar CST compatível, como 00, e a alíquota aplicável.

Destinatário e diferenças para NF-e

Destinatário
Pode ser omitido na NFC-e. Quando identificado, envie recipient com CPF/CNPJ e nome.
Cobrança
billing, fatura e duplicatas são exclusivos da NF-e modelo 55 e são rejeitados na NFC-e.
Pagamento
A soma de payments[].amount precisa ser ao menos igual ao total calculado do cupom.
Troco
Se a soma de payments for maior que o total, o excedente vira vTroco automaticamente — desde que coberto por pagamento(s) em dinheiro (method: "01"). Veja a seção de pagamento e troco na doc de NF-e.
DANFCE e QR Code
Produzidos a partir da configuração de CSC da empresa. Disponíveis tanto após a autorização quanto imediatamente na contingência off-line com QR Code v2.
Contingência Off-line
Disponível (tpEmis = 9). Assine localmente, imprima o DANFCE PDF no PDV na hora sem travar a venda e conte com sincronização automática em segundo plano a cada 2 minutos.
Responsável Técnico (infRespTec) automático: assim como na NF-e, o grupo infRespTec e o cálculo do hashCSRT são injetados automaticamente no XML a partir do cadastro global da conta. Veja Responsável técnico e CSRT e o Guia para SaaS Multi-CNPJ.

Contingência Off-line (tpEmis = 9) no PDV

Quando a SEFAZ estadual estiver indisponível ou houver oscilação de conectividade, a frente de caixa não pode parar. A API Fiscal Contora oferece suporte nativo e automatizado à emissão em contingência off-line para a NFC-e (modelo 65).

1. Criar o rascunho em contingência

Ao criar a NFC-e, inclua o bloco contingency com mode: 9 e uma justificativa explicativa em reason (mínimo de 15 caracteres):

curl --request POST \
  --url https://fiscal.contora.com.br/api/v1/nfe/drafts \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --header 'Content-Type: application/json' \
  --header 'X-Company-Document: CNPJ_SEM_MASCARA' \
  --data '{
    "document_type": "nfce",
    "series": 1,
    "number": 1003,
    "payload": {
      "model": 65,
      "nature_operation": "Venda ao consumidor",
      "contingency": {
        "mode": 9,
        "reason": "Indisponibilidade de comunicacao com a SEFAZ estadual"
      },
      "consumer_final": true,
      "presence_indicator": 1,
      "items": [{
        "code": "PROD-01",
        "name": "Item Varejo",
        "ncm": "21069090",
        "cfop": "5102",
        "unit": "UN",
        "quantity": 1,
        "unit_price": 20.00,
        "taxes": {
          "icms": {"code": "102", "origin": 0},
          "pis": {"code": "49", "aliquot": 0},
          "cofins": {"code": "49", "aliquot": 0}
        }
      }],
      "payments": [{"method": "01", "amount": 20.00}]
    }
  }'

2. Assinar localmente e gerar o DANFCE imediatamente

Chame o endpoint /build com {"sign": true}. A API assina o XML usando o certificado A1 da empresa, calcula a chave de acesso em contingência (com tpEmis = 9), gera o hash do QR Code offline com o CSC e disponibiliza o PDF do DANFCE:

curl --request POST \
  --url https://fiscal.contora.com.br/api/v1/nfe/drafts/{draft_id}/build \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{"sign": true}'

Baixe o PDF imediatamente pelo endpoint de artefatos para impressão no cupom fiscal:

curl --request GET \
  --url https://fiscal.contora.com.br/api/v1/nfe/drafts/{draft_id}/artifacts/pdf_danfe \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --output cupom-nfce.pdf
Sincronização Automática em Segundo Plano: Você não precisa manter filas manuais de retentativas no PDV. A API conta com um worker contínuo (fiscal:sync-contingency-nfce) executado a cada 2 minutos que monitora a normalização da SEFAZ estadual e submete automaticamente as NFC-e off-line emitidas nas últimas 24h, reutilizando estritamente o mesmo XML assinado originalmente e disparando o webhook document.authorized.

3. Transmissão manual sob demanda (opcional)

Se o PDV quiser forçar a autorização imediatamente assim que a conexão retornar:

curl --request POST \
  --url https://fiscal.contora.com.br/api/v1/nfe/drafts/{draft_id}/dispatch \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{"action": "authorize"}'
Regras Fiscais Importantes:
  • Prazo Legal de 24 Horas: Segundo a legislação do ENCAT/SEFAZ (Ajuste SINIEF), a NFC-e emitida em contingência off-line deve ser autorizada na SEFAZ em até 24 horas contadas da emissão.
  • Proibição de Reemissão com Nova Chave: Uma nota emitida em contingência off-line nunca deve ser cancelada ou reemitida em modo normal (tpEmis = 1) gerando nova chave, pois o consumidor já tem o cupom impresso com aquele QR Code específico. A transmissão posterior deve sempre enviar o mesmo XML assinado original.
Guia completo de contingência para PDVs: Para entender a fundo o cálculo do QR Code v2, arquitetura de filas e boas práticas operacionais, acesse o Guia de Contingência Offline para PDVs.

Build, autorização e artefatos

  1. Crie o rascunho com document_type=nfce.
  2. Opcionalmente use /build com {"sign": false} para validar o XML sem transmitir.
  3. Envie {"action": "authorize"} para /dispatch; o worker monta e assina automaticamente quando necessário.
  4. Acompanhe /status ou os webhooks até o estado final.
  5. Quando autorizada, baixe xml_authorized e pdf_danfe.