Primeiros Passos: Sua Primeira Assinatura via API em 5 Minutos

Você não precisa de um sprint inteiro para colocar a primeira assinatura digital no ar. Com a Assinatura Expressa da SignDocs, o caminho mais curto cabe em três movimentos: capturar um token OAuth2, fazer uma única chamada POST /v1/signing-sessions e compartilhar o link de checkout que volta na resposta. Em cinco minutos você tem um documento assinável de verdade rodando no ambiente de homologação.

Este guia é deliberadamente enxuto. O objetivo não é cobrir cada parâmetro da plataforma, e sim levar você do zero ao primeiro 200 OK o mais rápido possível, com um caminho claro para aprofundar depois. Se você ainda está avaliando a plataforma como um todo, vale começar pela visão geral da API de assinatura digital; se já decidiu integrar, siga por aqui.

Vamos usar curl nos exemplos porque ele deixa cada cabeçalho e campo explícito, sem mágica de SDK no meio. Tudo o que você vai ver funciona igual em qualquer linguagem que faça uma requisição HTTP.

O caminho mais curto: Assinatura Expressa

A SignDocs expõe duas superfícies de API. A API de Transações trabalha com envelopes, múltiplos signatários, ordem de assinatura e o ciclo de vida completo. Já a Assinatura Expressa (também chamada de Signing Sessions) é a rota direta: uma chamada para POST /v1/signing-sessions cria a sessão e devolve um link de checkout hospedado ou um widget incorporável.

Para os primeiros passos, a Assinatura Expressa vence em todos os critérios que importam quando você quer ver algo funcionando rápido:

Critério Assinatura Expressa API de Transações
Chamadas para o primeiro link Uma (POST /v1/signing-sessions) Várias (criar envelope, adicionar uma sessão por signatário)
Signatários Foco em um signatário por sessão Múltiplos, com ordem e papéis
Entrega ao signatário Link de checkout hospedado ou widget pronto na resposta Você orquestra convites e acompanhamento
Ideal para Onboarding, termos de aceite, contratos simples, quickstart Fluxos B2B complexos, vários assinantes no mesmo documento
Regra prática: comece pela Assinatura Expressa e migre para envelopes só quando precisar de múltiplos signatários ou de ordem de assinatura no mesmo documento. Os dois modelos convivem na mesma conta — você não precisa escolher de forma definitiva agora.

Antes de começar: o que você precisa

O checklist é curto. Em poucos minutos no painel você reúne tudo:

  1. Uma conta SignDocs. O cadastro é gratuito em app.signdocs.com.br. Para a API, o ambiente de homologação é gratuito; o acesso de produção é contratado como plano sob medida com o time comercial.
  2. Credenciais de API (client_id e client_secret). Geradas no painel, na área de desenvolvedores. O passo a passo detalhado está no guia como obter sua API key.
  3. O host de homologação. Use api-hml.signdocs.com.br (com hífen) para testar sem cobrança nem validade jurídica. Lembre que entidades de homologação expiram em 7 dias.
  4. Um terminal com curl (ou Postman/Insomnia, se preferir interface gráfica).

Só isso. Com as credenciais em mãos e o host certo, partimos para os três passos.

Passo 1 — Capture um token OAuth2 (≈1 min)

A SignDocs usa o fluxo OAuth2 client credentials: você troca seu client_id e client_secret por um bearer token de curta duração, que acompanha todas as chamadas seguintes no cabeçalho Authorization.

# Passo 1: trocar credenciais por um access token curl -X POST https://api-hml.signdocs.com.br/oauth2/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=SEU_CLIENT_ID" \ -d "client_secret=SEU_CLIENT_SECRET" \ -d "scope=transactions:write transactions:read"

A resposta traz o token e seu tempo de vida:

{ "access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "Bearer", "expires_in": 900 }

Guarde o valor de access_token. Ele é um JWT assinado com ECDSA (ES256), com as chaves protegidas em KMS no lado da SignDocs — você não precisa lidar com nada disso, apenas enviar o token. Repare em dois detalhes: o endpoint é /oauth2/token (com o "2") e o corpo vai em application/x-www-form-urlencoded, não em JSON. Para o quickstart, exporte o token em uma variável de ambiente:

export SD_TOKEN="eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9..."

Em produção, você vai querer cachear e renovar o token automaticamente antes de ele expirar. Esse detalhe e a rotação segura estão cobertos no guia de autenticação OAuth2 da API de assinatura. Por agora, um token válido por 15 minutos é mais que suficiente.

Passo 2 — A chamada única que cria a assinatura (≈2 min)

Este é o coração do quickstart. Uma chamada para POST /v1/signing-sessions recebe o documento e o signatário e devolve, na mesma resposta, o link que a pessoa vai abrir para assinar.

# Passo 2: criar a sessão de assinatura (a chamada única) curl -X POST https://api-hml.signdocs.com.br/v1/signing-sessions \ -H "Authorization: Bearer $SD_TOKEN" \ -H "Content-Type: application/json" \ -H "X-Idempotency-Key: quickstart-1" \ -d '{ "purpose": "DOCUMENT_SIGNATURE", "policy": { "profile": "CLICK_PLUS_OTP" }, "signer": { "name": "Maria Silva", "email": "maria@empresa.com.br", "userExternalId": "usr_12345", "cpf": "12345678901" }, "document": { "content": "JVBERi0xLjQKJ...", "filename": "Contrato_Exemplo.pdf" }, "returnUrl": "https://seu-app.com.br/assinatura-concluida" }'

Em poucos segundos, a resposta chega com a sessão criada e — o que mais importa agora — a URL de assinatura hospedada e o clientSecret:

{ "sessionId": "01JC8Z3M9QK4T2V7X1B5N6P8R0", "transactionId": "01JC8Z3M9QK4T2V7X1B5N6P8R1", "status": "ACTIVE", "url": "https://sign-hml.signdocs.com.br/s/01JC8Z3M9QK4T2V7X1B5N6P8R0", "clientSecret": "ss_secret_...", "expiresAt": "2026-06-27T18:00:00Z" }

O link que o signatário abre é a url com o segredo anexado como query string: url?cs=ss_secret_.... Em produção, o domínio muda para sign.signdocs.com.br.

É isso. Sem orquestração de envelope, sem várias chamadas. Vamos destrinchar os campos do corpo da requisição para você adaptar ao seu caso:

Campo O que faz
purpose A finalidade da operação. Para assinar um documento, DOCUMENT_SIGNATURE.
policy.profile O nível da assinatura. CLICK_ONLY ou CLICK_PLUS_OTP para começar; use DIGITAL_CERTIFICATE quando exigir certificado ICP-Brasil (A1). Perfis com biometria facial (BIOMETRIC, BIOMETRIC_PLUS_OTP) também estão disponíveis.
signer Nome, e-mail, CPF (ou CNPJ) e o userExternalId — o identificador do signatário no seu sistema. É a identidade que aparece na trilha de evidências.
document.content O PDF a ser assinado, codificado em Base64 (até 10 MB). Para um primeiro teste, qualquer PDF pequeno serve.
returnUrl Para onde o signatário é redirecionado após concluir a assinatura (opcional).
Atenção ao profile: DIGITAL_SIGN_A1 é um tipo de passo (step.type) que aparece na resposta, e não um valor válido de policy.profile. Para exigir certificado ICP-Brasil, o profile correto é DIGITAL_CERTIFICATE. Trocar os dois é o erro de iniciante mais comum — e a API responde 400 se você o cometer.

Passo 3 — Compartilhe o link e o signatário assina (≈2 min)

O campo checkout_url da resposta é o link de assinatura. Você pode entregá-lo de duas formas, e essa decisão define boa parte da sua experiência:

  • Você mesmo envia o link (por e-mail próprio, WhatsApp, no seu app). Tem controle total sobre o canal e a mensagem.
  • A SignDocs envia o convite por e-mail automaticamente, quando você fornece os dados do remetente. Nesse caso, o e-mail do convite só é disparado se o remetente for diferente do signatário.

Ao abrir o link, o signatário cai em uma página de checkout hospedado — uma tela pronta, responsiva e com a marca da SignDocs, onde ele revisa o documento, passa pelos passos de autenticação que você definiu (aceite, OTP etc.) e assina. Você não constrói nem mantém essa interface; ela já vem pronta, o que é justamente o que torna o quickstart tão rápido.

Se preferir manter a assinatura dentro da sua própria aplicação, em vez do checkout hospedado existe o modo de assinatura expressa incorporada, em que o widget roda embutido na sua tela. A mesma resposta atende os dois modos: para o hospedado você redireciona o signatário para a url; para o incorporado você monta o widget com o clientSecret usando o SDK JavaScript — o restante do fluxo permanece idêntico.

Depois da assinatura: webhook e download

Quando Maria conclui a assinatura, a API dispara para o endpoint que você registrou via POST /v1/webhooks um POST HTTPS assinado com HMAC-SHA256 (cabeçalho X-SignDocs-Signature). Os eventos principais para este fluxo são SIGNING_SESSION.COMPLETED (a sessão foi concluída) e TRANSACTION.COMPLETED (tudo finalizado, documento pronto).

# Registre o endpoint uma única vez (escopo webhooks:write) curl -X POST https://api-hml.signdocs.com.br/v1/webhooks \ -H "Authorization: Bearer $SD_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://seu-dominio.com.br/webhooks/signdocs", "events": ["SIGNING_SESSION.COMPLETED", "TRANSACTION.COMPLETED"] }' # Webhook recebido em seu endpoint: assinatura concluída { "id": "01JC8Z4A7WQ2M5T9X3B1N8P6R4", "eventType": "TRANSACTION.COMPLETED", "tenantId": "ten_a1b2c3", "transactionId": "01JC8Z3M9QK4T2V7X1B5N6P8R1", "timestamp": "2026-06-24T14:32:07Z", "data": { "status": "COMPLETED" } }

Ao receber esse evento, sua aplicação usa o transactionId para baixar o evidence pack via GET /v1/transactions/{transactionId}/evidence (escopo evidence:read) — a resposta traz os metadados e uma URL temporária do arquivo .p7m, que reúne a prova jurídica da assinatura — trilha de auditoria append-only, hash SHA-256 do documento, carimbo de hora do servidor e os dados de autenticação que garantem validade. O PDF assinado você baixa pelo endpoint de download do documento da transação. Não é obrigatório responder com nenhum dado especial ao webhook: basta retornar 200 OK rapidamente e processar de forma assíncrona. Os detalhes de segurança, idempotência e retry estão no guia de webhooks e eventos da API.

Quer só checar o status uma vez? Para o primeiro teste, em vez de configurar webhooks você pode consultar a sessão diretamente com GET /v1/signing-sessions/{sessionId} e ver o status mudar de ACTIVE para COMPLETED. Em produção, porém, os webhooks são o caminho recomendado por terem latência quase zero e não desperdiçarem chamadas.

Recapitulando: os 5 minutos, do zero ao assinado

Visto de cima, o fluxo completo é surpreendentemente curto. Estes são os marcos:

Etapa Ação Resultado
1. Token POST /oauth2/token com client_id + client_secret Bearer token válido por 15 minutos
2. Sessão POST /v1/signing-sessions com documento + signatário checkout_url de assinatura
3. Compartilhar Enviar o link (ou deixar a SignDocs enviar) Signatário abre o checkout hospedado
4. Assinar Signatário revisa, autentica e assina Documento assinado
5. Concluir Webhook TRANSACTION.COMPLETED dispara Download do PDF + evidence pack

Duas chamadas de API suas, um clique do signatário e um webhook. É todo o ciclo de uma assinatura eletrônica com validade jurídica no Brasil, ancorada na MP 2.200-2/2001 e construída com prioridade em LGPD.

Erros comuns no primeiro teste (e como resolver)

Se algo não voltar como esperado, quase sempre é um destes deslizes:

  • 401 Unauthorized: token expirado ou ausente. Gere um novo com o Passo 1 e confira o cabeçalho Authorization: Bearer ....
  • Host errado: homologação é api-hml.signdocs.com.br (com hífen), não api.hml.signdocs.com.br. Esse ponto pega muita gente.
  • 400 no profile: você passou DIGITAL_SIGN_A1 como policy.profile. Use DIGITAL_CERTIFICATE (ou CLICK_ONLY/CLICK_PLUS_OTP para o nível eletrônico).
  • Documento sumiu depois de uns dias: comportamento esperado em homologação — as entidades têm TTL de 7 dias. Recrie a sessão ou mova para produção.
  • Base64 inválido: verifique se o PDF foi codificado corretamente, sem quebras de linha indevidas no document.content.

Se quiser ver o documento finalizado de fora da sua integração, qualquer assinatura gerada pode ser conferida no verificador público — útil para mostrar a clientes e auditores que a prova é real e checável.

Próximos passos: do quickstart à produção

Funcionou? Ótimo. A partir daqui, cada guia aprofunda um pedaço do que você acabou de fazer:

  • Autenticação para produção: cache e rotação de tokens, escopos e boas práticas em OAuth2 na API de assinatura.
  • Entenda a prova jurídica: o que vai dentro do evidence pack .p7m e como verificá-lo de forma independente.
  • Checkout hospedado vs. incorporado: entenda quando usar cada entrega na página da Assinatura Expressa.
  • Gerar as credenciais: se ainda não fez, o passo a passo de como obter sua API key cobre cada clique no painel.
  • Múltiplos signatários: quando precisar de envelopes e ordem de assinatura, migre para a API de Transações partindo da documentação central da API.

Para acelerar ainda mais, lembre que há SDKs oficiais em TypeScript/Node, Python, Go, Java, PHP e C#/.NET — todos encapsulam autenticação, retries e tipagem dos payloads. O curl que usamos aqui é só para deixar tudo transparente no aprendizado; em produção, o SDK da sua linguagem reduz boilerplate.

Perguntas Frequentes

Realmente dá para fazer a primeira assinatura em 5 minutos?

Sim. O caminho mais curto usa a Assinatura Expressa: você captura um token OAuth2 com suas credenciais, faz uma única chamada POST /v1/signing-sessions com o documento e o e-mail do signatário, e recebe de volta um link de checkout hospedado. Esse link é o que o signatário abre para assinar. Os 5 minutos contam o tempo de gerar credenciais no painel, montar a chamada e disparar o primeiro curl no ambiente de homologação. A assinatura efetiva pelo signatário e o webhook de conclusão acontecem em seguida, no ritmo dele.

Qual a diferença entre a Assinatura Expressa e a API de Transações?

A Assinatura Expressa (Signing Sessions) é a rota rápida: uma única chamada POST /v1/signing-sessions gera um link de checkout hospedado ou um widget incorporável, ideal para um signatário e um documento. A API de Transações trabalha com envelopes, suporta múltiplos signatários no mesmo documento, ordem de assinatura (sequencial ou paralela) e o ciclo de vida completo. Para os primeiros passos e a maioria dos casos simples, comece pela Assinatura Expressa e migre para envelopes quando precisar de fluxos mais complexos.

Preciso de um certificado ICP-Brasil para fazer minha primeira assinatura via API?

Não para começar. Por padrão, a Assinatura Expressa coleta uma assinatura eletrônica com trilha de evidências (aceite, autenticação por OTP, IP, timestamp e geolocalização), o que já tem validade jurídica no Brasil pela MP 2.200-2/2001. O certificado digital ICP-Brasil entra quando você define o profile DIGITAL_CERTIFICATE na política de assinatura, exigindo um certificado ICP-Brasil A1 do signatário. Você pode evoluir do nível eletrônico para o qualificado sem trocar de API.

Onde testo sem gastar nem afetar produção?

No ambiente de homologação (sandbox), com host api-hml.signdocs.com.br. As credenciais de homologação são separadas das de produção, e as assinaturas geradas no sandbox não têm validade jurídica nem cobrança. Atenção: entidades criadas em homologação têm TTL de 7 dias, ou seja, expiram automaticamente após esse período. Quando o fluxo estiver validado, basta trocar o host e as credenciais para produção.

Como sei que o documento foi assinado depois de enviar o link?

Pela combinação de webhooks e download do documento finalizado. Você registra uma URL de webhook e a API envia um POST HTTPS, assinado com HMAC-SHA256, sempre que um evento ocorre, como SIGNING_SESSION.COMPLETED e TRANSACTION.COMPLETED. Ao receber o evento de conclusão, sua aplicação baixa o PDF assinado e o evidence pack. Como fallback, é possível consultar o status da sessão diretamente, mas em produção os webhooks são a forma recomendada por terem latência quase zero.

Em qual linguagem eu integro? Existe SDK oficial?

A API REST é agnóstica de linguagem, então qualquer stack que faça uma requisição HTTP serve, incluindo curl puro. Para acelerar, há SDKs oficiais em TypeScript/Node, Python, Go, Java, PHP e C#/.NET, que cuidam de autenticação OAuth2, retries e tipagem dos payloads. Não há SDK para Ruby; nesse caso, use chamadas REST diretas. Para os primeiros passos, recomendamos o curl, porque ele deixa explícito cada cabeçalho e campo do corpo da requisição.

O que faço depois de concluir esse quickstart?

Aprofunde nos guias específicos: configure a autenticação OAuth2 com rotação de tokens para produção, escolha entre checkout hospedado e widget incorporado conforme sua experiência, ajuste a política de assinatura para o nível de autenticação que seu caso exige e registre webhooks para automatizar os passos seguintes do fluxo. A partir daí, você pode adicionar múltiplos signatários e ordem de assinatura usando envelopes na API de Transações.

Sua primeira assinatura via API está a uma chamada de distância

Gere suas credenciais de homologação e dispare o primeiro POST /v1/signing-sessions ainda hoje — o sandbox é gratuito. A Assinatura Expressa da SignDocs entrega um link de checkout pronto, com validade jurídica e foco em LGPD, sem você construir nenhuma interface de assinatura. Quando estiver pronto para produção, o acesso à API é contratado como plano sob medida com o time comercial.

Comece grátis Fale com nossa equipe sobre a API