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
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_oups_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
Solicite sua primeira captura
Envie a chave como token Bearer. A chamada devolve
202na hora, com umcapture_idestatus: "processing".curl -X POST "$PROOFSNAP_API_BASE/captures" \ -H "Authorization: Bearer ps_live_..." \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com"}' -
3
Obtenha o resultado
Consulte
GET /captures/{capture_id}até questatussejacompletedoufailed. Uma captura concluída trazpackage_url(um link pré-assinado para o ZIP, válido por até 24 horas) emanifest_hash. Para obter um link novo, consulte a captura de novo. Em vez de consultar periodicamente, informe emoptions.webhook_urlum endpoint HTTPS para receber um eventocapture.completedoucapture.failedassinado com HMAC-SHA256.curl "$PROOFSNAP_API_BASE/captures/cap_..." \ -H "Authorization: Bearer ps_live_..." -
4
Verifique o pacote
POST /captures/{capture_id}/verifyconfere de novo cada hash SHA-256 declarado e a assinatura RSA-4096 do manifesto com os arquivos armazenados e devolvematch,modifiedouinvalid. Além disso, qualquer pessoa pode executar offline os scripts da pastaverification/do pacote, ou consultar o SHA-256 demanifest.jsonno registro público de emissão comGET /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},PATCHeDELETE /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.