Assinatura com Certificado ICP-Brasil via API: A1 na Sessão Direta, A3 pela Expressa e pelo App

Quando o documento precisa de assinatura qualificada, a pergunta que chega ao time de integração é sempre a mesma: "dá para assinar com certificado ICP-Brasil pela API?". A resposta curta é sim, mas o caminho muda conforme o tipo de certificado do signatário. O A1 (arquivo instalado no computador ou no celular) é assinado diretamente na sessão criada pela API, na própria página hospedada, sem que a chave privada saia do dispositivo do titular. O A3 (token USB ou cartão inteligente) é assinado pela Assinatura Expressa ou pelo app da SignDocs, por meio do SignDocsBrasil Assinador, o aplicativo gratuito de desktop que faz a ponte entre o token e a página de assinatura.

Este guia mostra os dois caminhos de ponta a ponta: o perfil DIGITAL_CERTIFICATE e suas etapas, o que acontece no navegador do signatário quando ele usa um A1, como o Assinador entra em cena para o A3, os erros de certificado que você vai encontrar e o que fica registrado como evidência. No fim há uma regra prática para decidir, caso a caso, entre a sessão direta e a Expressa.

Se você ainda está avaliando se o documento precisa mesmo de certificado, o guia de autenticação multimétodo compara todos os perfis; o de API brasileira com ICP-Brasil explica o contexto legal. Aqui o foco é a mecânica.

Quando exigir certificado ICP-Brasil

A assinatura com certificado ICP-Brasil é a assinatura qualificada da Lei 14.063/2020: a que carrega a presunção de veracidade do art. 10, §1º, da MP 2.200-2/2001 em relação ao signatário. Na prática, o integrador exige certificado em três situações:

  • Quando a norma ou o edital pede assinatura qualificada. Alguns atos perante órgãos públicos e alguns contratos regulados exigem ICP-Brasil expressamente. Nesses casos não há escolha: o perfil é DIGITAL_CERTIFICATE.
  • Quando a contraparte já opera com certificado. Escritórios de contabilidade, advocacia, empresas que assinam notas fiscais e procurações eletrônicas costumam ter e-CNPJ ou e-CPF à mão; para elas, o certificado é o caminho de menor atrito.
  • Quando o valor em jogo justifica a presunção máxima. Para a maioria dos contratos, a assinatura avançada com OTP ou biometria é suficiente e converte melhor. O certificado entra onde a disputa sobre autoria seria cara.

Regra de bolso: certificado para quem já tem certificado ou para quem a lei obriga. Para o público geral, o perfil qualificado derruba a conversão, porque a maioria dos brasileiros não possui certificado digital. Combine perfis por signatário: o representante da empresa assina com e-CNPJ, o cliente pessoa física assina com biometria ou OTP, tudo no mesmo envelope.

O perfil DIGITAL_CERTIFICATE: criação e etapas

A sessão é criada como qualquer outra, trocando apenas o perfil de política. Não há campo para enviar o certificado do signatário, e isso é proposital: o integrador nunca manuseia chave nem arquivo do titular.

// POST https://api-hml.signdocs.com.br/v1/signing-sessions // Authorization: Bearer <access_token> (OAuth2 client_credentials, 900 s) // X-Idempotency-Key: contrato-2026-000481-representante { "purpose": "DOCUMENT_SIGNATURE", "policy": { "profile": "DIGITAL_CERTIFICATE" }, "signer": { "name": "Maria Souza", "email": "maria@empresa.com.br", "cpf": "12345678901" }, "document": { "content": "JVBERi0xLjcK...", // base64, até 10 MB "filename": "contrato-000481.pdf" }, "returnUrl": "https://seusistema.com.br/contratos/000481/retorno" } // 201 { "sessionId": "ss_...", "transactionId": "tx_...", "status": "ACTIVE", "url": "https://sign-hml.signdocs.com.br/s/...", "clientSecret": "ss_secret_...", "expiresAt": "2026-09-02T14:00:00Z" } // link para o signatário = url + "?cs=" + clientSecret

Internamente, o perfil vira uma sequência fixa de duas etapas, executadas nessa ordem na página hospedada:

Etapa O que o signatário faz O que fica registrado
CLICK_ACCEPT Confirma a identidade declarada, lê o documento e aceita os termos de uso e a política de privacidade. Data e hora (UTC), IP, geolocalização, user-agent, aceite dos termos.
DIGITAL_SIGN_A1 Seleciona o certificado A1, informa a senha do arquivo e assina. Cadeia de certificados apresentada, resultado da assinatura, algoritmo, hash do documento, geolocalização e dispositivo.

