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.
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.Verificando o Status
Após o upload, consulte a empresa para conferir o certificado: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.