Assinatura eletrônica
O móduloesignature transforma a verificação aprovada em assinatura eletrônica avançada do documento que você indicar. Você cria a sessão com o hash SHA-256 do documento; o titular passa pela verificação de identidade completa (documento, face match e prova de vida, que o flow exige junto); e, se a verificação aprovar, a plataforma emite o dossiê de assinatura: um manifesto que amarra o hash do documento à verificação aprovada e ao instante, assinado com a chave Ed25519 da plataforma. O documento em si nunca é enviado: você continua guardando os bytes, e o hash não revela o conteúdo.
esignature em POST /v1/verification-links, e o hash fica fixo no link desde a emissão. No painel, uma planilha com reference_id e document_sha256 por linha gera um link por linha; o arquivo com os links sai uma única vez. Quem avisa o signatário é você. Para acompanhar cada etapa, o webhook do flow recebe verification_link.claimed quando o signatário abre o link e começa a verificação (um aviso por link, com link_id, session_id e o seu reference_id), e verification.completed com o dossiê quando ele assina.
public_key, com o key_id) só vale se for igual a uma chave da lista, já em vigor no instante signed_at. A assinatura cobre exatamente os bytes UTF-8 de manifest_json (use a string literal recebida, nunca uma re-serialização sua: outra ordem de campos muda os bytes). Depois, o document_sha256 do manifesto tem de ser o SHA-256 do seu contrato: se qualquer byte do documento mudar depois, o hash muda e o dossiê deixa de casar com ele. É essa a detecção de alteração posterior que a lei exige.
"signed": false com o motivo nomeado (verification_not_approved) e o módulo sai do preço daquela verificação. O bloco esignature da criação é obrigatório quando o flow contém o módulo (422 esignature_document_required) e recusado quando não contém (422 esignature_not_supported), e chave desconhecida dentro dele é 400 unknown_esignature_key: nunca aceito e ignorado em silêncio. O link hospedado não leva o documento: a emissão de link para um flow com o módulo é recusada com o mesmo 422 esignature_document_required, e a sessão desse flow nasce pela API.