Dois detalhes que evitam chamados de suporte: DIGITAL_SIGN_A1 é o nome da etapa, não do perfil. Enviar "profile": "DIGITAL_SIGN_A1" devolve 400. E o nome da etapa não limita o tipo de certificado que a plataforma como um todo aceita: ele descreve o que a sessão direta da API executa, que é o A1. O A3 tem outro caminho, descrito adiante.

O que acontece na página hospedada com um A1

O ponto central do desenho é que a chave privada nunca sai do dispositivo do signatário. O servidor da SignDocs prepara o que precisa ser assinado, o navegador assina, o servidor monta a assinatura final. Passo a passo:

  1. Seleção do certificado. O signatário escolhe o arquivo A1 (.pfx/.p12) e informa a senha. O arquivo é aberto localmente, no navegador.
  2. Preparação. A página envia ao servidor apenas a cadeia de certificados (a parte pública, em PEM). O servidor valida a cadeia, calcula o resumo criptográfico do documento com SHA-256 e devolve o material a assinar (hashToSign/dataToSign) junto de um identificador da requisição de assinatura (signatureRequestId) e dos algoritmos usados.
  3. Assinatura local. A chave privada, ainda no navegador, assina esse resumo. O que volta para o servidor é a assinatura bruta em base64 (rawSignatureBase64), nunca a chave, nunca a senha.
  4. Montagem. O servidor combina a assinatura bruta com a cadeia e o documento, monta a estrutura CMS/PAdES e grava o resultado da etapa com geolocalização e informações do dispositivo. A sessão conclui, o webhook SIGNING_SESSION.COMPLETED dispara e o documento assinado fica disponível para download.

Para o integrador, isso significa: você não precisa de nenhum SDK criptográfico, não armazena certificado de ninguém e não tem chave privada de terceiro no seu perímetro. Sua parte termina em criar a sessão e tratar o webhook. Os formatos de assinatura produzidos estão descritos em PKCS#7, CMS, PAdES e CAdES.

Quer ver o formato do arquivo final antes de integrar? A página de assinar PDF com e-CPF ou e-CNPJ mostra o resultado do ponto de vista de quem assina.

Erros de certificado: o que a página recusa

A validação acontece na etapa de preparação, antes de qualquer assinatura. A página recusa cadeia inválida ou vencida e explica ao signatário o que fazer. Os casos mais comuns:

Situação O que acontece O que orientar
Certificado vencido A validação da cadeia recusa; a etapa não avança. Renovar o certificado na Autoridade Certificadora. A sessão continua ACTIVE até expirar, então o mesmo link serve depois da renovação.
Senha do arquivo incorreta O arquivo não abre no navegador; nada é enviado ao servidor. Conferir a senha definida na emissão. A SignDocs não tem como recuperá-la.
Cadeia incompleta ou não ICP-Brasil A validação recusa a cadeia. Usar certificado emitido por AC credenciada na ICP-Brasil; certificados autoassinados ou de outras hierarquias não servem.
Titular do certificado diferente do signatário O certificado carrega CPF ou CNPJ do titular; em produção, esse CPF/CNPJ é cruzado com o do signatário declarado na sessão e a divergência é recusada (422); em homologação a divergência gera apenas aviso. Criar a sessão com o CPF (ou CNPJ) de quem realmente vai assinar.
Token A3 conectado, mas sessão direta da API A sessão direta executa a etapa A1; o token não é lido nesse fluxo. Encaminhar o signatário pela Assinatura Expressa ou pelo app, com o Assinador instalado (próxima seção).

Do lado da API, esses casos não geram erro na criação da sessão: a sessão nasce ACTIVE e a recusa acontece na interação do signatário. Monitore pelos eventos STEP.FAILED e pelo status da transação, como descrito em webhooks e eventos.

A3: token e cartão pelo SignDocsBrasil Assinador

O certificado A3 vive dentro de um dispositivo criptográfico (token USB ou cartão inteligente) e, por definição, a chave privada não pode ser exportada. Um navegador não conversa com esse dispositivo sozinho. Por isso a SignDocs mantém o SignDocsBrasil Assinador: um aplicativo gratuito para Windows, macOS e Linux que fala PKCS#11 com o token e faz a ponte, localmente, com a página de assinatura.

