SuperSign - API Oficial
  1. Introdução
  • SuperSign API Pública
    • Introdução
      • Primeiro envelope em 5 minutos
      • Integrar com IA
      • Testar a API no Postman
      • Paginação e filtros
      • Catálogo de erros
      • Receitas em Node.js, PHP e Python
      • Changelog
      • Idempotência e erros
      • Estados do envelope
      • Webhooks
      • Limites de requisição
      • Criar um envelope a partir de um modelo
      • Gerar um cliente (SDK)
      • Evento ENVELOPE_SENT
      • Evento SIGNATORY_SIGNED
      • Evento ENVELOPE_COMPLETED
      • Evento ENVELOPE_VOIDED
      • Evento ENVELOPE_EXPIRED
      • Segurança e verificação
      • Entregas, retentativas e reenvio
      • Testar na Sandbox e automatizar
      • Introdução à documentação
      • Posicionar campos por texto âncora
      • Verificar um documento selado
      • Evento PARTICIPANT_DECLINED
      • Evento EMAIL_BOUNCED
    • Referência da API
      • Conta
        • Consultar a conta da integração
        • Consultar capacidades da integração
        • Consultar o catálogo de capacidades
        • Listar chamadas da própria chave
        • Consultar consumo do ciclo
        • Validar a chave de API
      • Envelopes
        • Excluir rascunho de envelope
        • Consultar histórico do envelope
        • Criar e enviar envelope numa chamada
        • Gerar URL de download do envelope em ZIP
        • Duplicar envelope
        • Consultar envelope
        • Criar rascunho de envelope
        • Mover envelope para outra pasta
        • Anular envelope
        • Listar envelopes
        • Atualizar configurações do envelope
        • Enviar envelope
      • Participantes
        • Listar participantes do envelope
        • Aprovar participante aprovador
        • Recusar como participante aprovador
        • Corrigir contato do participante
        • Sincronizar participantes
        • Enviar lembrete ao participante
      • Documentos
        • Listar documentos do envelope
        • Substituir campos do documento
        • Listar campos do documento
        • Confirmar o PDF convertido de um DOCX
        • Validar um documento selado
        • Reordenar documentos do envelope
        • Consultar o tamanho das páginas
        • Achar texto (âncora) no documento
        • Verificar um documento selado
        • Baixar o PDF de exemplo
        • Adicionar documento ao envelope
        • Gerar URL de download do documento
      • Contatos
        • Atualizar contato parcialmente
        • Listar envelopes do contato
        • Listar listas de contatos
        • Consultar lista de contatos
        • Criar contato
        • Listar contatos
        • Consultar contato
        • Atualizar contato
        • Excluir contato
      • Equipe
        • Listar grupos da conta
        • Listar membros da conta
      • Pastas
        • Listar conteúdo da pasta
        • Consultar acesso da pasta
        • Excluir pasta
        • Renomear pasta
        • Mover pasta
        • Listar todas as pastas
        • Criar pasta
      • Convites
        • Listar convites da conta
      • Webhooks
        • Excluir webhook
        • Listar entregas de um webhook
        • Detalhar uma entrega de webhook
        • Reenviar uma entrega de webhook
        • Girar o segredo de assinatura do webhook
        • Enviar um evento de teste para o webhook
        • Listar webhooks
        • Criar webhook
        • Atualizar webhook
      • Modelos
        • Listar modelos
        • Consultar modelo
        • Criar envelope a partir de modelo
        • Criar modelo em rascunho
        • Editar título e descrição do modelo
        • Consultar processamento do documento do modelo
        • Ativar modelo
        • Duplicar modelo
        • Enviar documentos do modelo
        • Definir vagas do modelo
        • Posicionar campos no documento do modelo
        • Apagar modelo em rascunho
        • Reordenar documentos do modelo
        • Remover documento do modelo
        • Definir cópias do modelo
        • Achar texto (âncora) no documento do modelo
      • Auditoria e relatórios
        • Listar envelopes anulados
        • Relatório de envelopes
        • Relatório de uso por grupo
      • Etiquetas
        • Aplicar etiqueta ao envelope
        • Remover etiqueta do envelope
        • Listar etiquetas da conta
  1. Introdução

Segurança e verificação

Como confirmar que uma entrega veio mesmo da SuperSign e não foi alterada, e como trocar o segredo. Visão geral em Webhooks.

Verificação da assinatura (HMAC)#

Quando o endpoint tem um segredo de assinatura habilitado, toda entrega leva o header:
X-SuperSign-Signature: t=1700000000,v1=<hex>
t é o horário do disparo em segundos (epoch).
v1 é HMAC-SHA256(segredo, "<t>.<corpo cru>") em hexadecimal.
A assinatura é calculada sobre o corpo exato recebido (os bytes do POST), não sobre um objeto reserializado - verifique sobre o raw body, antes de qualquer parse.
Passo a passo: (1) leia t e v1 do header; (2) rejeite se |agora − t| for maior que a sua tolerância (ex.: 5 min) - isso barra replay; (3) calcule o HMAC de "<t>.<raw body>" com o seu segredo e compare com v1 em tempo constante.
O segredo (whsec_...) aparece uma vez ao gerar/rotacionar na tela do Desenvolvedor, e pode ser revelado por quem administra a integração. Todo endpoint cadastrado hoje já nasce com segredo, devolvido uma única vez na resposta do cadastro. Um endpoint antigo, cadastrado antes de existir o segredo, chega sem o header; para passar a assinar, gire o segredo dele (veja Girar o segredo de assinatura).

