Pular para o conteúdo

Doc Chain

assinatura eletrônica / nível L1

Assine documentos.Prove cada etapa.

Cadeia de hashes SHA-256, dossiê de evidências e ancoragem externa diária de tempo. Integre tudo por API REST.

prova técnica / sinais verificáveis
SHA-256
cadeia encadeada
±300s
janela assinada da API
10 min
validade do OTP
≥ 5 anos
documentos concluídos + dossiê
  • SHA-256cadeia encadeada
  • 10 endpointsREST
  • 5 eventosde webhook
  • ±300sjanela assinada
  • 10 minTTL do OTP
  • 1×/diaancoragem externa
  • ≥ 5 anosretenção
  • 4 headersde autenticação
  • 30s × 2^nbackoff
01 / Integridade

Confiança que qualquer pessoa pode recomputar

A confiança não vem da palavra da plataforma. Vem de evidências que qualquer pessoa pode recomputar na página pública /verificar.

Documento recebido

O arquivo original recebe um SHA-256 antes de qualquer assinatura.

passo 01
payload · exemplosha256(original) = 222385b617ad19e2b5fe6c9175a19a67486e836541aa43c3015bb5f23d7aa2f1
prevHash: arquivo originalhash: 222385b617ad19e2b5fe6c9175a19a67486e836541aa43c3015bb5f23d7aa2f1

Evento canônico

O evento de assinatura é serializado de forma canônica com o prevHash.

passo 02
payload · exemplocanonical(signature_event, prevHash) = 206e5595ae196f16b4a316e97608ca83f9d5cdbca453396e18f68bd4261b8dbb
prevHash: 222385b617ad…3d7aa2f1hash: 206e5595ae196f16b4a316e97608ca83f9d5cdbca453396e18f68bd4261b8dbb

Append protegido

Advisory lock protege o append: a signature_event forma uma cadeia append-only.

passo 03
payload · exemploadvisory_lock(signature_event) → tip = ec9fb929cbc71306d470b2fb1a4ed686606fa0ae0986da48407f6f65304b89e1
prevHash: 206e5595ae19…261b8dbbhash: ec9fb929cbc71306d470b2fb1a4ed686606fa0ae0986da48407f6f65304b89e1

Selo visual + QR

O PDF recebe selo visual e QR apontando para a página pública /verificar.

passo 04
payload · exemplostamp.pdf + qr(/verificar) → 1405513e920f8f8b079deaee46c8f624c9749ff2e00d5503f12f9d4a8c4865c1
prevHash: ec9fb929cbc7…304b89e1hash: 1405513e920f8f8b079deaee46c8f624c9749ff2e00d5503f12f9d4a8c4865c1

Dossiê de evidências

Hashes, signatários, eventos em UTC, cadeia e hash final (tip) ficam reunidos.

passo 05
payload · exemplodossier.pdf { hashes, signers, events@UTC, chain, tip } → accf2938b483afdcbab23878b640b1487498c58b1639695e7007a230d2b3f77d
prevHash: 1405513e920f…8c4865c1hash: accf2938b483afdcbab23878b640b1487498c58b1639695e7007a230d2b3f77d

Âncora diária UTC

A raiz do dia segue para o OpenTimestamps e seu calendário Bitcoin; a confirmação pode levar horas.

passo 06
payload · exemploots(root@UTC) · pending → submitted → confirmed → ec134516cfe329f84c5fede02531427dc83d9ae57996df5dfcb3b357238239cc
prevHash: accf2938b483…d2b3f77dhash: ec134516cfe329f84c5fede02531427dc83d9ae57996df5dfcb3b357238239cc
prova independente
GET /verificarresultado público
documento · UUID ou SHA-2567f9e2d46-7b71-4a1f-9e2d-4f4c7b0d8a16

cadeia válida

todos os elos foram recomputados

  1. 01arquivo original → evento de assinatura · recomputado
  2. 02evento anterior → próximo evento · prevHash confere
  3. 03último evento → tip da cadeia · cadeia válida

A verificação pública recomputa a cadeia de hashes; ela não consulta a âncora OTS.

Verificar um documento agora
garantias operacionais

Cada registro tem contexto, limite e procedência.

Acesso de assinatura

OTP de 6 dígitos, uso único, TTL de 10 min e até 5 tentativas. Ticket de assinatura válido por 15 min.

Rate limit público

A página pública aplica limite de 10/min por combinação de IP + token.

Trilha separada

signature_event é append-only e distinta de audit_logs, a auditoria administrativa genérica.

Procedência registrada

CPF opcional com dígito verificador validado e procedência registrada. IP e user-agent também são registrados.

Retenção sem expurgo automático

