Skip to main content
Todo documento fiscal eletrônico precisa ser assinado digitalmente com um certificado e-CNPJ. A engineAPI cuida da assinatura automaticamente, você só precisa fazer o upload do arquivo.

Tipo A1

Arquivo .pfx ou .p12. Armazenado em software. Suportado pela engineAPI.

Tipo A3

Token físico ou smartcard. Não suportado. Use sempre A1.

Upload do Certificado

POST /v1/companies/{issuerId}/certificate: multipart/form-data, campo do arquivo é file (não certificate), autenticado por JWT do dashboard.
O upload:
1

Valida a senha

A senha do .pfx é validada antes de gravar. Senha errada retorna erro e nada é persistido.
2

Extrai a validade real

A data real de validade do certificado é extraída via OpenSSL (certExpiry).
3

Criptografa e substitui

A senha é criptografada em repouso (certPassword) e o .pfx anterior é removido do disco.
A senha do certificado é criptografada e nunca é retornada pela API após o upload. Você não consegue recuperá-la. Guarde em local seguro.

Verificando o Status

Após o upload, consulte a empresa para conferir o certificado:
O retorno é o registro do Issuer (com segredos removidos): não existe um objeto aninhado certificate nem um enum de status (VALID/EXPIRED/etc.). Os campos reais são:
O upload também extrai o CNPJ do titular do A1 (OID ICP-Brasil 2.16.76.1.3.3, com fallback no CN RAZAO:CNPJ). Esse metadado não volta na resposta pública. Use prontoPara.nfse para saber se o certificado serve para emitir. prontoPara.nfse distingue três recusas de certificado: Filial com e-CNPJ da matriz (mesma pessoa jurídica) não entra em certificadoOutroCnpj: a NFS-e Nacional assina por CNPJ raiz. Nos 30 dias anteriores ao vencimento, avisos[] traz CERTIFICADO_EXPIRANDO (expiresAt, daysUntilExpiry): é aviso, não reprova o cadastro. Se a validade do A1 não pôde ser lida, avisos[] traz CERTIFICADO_VALIDADE_DESCONHECIDA (também aviso; prontoPara.nfse segue true). Até o instante de expirar o emissor continua pronto; se o A1 vencer durante a ida à SEFIN, a recusa é do Fisco.
Não confie em um campo de status pronto: calcule os dias restantes a partir de certExpiry no seu lado, ou use os webhooks certificate.expiring (ver abaixo) que já fazem esse cálculo no servidor. Para o botão de emitir NFS-e, leia prontoPara.nfse: vencido e de outro CNPJ já vêm nomeados em faltando.

Onde Obter um Certificado

Para produção, você precisa de um e-CNPJ A1 emitido por uma Autoridade Certificadora (AC) credenciada pela ICP-Brasil:
Para homologação, você pode usar um certificado de testes emitido por qualquer AC. O SEFAZ de homologação aceita certificados expirados e de teste. Não precisa comprar um certificado só para testar.

Monitorando a Validade

A engineAPI roda uma verificação diária (08h, horário de Brasília) e dispara um único evento de webhook por limiar de dias restantes: Não existem eventos separados expiring_soon/expiring_critical/expired, é sempre o mesmo certificate.expiring, com daysUntilExpiry e severity indicando a urgência. Configure seus webhooks em Dashboard → Configurações → Webhooks (ver guia de webhooks).

Renovando o Certificado

Quando você receber um novo certificado A1 (renovação ou substituição), simplesmente refaça o upload:
O certificado anterior é substituído automaticamente (o arquivo antigo é removido do disco). Nenhuma emissão em andamento é afetada.

Veja também

  • Primeira emissão: com o certificado pronto, emita sua primeira nota.
  • Webhooks: configure alertas de validade do certificado.