Developers / Certificados
Certificados

Upload POST

Envia o certificado digital A1 do contribuinte -- pré-requisito pra qualquer emissão (NF-e/CT-e/MDF-e/NFS-e assinam com ele).

POST https://areacliente.centralfiscal.com.br/v1/contribuintes/{contribuinte_id}/certificado-digital

Corpo da requisição

CampoTipoObrigatórioObservação
arquivo_base64stringSimArquivo PFX/P12 do certificado A1, codificado em Base64 (não é multipart).
senhastringSimSenha do certificado, em texto puro no corpo (sempre por HTTPS).
curl -X POST https://areacliente.centralfiscal.com.br/v1/contribuintes/{contribuinte_id}/certificado-digital \
  -H "Authorization: Bearer cf_live_51JqK..." \
  -H "Content-Type: application/json" \
  -d '{
    "arquivo_base64": "MIIKXQIBAzCCCh...",
    "senha": "sua-senha-do-certificado"
  }'

Validação, na própria chamada

Não existe um passo de validação separado -- ele acontece de forma síncrona dentro desta chamada: o arquivo é decodificado e aberto com a senha informada. Se algo estiver errado, você recebe 400 na hora, não um upload "aceito" que falha depois:

SituaçãoResposta
Senha errada ou arquivo não é um PFX/P12 válido400 -- "Certificado A1 ou senha invalidos."
Arquivo válido, mas sem nenhum certificado dentro400 -- "Certificado A1 nao encontrado no arquivo informado."
💡
Um certificado já vencido é aceito no upload -- a validade (valido_ate) é só armazenada pra exibição, não bloqueia o envio. A emissão em si é que vai falhar na SEFAZ se o certificado estiver expirado no momento de assinar.

Resposta

{
  "certificado_digital_id": "7b1e...",
  "tipo": "A1",
  "titular": "CN=CENTRAL FISCAL COMERCIO LTDA:12345678000190, ...",
  "numero_serie": "4F3A9C1B...",
  "valido_de": "2026-02-10T00:00:00-03:00",
  "valido_ate": "2027-02-10T00:00:00-03:00",
  "status": "ACTIVE"
}
A senha e o arquivo nunca voltam na resposta -- nem aqui, nem em nenhuma consulta posterior.