ProofSnap ProofSnap

Documentação da API ProofSnap

A API do ProofSnap abre qualquer URL em um navegador nos servidores do ProofSnap e devolve um pacote de provas selado: captura de tela, HTML da página, metadados, PDF de prova e um manifesto SHA-256 assinado com RSA-4096 e ancorado com OpenTimestamps. URL base: https://api.getproofsnap.com/v1. Autentique-se com uma chave de API (token Bearer). Atualizado em outubro de 2026.

Os exemplos abaixo leem a URL base de uma variável de shell: export PROOFSNAP_API_BASE=https://api.getproofsnap.com/v1

Primeiros passos

  1. 1

    Crie uma chave de API

    Entre no painel, abra Desenvolvedores e depois Chaves de API, e crie uma chave. Ela é exibida uma única vez, então guarde-a em local seguro. As chaves começam com ps_live_ ou ps_test_. É sua primeira vez no painel? O guia primeiros passos com o painel do ProofSnap mostra o cadastro, os planos e a sua primeira captura.

  2. 2

    Solicite sua primeira captura

    Envie a chave como token Bearer. A chamada devolve 202 na hora, com um capture_id e status: "processing".

    curl -X POST "$PROOFSNAP_API_BASE/captures" \
      -H "Authorization: Bearer ps_live_..." \
      -H "Content-Type: application/json" \
      -d '{"url": "https://example.com"}'
  3. 3

    Obtenha o resultado

    Consulte GET /captures/{capture_id} até que status seja completed ou failed. Uma captura concluída traz package_url (um link pré-assinado para o ZIP, válido por até 24 horas) e manifest_hash. Para obter um link novo, consulte a captura de novo. Em vez de consultar periodicamente, informe em options.webhook_url um endpoint HTTPS para receber um evento capture.completed ou capture.failed assinado com HMAC-SHA256.

    curl "$PROOFSNAP_API_BASE/captures/cap_..." \
      -H "Authorization: Bearer ps_live_..."
  4. 4

    Verifique o pacote

    POST /captures/{capture_id}/verify confere de novo cada hash SHA-256 declarado e a assinatura RSA-4096 do manifesto com os arquivos armazenados e devolve match, modified ou invalid. Além disso, qualquer pessoa pode executar offline os scripts da pasta verification/ do pacote, ou consultar o SHA-256 de manifest.json no registro público de emissão com GET /ledger/{hash}. Nenhuma das duas opções exige chave de API.

    curl -X POST "$PROOFSNAP_API_BASE/captures/cap_.../verify" \
      -H "Authorization: Bearer ps_live_..."

Autenticação

Envie a chave de API no cabeçalho Authorization: Bearer ps_live_.... As chaves começam com ps_live_ ou ps_test_. Uma chave de produção cria capturas cobradas; uma chave de teste cria pacotes de avaliação completos, com marca d'água e sem cobrança. Em uma conta sem cobrança vinculada, uma chave de produção funciona como chave de teste. Sem chave, a API devolve 401 MISSING_API_KEY; uma chave desconhecida ou revogada devolve 401 INVALID_API_KEY. As chaves do plano Website Archive são somente leitura (403 PLAN_API_READ_ONLY). Três rotas não precisam de chave: GET /health, GET /ledger/{hash} e GET /matter-verify.

Uma conta nova começa no sandbox com 50 capturas de teste gratuitas. O uso em modo de teste é limitado a 200 unidades por conta e por dia UTC (429 TEST_MODE_DAILY_LIMIT), os pacotes levam a marca d'água "TEST - NOT FOR LEGAL USE" (em um PDF em português, "TEST - NÃO UTILIZAR PARA FINS JURÍDICOS") e include_eidas exige uma chave de produção (403 EIDAS_REQUIRES_LIVE_KEY).

Webhooks