Exemplo Node com corpo cru#

No exemplo Node, rawBody é o Buffer original, capturado antes do parser
JSON. Não o obtenha reserializando um objeto nem convertendo o Buffer para
string antes do HMAC. A verificação da assinatura não substitui a validação
do JSON e dos campos do evento.

Exemplo Python com corpo cru#

Confirmar recebimento somente após gravação durável#

Esqueleto, não servidor pronto. Capture o Buffer antes do parser e use o status
retornado. O adaptador exige inbox durável e worker de retomada conforme o
contrato abaixo; sem implementá-los, o stub lança erro e a resposta é 503.

Contrato local do adaptador de inbox#

O recibo { eventId, state: 'PENDING' | 'COMPLETED' } pertence ao adaptador do
seu receptor; não é campo novo do payload nem da API SuperSign. Seu formato não
prova que banco e worker existem. Só o retorne se cumprir este contrato:
Use evento.id como chave única. Grave o payload validado e a pendência
PENDING atomicamente, confirmando somente após commit. Não faça consultar
e depois inserir, nem grave no banco e publique em Redis como duas operações
independentes: a queda entre elas pode perder o acionamento do worker.
Uma duplicata preserva o registro e devolve seu estado. PENDING só pode ser
aceito se houver worker implementado que descubra e retome pendências após
falha/reinício. COMPLETED significa trabalho concluído com sucesso. Mesmo
ID com conteúdo divergente exige conferência, nunca sobrescrita silenciosa.
void ou { inserted: false } não comprovam esse contrato. Falha de gravação,
recibo inválido ou ausência da retomada exige erro, para o receptor devolver
503. Não declare concluído apenas para confirmar a duplicata.
O 200 confirma aceitação durável, não conclusão do negócio. Eventos ainda
desconhecidos podem ser registrados e confirmados sem executar ações inventadas.

Worker e retomada sem perder pendências#

Um padrão para efeitos inteiramente no mesmo PostgreSQL é usar uma inbox
PENDING e um worker recorrente. Este pseudocódigo é não executável:
BEGIN
Selecionar PENDING com SELECT FOR UPDATE SKIP LOCKED.
Aplicar efeitos de negócio no MESMO banco e na MESMA transação.
Marcar COMPLETED somente após sucesso desses efeitos.
COMMIT
O lock é o claim atômico. Não grave um estado de processamento em outra
transação sem mecanismo de recuperação: isso pode prender a linha após crash.
Falha antes do commit reverte efeitos e mantém PENDING; a próxima execução
retoma. O scanner precisa funcionar sem depender de uma notificação em memória
ou publicação perdida. Monitore pendências e falhas permanentes, sem descartá-las
ou afirmar que o exemplo demonstra um worker implantado.
Efeitos externos não pertencem a esse padrão transacional. Para email,
pagamento ou chamada de API, use outbox gravada no mesmo commit e idempotência
suportada pelo destino ou reconciliação explícita. ACK externo perdido é resultado
incerto, não autorização para repetir um efeito irreversível. Sem essa
implementação, mantenha o adaptador obrigatório e não prometa exactly-once nem
recuperação automática universal.
Ainda assim, para ação irreversível (liberar dinheiro, acesso, documento), confirme o envelope pela rota autenticada como reforço:
Valide também event, formato dos IDs e estado esperado. Não exija environment - ele só existe na Sandbox. Nunca confie apenas em campos de contato recebidos no payload.

Girar o segredo de assinatura#

{ "data": { "secret": "whsec_..." } }
Esta operação não é idempotente - ela não aceita nem guarda
Idempotency-Key. Cada chamada gera um segredo novo e invalida o
anterior na hora; chamar de novo não devolve o segredo antigo, nunca. Se você
não tiver certeza se a chamada anterior chegou a girar o segredo, chame de
novo: o resultado é sempre um segredo válido e atual. O segredo em texto puro
só aparece nesta resposta - guarde-o agora. A
rotação substitui o segredo na hora: não há período de convivência entre
o antigo e o novo. Da resposta em diante, toda tentativa de disparo - inclusive
as retentativas de entregas que já estavam em curso - sai assinada com o
segredo novo. Como o novo só existe depois da chamada, haverá uma janela entre
a rotação e a atualização do seu verificador em que as assinaturas não
conferem: as entregas continuam chegando normalmente, só a verificação falha.
Para não perder eventos nessa janela, faça seu endpoint responder 5xx quando
a assinatura não conferir (a entrega será retentada) ou reenvie depois as
entregas FAILED com a operação de reenvio (veja Entregas, retentativas e reenvio).
Não existe uma operação para revelar um segredo já existente na API
pública (ela existe na tela do Desenvolvedor, para quem administra a conta
pelo navegador). Perdeu o segredo? Rotacione: você recebe um novo na hora.

Privacidade e operação#

O payload pode conter nome, e-mail e telefone de signatários; proteja logs e filas.
Não registre sua API Key nem URLs temporárias de download.
Monitore falhas e latência do endpoint.
Responda 2xx a eventos desconhecidos depois de registrá-los: novos tipos de evento podem ser adicionados, e responder 5xx, 404 ou outro status retentável (veja Entregas, retentativas e reenvio) a um evento que você ainda não conhece faz a entrega ser retentada por até ~7 horas.
Mantenha o consumidor tolerante a novos campos.
Modificado em 2026-10-04 23:09:47
Página anterior
Evento ENVELOPE_EXPIRED
Próxima página
Entregas, retentativas e reenvio
Built with