Documentos concluídos e dossiê ficam retidos por ≥ 5 anos. Exclusões por obrigação legal são registradas.

Convite com validade

O link do convite tem prazo próprio (30 dias por padrão) e o documento expira sozinho, com evento na cadeia.

limites explícitos

O que não prometemos

  • Não é ICP-Brasil nem assinatura qualificada.
  • E-mail + OTP comprovam posse do e-mail, não identidade civil.
  • O selo visual é apontamento, não a base da validade.

02 / Integração

O seu backend continua no comando.

10 endpoints REST, autenticação por chave + HMAC e webhooks assinados — do rascunho ao dossiê sem sair do seu backend.

POST /api/v1/documentos
REST / 01—06
requisição
curl -X POST https://seu-dominio.example/api/v1/documentos \  -H "Authorization: Bearer sk_live_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \  -H "X-Timestamp: 1778933400" \  -H "X-Nonce: 8f38e4e3-8f26-4e5c-9a9c-7c6a9d9f1c01" \  -H "X-Signature: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: contrato-2026-0001" \  --data '{"titulo":"Contrato de prestação de serviços"}'
resposta
HTTP/1.1 201 Created{"id":"3d7e8f5a-1d3c-4cb3-8e39-7c6a9d9f1c01","status":"draft"}
Assinatura HMACNonce anti-replayfluxo em loop

6 movimentos para operar um envelope; 10 endpoints no total.

Assinatura de requisição

Quatro headers. Uma prova de intenção.

Authorization
Bearer sk_live_…

sk_live_ + 32 bytes aleatórios em hex; armazenada com hash

X-Timestamp
unix em segundos

janela de aceitação ±300s

X-Nonce
UUID

TTL de 10 min; anti-replay

X-Signature
HMAC-SHA256

calculada sobre o corpo canônico

Fórmula da assinatura

HMAC-SHA256(chave, timestamp + "." + nonce + "." + SHA256(body))

Janela ±300s · nonce com TTL de 10 min.

Limite de 60 requisições / 60spor chave; excesso responde com Retry-After.

Eventos verificáveis

O envelope avisa. Você confirma.

  • envelope.created
  • envelope.sent
  • envelope.completed
  • envelope.canceled
  • envelope.expired

Header assinado

X-Webhook-Signature: t=<unix>, v1=<hex>

Corpo + entrega

{ evento, envelopeId, applicationId, dados }

Ack em 2xx · timeout de 5s · 5 tentativas com backoff 30s × 2^n.

Primeiro acesso

Controle claro para começar.

A aprovação manual protege a superfície de integração. Depois disso, a chave torna o caminho direto.

  1. 01Crie a aplicação

    No portal Aplicações, informe o endpoint e a capacidade necessária.

  2. 02Aguarde o controle

    A aplicação fica pending até a aprovação manual por um super-admin — controle, não atrito.

  3. 03Copie a chave

    A chave sk_live_ é exibida uma única vez. Rotação revoga a anterior imediatamente.

Webhook: endpoint HTTPS obrigatório.

Próximo passo

Veja payloads, estados e respostas completas.

Ler a documentação da API

03 / Fluxo

Um ciclo explícito. Um rastro verificável.

Cada transição exibe o estado do envelope e os registros que formam a prova técnica verificável.

  1. 01

    Documento criado

    evento na cadeia de hashes

  2. 02

    Documento enviado

    horário em UTC no evento

  3. 03

    Visualizado

    IP e user-agent registrados

  4. 04

    Assinado

    IP, user-agent e horário em UTC

  5. 05

    Concluído

    dossiê de evidências e hash final

Cancelado

Documento cancelado

Expirado

Documento expirado

01 / Quem envia

Organiza o fluxo

Cria o documento, adiciona signatários, envia convites e acompanha o andamento.

  • Documento criado
  • Signatário adicionado
  • Link de assinatura enviado

02 / Quem assina

Confirma pelo convite

Abre pelo link do convite e confirma um OTP de 6 dígitos válido por 10 min. O CPF é opcional.

  • Link de assinatura enviado
  • Código de verificação solicitado
  • Código de verificação confirmado

03 / Quem audita

Reconfere a prova

Verifica pelo UUID do documento ou pelo SHA-256 em /verificar. Depois, baixa o dossiê de evidências com a cadeia e o hash final.

  • UUID ou SHA-256
  • Dossiê de evidências gerado
  • hash final
Verificar um documento

04 / Próximo movimento

Assine com evidências.
Integre com clareza.

Doc Chain transforma cada assinatura eletrônica em uma prova técnica verificável — do primeiro convite ao dossiê.

Verificar um documento existente