Informe options.webhook_url em cada requisição ou crie inscrições de webhook da conta com POST /webhook-subscriptions. As entregas seguem o formato Standard Webhooks, com os cabeçalhos webhook-id, webhook-timestamp e webhook-signature (v1, seguido de um HMAC-SHA256 calculado sobre o ID, o timestamp e o corpo com um segredo whsec_). Tipos de evento: capture.completed, capture.failed, capture.anchor_confirmed, certify.completed, certify.failed, redaction.completed, redaction.failed, monitor.change_detected e schedule.paused. capture.anchor_confirmed e schedule.paused vão apenas para as inscrições da conta. Cada evento também fica guardado por 30 dias em GET /events. Cada entrega tem tempo limite de 10 segundos e é reenviada depois de 5 minutos, 30 minutos, 2 horas, 8 horas e 24 horas. Quando você troca o segredo, o antigo e o novo assinam as entregas durante 24 horas.

As entregas para uma webhook_url informada na requisição são assinadas com o segredo da chave de API que fez a requisição. Esse segredo é exibido uma única vez, quando você cria a chave em Desenvolvedores no painel. Uma inscrição tem o próprio segredo, devolvido uma única vez quando você a cria. Verifique a assinatura sobre o corpo bruto antes de interpretá-lo, rejeite qualquer webhook-timestamp que difira em mais de 5 minutos do horário do seu servidor e processe cada webhook-id uma única vez. Qualquer biblioteca de Standard Webhooks faz isso por você.

Limites de requisições e erros

As requisições cobradas (POST /captures, /captures/batch, /compare, /captures/{capture_id}/redact e /certify-hash, além de verificações, retenções legais, jobs de exportação e importações) são limitadas por conta em janelas fixas de 60 segundos, compartilhadas entre todas as chaves de API da conta e a sessão do painel. Um lote ou uma certificação de vários hashes usa uma unidade por URL ou por hash. Unidades por janela: sandbox 10, Developer 60, Startup 120, Growth 300, Legal Solo 60, Legal Company 120, Website Archive 60, Archive only 30. As respostas dessas rotas trazem os cabeçalhos RateLimit-Policy e RateLimit, além dos cabeçalhos legados X-RateLimit-*; uma resposta 429 inclui também Retry-After.

As capturas de produção contam para o limite mensal do plano (402 QUOTA_EXCEEDED); as requisições de uma conta com assinatura em atraso devolvem 402 PAYMENT_REQUIRED. Cada conta só pode executar um número limitado de capturas ao mesmo tempo (429 CONCURRENT_CAPTURE_LIMIT). Envie um cabeçalho Idempotency-Key para que uma nova tentativa dentro de 24 horas devolva o resultado original com Idempotent-Replay: true em vez de criar uma segunda captura. Os erros são devolvidos em JSON com error.code, error.message e, quando útil, error.details; ao falar com o suporte, informe o valor do cabeçalho de resposta X-Request-ID. A lista completa de códigos está na referência abaixo.

Endpoints em resumo

  • Capturas: POST /captures, POST /captures/batch (de 2 a 50 URLs), GET /captures, GET /captures/hosts, GET /captures/{capture_id}, PATCH e DELETE /captures/{capture_id}, POST /captures/{capture_id}/verify
  • Revisão: POST /captures/{capture_id}/redact, POST /compare, POST /certify-hash (até 100 hashes).
  • Automação: /scheduled-captures (com /runs), /webhook-subscriptions, GET /webhook-events/{capture_id}, GET /events, GET /captures/events
  • Jurídico: /matters (casos: lacre, exportação, compartilhamento), POST /legal-holds, /imports, /captures/export-jobs
  • Conta e rotas públicas: GET /whoami, GET /health, GET /ledger/{hash}, GET /matter-verify

Referência completa

Todos os endpoints com seus parâmetros, respostas e schemas, gerados a partir da especificação OpenAPI 3. Baixe a especificação como openapi.json (em inglês, para geradores de código) ou openapi-pt.json (descrições em português). Para testar cada endpoint sem escrever código, faça um fork da coleção ProofSnap API no Postman. Não há SDK oficial: gere um cliente com qualquer gerador de OpenAPI 3 e verifique os webhooks com qualquer biblioteca de Standard Webhooks.