ProofSnap API-documentatie
De ProofSnap API opent elke URL in een browser op de servers van ProofSnap en levert een verzegeld bewijspakket: screenshot, HTML, metadata, een PDF-bewijsrapport en een manifest met SHA-256-hashes. Het manifest wordt ondertekend met RSA-4096 en de hash ervan wordt via OpenTimestamps ingediend voor verankering in Bitcoin. Basis-URL: https://api.getproofsnap.com/v1. Authenticatie: een API-sleutel als Bearer-token. Bijgewerkt op 24 oktober 2026.
De voorbeelden hieronder lezen de basis-URL uit een omgevingsvariabele: export PROOFSNAP_API_BASE=https://api.getproofsnap.com/v1
Aan de slag
-
1
Maak een API-sleutel aan
Meld u aan in het dashboard, open ‘Ontwikkelaars’, daarna ‘API-sleutels’, en klik op ‘+ Nieuwe sleutel’. De sleutel wordt maar één keer getoond; bewaar hem dus meteen op een veilige plek. Sleutels beginnen met
ps_live_ofps_test_. Opent u het dashboard voor het eerst? De handleiding ‘Eerste stappen met het ProofSnap Dashboard’ leidt u door de registratie, de keuze van een abonnement en uw eerste vastlegging. Meer uitleg vindt u in de handleidingen voor het dashboard. -
2
Start uw eerste vastlegging
Geef de sleutel mee als Bearer-token. De API antwoordt direct met
202en geeftcapture_idenstatus: "processing"terug.curl -X POST "$PROOFSNAP_API_BASE/captures" \ -H "Authorization: Bearer ps_live_..." \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com"}' -
3
Haal het resultaat op
Poll
GET /captures/{capture_id}totstatusde waardecompletedoffailedheeft. Een voltooide vastlegging bevatpackage_url(een vooraf ondertekende link naar het ZIP-bestand, maximaal 24 uur geldig) enmanifest_hash. Een nieuwe link krijgt u door de vastlegging opnieuw op te halen. In plaats van te pollen kunt u inoptions.webhook_urleen HTTPS-endpoint opgeven dat een met HMAC-SHA256 ondertekende gebeurteniscapture.completedofcapture.failedontvangt.curl "$PROOFSNAP_API_BASE/captures/cap_..." \ -H "Authorization: Bearer ps_live_..." -
4
Verifieer het pakket
POST /captures/{capture_id}/verifyvergelijkt elke opgegeven SHA-256-hash opnieuw met de opgeslagen bestanden, controleert de RSA-4096-handtekening van het manifest en antwoordt metmatch,modifiedofinvalid. Iedereen kan ook offline de scripts in de mapverification/van het pakket uitvoeren, of de SHA-256-hash vanmanifest.jsonopzoeken in het openbare register van uitgegeven pakketten viaGET /ledger/{hash}. Voor geen van beide is een API-sleutel nodig.curl -X POST "$PROOFSNAP_API_BASE/captures/cap_.../verify" \ -H "Authorization: Bearer ps_live_..."
Authenticatie
Stuur uw API-sleutel (API key) mee in de header Authorization: Bearer ps_live_.... Sleutels beginnen met ps_live_ of ps_test_. Een live sleutel maakt betaalde vastleggingen, een testsleutel volledige pakketten met watermerk waarvoor u niet betaalt. Is er aan het account geen facturering gekoppeld, dan werkt een live sleutel als testsleutel. Ontbreekt de sleutel, dan antwoordt de API met 401 MISSING_API_KEY, bij een onbekende of ingetrokken sleutel met 401 INVALID_API_KEY. Sleutels van het abonnement Website Archive zijn alleen-lezen (403 PLAN_API_READ_ONLY). Drie routes vragen geen sleutel: GET /health, GET /ledger/{hash} en GET /matter-verify.
Een nieuw account begint in de sandbox met 50 gratis testvastleggingen. Testgebruik is beperkt tot 200 eenheden per account per UTC-dag (429 TEST_MODE_DAILY_LIMIT), pakketten dragen het watermerk ‘TEST - NOT FOR LEGAL USE’ (in de Nederlandse PDF ‘TEST - NIET VOOR JURIDISCH GEBRUIK’) en include_eidas vereist een live sleutel (403 EIDAS_REQUIRES_LIVE_KEY).
Webhooks
Geef options.webhook_url per verzoek mee, of maak via POST /webhook-subscriptions webhookabonnementen voor het hele account aan. Webhooks volgen de specificatie Standard Webhooks, met de headers webhook-id, webhook-timestamp en webhook-signature (v1, gevolgd door een HMAC-SHA256 over id, tijdstempel en body met het secret whsec_). Gebeurtenistypen: capture.completed, capture.failed, capture.anchor_confirmed, certify.completed, certify.failed, redaction.completed, redaction.failed, monitor.change_detected en schedule.paused. De gebeurtenissen capture.anchor_confirmed en schedule.paused gaan alleen naar abonnementen voor het hele account. Elke gebeurtenis is daarnaast 30 dagen op te halen via GET /events. Een afleverpoging heeft een time-out van 10 seconden, en mislukte pogingen worden herhaald na 5 minuten, 30 minuten, 2 uur, 8 uur en 24 uur. Gedurende 24 uur na het aanmaken van een nieuw secret worden webhooks met zowel het oude als het nieuwe secret ondertekend.
Webhooks naar een webhook_url uit een verzoek worden ondertekend met het secret van de API-sleutel waarmee dat verzoek is verstuurd. Dit webhook-secret wordt maar één keer getoond, wanneer u de sleutel aanmaakt in het onderdeel ‘Ontwikkelaars’ van het dashboard. Een webhookabonnement heeft een eigen secret, dat alleen bij het aanmaken wordt teruggegeven. Controleer de handtekening op de onbewerkte body voordat u die parseert. Weiger elke webhook waarvan webhook-timestamp meer dan 5 minuten afwijkt van de tijd van uw server. Verwerk elke webhook-id maar één keer. Elke Standard Webhooks-bibliotheek doet dit voor u.
Rate limits en fouten
Betaalde verzoeken (POST /captures, /captures/batch, /compare, /captures/{capture_id}/redact en /certify-hash, en daarnaast verzoeken voor verificatie, legal holds, exporttaken en imports) zijn per account beperkt in vaste vensters van 60 seconden; alle API-sleutels van het account en de dashboardsessie ervan delen hetzelfde venster. Een batch of een certificering van meerdere hashes telt als één eenheid per URL of hash. Eenheden per venster: sandbox 10, Developer 60, Startup 120, Growth 300, Legal Solo 60, Legal Company 120, Website Archive 60, Archive only 30. Antwoorden op deze routes bevatten de headers RateLimit-Policy en RateLimit plus de oudere headers X-RateLimit-*, en een 429-antwoord bevat bovendien Retry-After.
Live vastleggingen tellen mee voor het maandelijkse quotum van het abonnement (402 QUOTA_EXCEEDED), en zolang de betaling van het abonnement achterstallig is, beantwoordt de API de verzoeken van het account met 402 PAYMENT_REQUIRED. Per account kan maar een beperkt aantal vastleggingen tegelijk worden verwerkt (429 CONCURRENT_CAPTURE_LIMIT). Stuurt u een header Idempotency-Key mee, dan levert een herhaald verzoek binnen 24 uur het oorspronkelijke resultaat op met Idempotent-Replay: true, in plaats van een tweede vastlegging. Fouten komen terug als JSON-object met error.code, error.message en waar nodig error.details. Vermeld bij contact met ons supportteam de waarde van de antwoordheader X-Request-ID. De volledige lijst met codes staat in de documentatie hieronder.
Endpoints in het kort
- Vastleggingen:
POST /captures,POST /captures/batch(2 tot 50 URL's),GET /captures,GET /captures/hosts,GET /captures/{capture_id},PATCHenDELETE /captures/{capture_id},POST /captures/{capture_id}/verify - Weglakken, vergelijken en certificeren:
POST /captures/{capture_id}/redact,POST /compare,POST /certify-hash(tot 100 hashes) - Automatisering:
/scheduled-captures(geplande vastleggingen met de uitvoeringsgeschiedenis/runs),/webhook-subscriptions,GET /webhook-events/{capture_id},GET /events,GET /captures/events - Juridische functies:
/matters(zaken: verzegelen, exporteren, delen),POST /legal-holds(legal holds),/imports,/captures/export-jobs - Account en openbare routes:
GET /whoami,GET /health,GET /ledger/{hash},GET /matter-verify
Volledige documentatie
Alle endpoints met parameters, antwoorden en schema's, gegenereerd uit de OpenAPI 3-specificatie. U kunt de specificatie downloaden als openapi.json (Engels, voor codegeneratoren) of openapi-nl.json (beschrijvingen in het Nederlands). Wilt u een endpoint uitproberen zonder code te schrijven, fork dan de ProofSnap API-collectie in Postman. Er is geen officiële SDK: genereer een client met een OpenAPI 3-generator naar keuze en verifieer webhooks met een Standard Webhooks-bibliotheek.