Esta é a versão completa (como funciona, como promover um emissor pra produção,
self-service). Pra ver só o que muda entre os dois ambientes numa tabela, veja
Homologação vs produção.
O endpoint da API é o mesmo para homologação e produção. A diferença está no campo
ambienteFiscal do emissor (Issuer), e a troca é self-service, via um endpoint
dedicado (PATCH /v1/companies/{id}/ambiente, ver seção “Promovendo um emissor para
produção” abaixo).Todo emissor nasce em homologação
Ao cadastrar uma empresa (POST /v1/companies), o ambienteFiscal do emissor nasce com
o valor 2 {/* fact:issuer.ambienteFiscalDefault */} (homologação) por padrão. O payload de
cadastro não tem um campo environment (nem ambienteFiscal) que você possa enviar:
Notas emitidas em homologação não têm validade fiscal e não precisam ser canceladas. Emita à vontade para testar.
CNPJ para Testes
Você pode usar seu próprio CNPJ em homologação. O SEFAZ de teste aceita qualquer CNPJ válido (com dígitos verificadores corretos). CNPJs de teste comuns:Esses CNPJs são fictícios com dígitos verificadores válidos, conferidos contra o
algoritmo oficial de cálculo de DV. Podem ser usados livremente em homologação.
Certificado para Homologação
Em homologação, você pode usar:- Seu certificado real (funciona normalmente)
- Certificado de testes (emitido por qualquer AC, mesmo que expirado)
POST /v1/companies/{id}/certificate, campo multipart file, ver
Certificados Digitais.
Promovendo um emissor para produção
TrocarambienteFiscal é self-service, via um endpoint dedicado, separado do
PATCH /v1/companies/{id} genérico (que recusa valor diferente com 422 AMBIENTE_IMUTAVEL,
ver aviso acima). Não existe aprovação do suporte no caminho: quem chama a rota com o
valor certo promove o emissor.
Resposta de sucesso (
200):
400, ex. { "ambienteFiscal": 3 }):
Testando Rejeições
Para testar o tratamento de erros no seu código, você pode provocar rejeições específicas (todas voltam como400 com error.erros[], nunca 422, ver Erros e
Rejeições):
Comparação: Sandbox vs Produção
O DANFE em homologação
GET /v1/nfe/pdf/{accessKey} e GET /v1/nfce/pdf/{accessKey} funcionam normalmente em
homologação: o documento é gerado a partir do XML autorizado pela SEFAZ de homologação,
e a própria SEFAZ manda imprimir a tarja NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL. Ambiente, CST/CSOSN e informações complementares saem do XML: o PDF é o
documento, não uma remontagem.
A resposta só é 409 (DANFE_INDISPONIVEL) quando não existe XML autorizado para
aquele documento neste ambiente:
Emissor de demonstração (criado pelos seeds de demo da plataforma, não por você):
o download de PDF funciona mesmo sem uma emissão real na SEFAZ de homologação. Você
recebe um DANFE de teste com os itens/CSOSN/informações complementares do SEU payload,
e o que é sintético vem declarado dentro do próprio documento: o protocolo
(
nProt) usa o prefixo DEMO (nunca um número puro: protocolo real da SEFAZ é só
dígitos, então não colide com nenhuma faixa real) e o infCpl/xMotivo dizem
literalmente “AMBIENTE DE DEMONSTRAÇÃO, documento sintético, sem validade fiscal”. O
409 não aparece nesse caso.Um emissor criado por
POST /v1/companies nasce sandbox: true e
ambienteFiscal: 2. Enquanto sandbox for true, a emissão usa o provedor mock
(protocolo DEMO…) mesmo com certificado A1 válido. Homologação real da SEFAZ exige
sandbox: false, promovido pelo SUPERADMIN em PATCH /v1/admin/companies/{id}/sandbox
depois do upload do certificado.Checklist: Estou pronto para produção?
1
Emissão testada
Sua integração emite NF-e com sucesso em homologação e recebe
status: "AUTHORIZED"?2
Erros tratados
Seu código trata
400 (rejeição SEFAZ, error.erros[]) e exibe mensagem amigável ao usuário?3
Webhooks configurados
Você tem um endpoint recebendo
invoice.authorized e invoice.rejected (PATCH /v1/webhooks/config)?4
Idempotência implementada
Seu código usa o header
Idempotency-Key na emissão e o id do evento no webhook para evitar duplicidade?5
Certificado de produção
Você tem um certificado e-CNPJ A1 válido e fez o upload (
POST /v1/companies/{id}/certificate)?6
Ambiente de produção liberado
Você chamou
PATCH /v1/companies/{id}/ambiente com { "ambienteFiscal": 1 } pra
promover o emissor (self-service, ver seção “Promovendo um emissor para produção”
acima) e gerou sua ek_live_?Veja também
- Webhooks: configure notificações em tempo real.
- Erros e respostas: tratamento completo dos códigos SEFAZ.