Skip to main content
A engineAPI se conecta diretamente ao ambiente de homologação da SEFAZ (o mesmo servidor da Fazenda, mas sem validade fiscal). Você testa com a infraestrutura real sem nenhum risco.
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:
ambienteFiscal e sandbox não mudam pelo PATCH /v1/companies/{id} genérico. Enviar um valor diferente do atual recusa com 422 AMBIENTE_IMUTAVEL (nada é escrito). Reenviar o valor atual (o roundtrip do GET) continua 200 e é ignorado.A troca de ambienteFiscal (homologação 2 / produção 1) é self-service no endpoint dedicado PATCH /v1/companies/{id}/ambiente. Ver seção “Promovendo um emissor para produção” abaixo. Promover sandbox a SEFAZ real (false) é ato do SUPERADMIN em PATCH /v1/admin/companies/{id}/sandbox.
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.
CNPJ com dígito verificador inconsistente com os 12 primeiros dígitos é rejeitado pela SEFAZ de homologação com cStat 208 (“CNPJ do emitente inválido”). Use sempre os CNPJs acima ou gere um novo com DV calculado corretamente antes de testar.

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)
O SEFAZ de homologação aceita certificados com qualquer validade. O upload segue o mesmo contrato de produção: POST /v1/companies/{id}/certificate, campo multipart file, ver Certificados Digitais.

Promovendo um emissor para produção

Trocar ambienteFiscal é 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):
Corpo inválido (400, ex. { "ambienteFiscal": 3 }):
Depois de promover pra produção, sua ek_test_ para de operar esse emissor. ek_test_ só opera emissor com ambienteFiscal: 2 (homologação). Tentar emitir com ek_test_ contra um emissor que você acabou de promover devolve 403 com "Chave de teste não opera emissor de produção. Gere sua ek_live_ no portal." Gere a ek_live_ (exige plano ativo, ver Autenticação) antes ou logo depois de promover o emissor.

Testando Rejeições

Para testar o tratamento de erros no seu código, você pode provocar rejeições específicas (todas voltam como 400 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