Como a ponte funciona:

  1. O signatário instala o Assinador e o driver (middleware) do fabricante do token, como SafeSign, SafeNet ou OpenSC. A tabela de compatibilidade lista os modelos testados.
  2. Ao abrir a página de assinatura da Assinatura Expressa em um navegador baseado em Chromium (Chrome, Edge, Brave), a página se comunica com o Assinador que está rodando no próprio computador, por HTTPS na porta 8757 (ou HTTP na porta 8756).
  3. O Assinador lê os certificados disponíveis no token, o signatário escolhe o dele e digita o PIN. A assinatura é calculada dentro do dispositivo; o Assinador devolve apenas a assinatura à página.
  4. A plataforma monta o CMS/PAdES, registra as mesmas evidências (data e hora, IP, geolocalização, dispositivo, cadeia) e conclui a assinatura.

O app da SignDocs (Android e iOS) usa a mesma conexão com o Assinador para assinar com A3: o documento é aberto no app, e a assinatura acontece no computador onde o token está conectado. O que não existe é leitura de token diretamente pelo celular.

Onde o A3 entra e onde não entra: A1 é assinado diretamente na sessão criada pela API. A3 é assinado pela Assinatura Expressa ou pelo app, por meio do SignDocsBrasil Assinador. A sessão direta da API (DIGITAL_CERTIFICATE em /v1/signing-sessions) executa apenas a etapa A1. Detalhes de instalação e requisitos estão em assinatura com token A3 e na Central A3.

A1, A3 e certificado em nuvem: comparação para o integrador

Critério A1 (arquivo) A3 (token/cartão) Certificado em nuvem
Onde está a chave No computador ou celular do titular Dentro do dispositivo criptográfico Em HSM do provedor do certificado
Validade típica 1 ano Até 3 anos, conforme a AC Conforme o provedor
Valor jurídico Qualificada (ICP-Brasil) Qualificada (ICP-Brasil) Qualificada quando emitido por AC ICP-Brasil
Na sessão direta da API Sim: etapa DIGITAL_SIGN_A1 na página hospedada Não; usar Expressa ou app com o Assinador Depende da interface PKCS#11 do provedor; valide com o suporte antes de prometer ao cliente
Na Assinatura Expressa e no app Sim Sim, via SignDocsBrasil Assinador Valide com o suporte
O que o integrador precisa fazer Nada além de criar a sessão Orientar a instalação do Assinador e do driver do token Confirmar o provedor com o suporte
Sistemas Qualquer navegador moderno Windows, macOS, Linux com navegador Chromium Conforme o provedor

Sobre o certificado em nuvem (BirdID, VIDaaS, SafeID, NeoID e similares): o suporte depende de o provedor expor uma interface compatível com o Assinador. Não trate como garantido; peça a confirmação ao suporte da SignDocs para o provedor específico do seu cliente antes de desenhar o fluxo.

Sessão direta ou Assinatura Expressa: como decidir

A decisão é por signatário, não por projeto. Um mesmo contrato pode ter o representante da empresa assinando com e-CNPJ A3 pela Expressa e o cliente assinando com biometria pela sessão direta.

Se o signatário... Use Por quê
Tem A1 (e-CPF ou e-CNPJ em arquivo) Sessão direta com DIGITAL_CERTIFICATE Integração completa por API: criação, link, webhook, download. Nenhum software adicional.
Tem A3 (token ou cartão) Assinatura Expressa (ou app) com o Assinador É o único caminho que lê o dispositivo. Você acompanha pela plataforma e recebe o documento assinado com as mesmas evidências.
Não sabe se tem certificado Perfil avançado (OTP ou biometria) Exigir certificado de quem não tem é a forma mais rápida de perder a assinatura. Reserve o qualificado para quem precisa.
É obrigado por norma a assinar com ICP-Brasil e só tem A3 Expressa com o Assinador, com orientação de instalação enviada junto do convite Reduz o abandono: a maior causa de falha no A3 é o driver do token ausente, não a plataforma.

Para testar o fluxo A1 sem custo, use o ambiente de homologação: crie a sessão com DIGITAL_CERTIFICATE, abra o link e assine com um certificado A1 de teste ou com o seu próprio. O documento e as evidências ficam disponíveis por sete dias. O fluxo A3 é testado na Assinatura Expressa com o Assinador instalado.

O que fica registrado como evidência

Assinatura qualificada não dispensa a trilha de auditoria; ela a complementa. Para cada assinatura com certificado, a transação registra:

  • A cadeia de certificados apresentada pelo signatário, com titular, AC emissora e validade, junto do resultado da validação.
  • O hash SHA-256 do documento no momento da assinatura e a assinatura criptográfica montada em CMS/PAdES, verificável em qualquer leitor compatível e no verificador público.
  • As evidências de contexto: data e hora em UTC, IP, geolocalização, user-agent e informações do dispositivo, tanto no aceite quanto na assinatura.
  • O aceite dos termos feito na etapa CLICK_ACCEPT.

Tudo isso compõe o pacote de evidências (.p7m) da transação, baixável pela API depois da conclusão. Em caso de contestação, você apresenta o documento assinado com o certificado e, além dele, a prova de como e quando a assinatura aconteceu.

Limite honesto: a plataforma não aplica carimbo do tempo de Autoridade de Carimbo do Tempo. A referência temporal é a data e hora registradas na trilha de auditoria, não um carimbo qualificado ICP-Brasil. Se a sua área jurídica exigir carimbo do tempo, trate isso como requisito à parte.

Perguntas Frequentes

Dá para assinar com certificado ICP-Brasil pela API SignDocs?

Sim. Crie a sessão com policy.profile DIGITAL_CERTIFICATE. O signatário abre o link, aceita os termos e assina com o certificado A1 dele na própria página hospedada; a chave privada nunca sai do dispositivo e o integrador não manuseia certificado algum. Para A3 (token USB ou cartão), a assinatura é feita pela Assinatura Expressa ou pelo app da SignDocs, por meio do SignDocsBrasil Assinador, o aplicativo gratuito de desktop que faz a ponte entre o token e a página de assinatura.

A sessão criada pela API aceita token A3?

A sessão direta da API executa a etapa DIGITAL_SIGN_A1, que assina com certificado A1 no navegador. Um token A3 não é lido nesse fluxo. Para signatários com A3, use a Assinatura Expressa ou o app, com o SignDocsBrasil Assinador instalado no computador onde o token está conectado. O resultado é o mesmo documento assinado em CMS/PAdES, com as mesmas evidências de data e hora, IP, geolocalização e dispositivo.

O que a SignDocs recebe do certificado do signatário?

Apenas a parte pública: a cadeia de certificados em PEM, usada para validar a emissão ICP-Brasil, a validade e o titular. O servidor devolve o resumo criptográfico a assinar, o navegador do signatário assina esse resumo com a chave privada e devolve só a assinatura bruta em base64. Nem a chave nem a senha do arquivo trafegam. Esse desenho vale para o A1 na página hospedada; no A3, a assinatura é calculada dentro do token e o Assinador devolve só a assinatura.

Por que DIGITAL_SIGN_A1 não é aceito como perfil?

Porque DIGITAL_SIGN_A1 é o nome de uma etapa, não de um perfil de política. O perfil é DIGITAL_CERTIFICATE, que a plataforma converte na sequência CLICK_ACCEPT seguida de DIGITAL_SIGN_A1. Enviar DIGITAL_SIGN_A1 em policy.profile devolve 400. O nome da etapa descreve o que a sessão direta executa, o A1; não significa que a plataforma não suporte A3, que tem seu próprio caminho pela Assinatura Expressa e pelo app.

O que acontece se o certificado estiver vencido ou fora da cadeia ICP-Brasil?

A validação da cadeia recusa o certificado na etapa de preparação, antes de qualquer assinatura, e a página orienta o signatário. A criação da sessão pela API não falha por isso: a sessão nasce ACTIVE e a recusa aparece na interação do signatário. Depois de renovar o certificado, o mesmo link continua válido até o prazo da sessão. Acompanhe pelos eventos STEP.FAILED e pelo status da transação.

Posso misturar certificado e biometria no mesmo envelope?

Sim. O perfil é definido por signatário ao criar cada sessão do envelope. É comum o representante da empresa assinar com e-CNPJ (A1 pela sessão direta ou A3 pela Expressa) enquanto o cliente pessoa física assina com biometria ou OTP. Todos os signatários assinam o mesmo documento e a trilha de auditoria registra o método de cada um, o que evita exigir certificado de quem não tem e derrubar a conversão.

Teste o perfil DIGITAL_CERTIFICATE no sandbox

Crie credenciais de homologação, envie uma sessão com certificado e assine com o seu A1 hoje. Para volumes de produção e signatários com A3, o time comercial dimensiona um plano sob medida.

Criar credenciais de homologação Fale com o time comercial