ProofSnap ProofSnap

ProofSnap API ドキュメント

ProofSnap API は、指定した URL を ProofSnap のサーバー上のブラウザで開き、封印された証拠パッケージを返す REST API です(2026年11月時点)。パッケージには、スクリーンショット、HTML、メタデータ、PDF の証拠レポートと、SHA-256 ハッシュを記載したマニフェストが含まれます。マニフェストには RSA-4096 鍵で署名し、OpenTimestamps のカレンダーへ送信して Bitcoin へのアンカーを依頼します。

ベース URL はhttps://api.getproofsnap.com/v1、認証は Bearer トークンとして渡す API キーです。結果はポーリングまたは HMAC-SHA256 で署名された Webhook で受け取り、POST /captures/{capture_id}/verify やオフラインのスクリプトで検証できます。仕様は OpenAPI 3形式で公開しており、Postman のコレクションからも API を試せます。エラーは JSON で返り、Idempotency-Key ヘッダーで再送時の重複を防げます。最終更新 2026-11-06

以下の例では、ベース URL を環境変数から読み込みます:export PROOFSNAP_API_BASE=https://api.getproofsnap.com/v1

はじめ方

  1. 1

    API キーを作成する

    ダッシュボードにログインし、「開発者向け」の「APIキー」を開いて「+ 新規キー」をクリックします。キーは一度しか表示されないため、すぐに安全な場所へ保存してください。キーはps_live_またはps_test_で始まります。ダッシュボードの操作はダッシュボードの始め方で説明しています。

  2. 2

    最初のキャプチャを実行する

    キーを Bearer トークンとして渡します。呼び出すとすぐに、202とcapture_id、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

    結果を受け取る

    statusがcompletedまたはfailedになるまで、GET /captures/{capture_id}をポーリングします。完了したキャプチャには、package_url(ZIP の署名付きリンク、最長24時間有効)とmanifest_hashが含まれます。キャプチャを再度取得すると新しいリンクが発行されます。ポーリングの代わりにoptions.webhook_urlで HTTPS エンドポイントを指定すると、HMAC-SHA256 で署名されたcapture.completedまたはcapture.failedのイベントが届きます。

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

    パッケージを検証する

    POST /captures/{capture_id}/verifyは、記載された SHA-256 ハッシュを保管中のファイルと照合し直し、マニフェストの RSA-4096 署名を確認して、match、modified、invalidのいずれかを返します。パッケージ内のverification/のスクリプトをオフラインで実行することも、manifest.jsonの SHA-256 ハッシュをGET /ledger/{hash}で公開の発行台帳から照会することも、誰でもできます。この2つの方法に API キーは必要ありません。

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

認証

API キーはAuthorization: Bearer ps_live_...ヘッダーで送信します。キーはps_live_またはps_test_で始まります。本番キーでは課金対象のキャプチャを作成し、テストキーでは透かし入りの完全なパッケージを無料で作成します。請求先が登録されていないアカウントの本番キーは、テストキーとして動作します。キーがない場合は401 MISSING_API_KEY、不明または失効したキーの場合は401 INVALID_API_KEYが返ります。Website Archive プランのキーは読み取り専用です(403 PLAN_API_READ_ONLY)。GET /health、GET /ledger/{hash}、GET /matter-verifyの3つのパスにはキーは不要です。

新規アカウントはサンドボックスで始まり、50件のテストキャプチャを無料で利用できます。テストモードの利用はアカウントごとに1日200ユニットまで(UTC 基準、429 TEST_MODE_DAILY_LIMIT)で、パッケージには透かし「TEST - NOT FOR LEGAL USE」(日本語の PDF では「TEST - 法的用途には使用不可」)が入ります。include_eidasには本番キーが必要です(403 EIDAS_REQUIRES_LIVE_KEY)。

Webhook

リクエストごとにoptions.webhook_urlを指定するか、POST /webhook-subscriptionsでアカウント全体の Webhook サブスクリプションを作成します。配信は Standard Webhooks 形式で、webhook-id、webhook-timestamp、webhook-signatureのヘッダーが付きます(v1,に続けて、ID、タイムスタンプ、本文からwhsec_シークレットで計算した HMAC-SHA256)。イベントの種類はcapture.completed、capture.failed、capture.anchor_confirmed、certify.completed、certify.failed、redaction.completed、redaction.failed、monitor.change_detected、schedule.pausedです。capture.anchor_confirmedとschedule.pausedはアカウント全体のサブスクリプションにだけ届きます。どのイベントも、30日間はGET /eventsで取得できます。1回の配信のタイムアウトは10秒で、失敗した配信は5分後、30分後、2時間後、8時間後、24時間後に再試行します。シークレットの再生成後24時間は、新旧両方のシークレットで署名します。

リクエストで指定したwebhook_urlへの配信には、そのリクエストを送った API キーのシークレットで署名します。この Webhook 署名シークレットは、ダッシュボードの「開発者向け」でキーを作成したときに一度だけ表示されます。Webhook サブスクリプションには専用のシークレットがあり、作成時に一度だけ返されます。署名はパースする前のリクエスト本文で検証してください。webhook-timestampがサーバーの時刻と5分を超えてずれている配信は拒否し、同じwebhook-idは一度だけ処理してください。Standard Webhooks のライブラリを使えば、これらの処理は自動で行われます。

レート制限とエラー

課金対象のリクエスト(POST /captures、/captures/batch、/compare、/captures/{capture_id}/redact、/certify-hash)と、検証、リーガルホールド、エクスポートジョブ、インポートのリクエストには、アカウント単位で60秒の固定ウィンドウのレート制限が適用されます。制限は、そのアカウントのすべての API キーとダッシュボードのセッションで共有されます。バッチリクエストや複数ハッシュの証明では、URL またはハッシュごとに1ユニットを消費します。ウィンドウあたりのユニット数は、サンドボックス10、Developer 60、Startup 120、Growth 300、Legal Solo 60、Legal Company 120、Website Archive 60、Archive only 30です。これらのパスのレスポンスにはRateLimit-Policy、RateLimitと従来のX-RateLimit-*ヘッダーが含まれ、429のレスポンスにはRetry-Afterも含まれます。

本番のキャプチャはプランの月間上限に計上されます(402 QUOTA_EXCEEDED)。サブスクリプションの支払いが滞っているアカウントのリクエストには402 PAYMENT_REQUIREDが返ります。1つのアカウントで同時に処理できるキャプチャの数には上限があります(429 CONCURRENT_CAPTURE_LIMIT)。Idempotency-Keyヘッダーを送ると、24時間以内の再送では2件目のキャプチャを作成せず、Idempotent-Replay: trueヘッダー付きで元の結果を返します。エラーはerror.code、error.messageと、必要に応じてerror.detailsを持つ JSON オブジェクトで返ります。サポートへのお問い合わせの際は、レスポンスヘッダーX-Request-IDの値をお知らせください。コードの一覧は下のリファレンスに掲載しています。

エンドポイントの概要

  • キャプチャ:POST /captures、POST /captures/batch(2~50件の URL)、GET /captures、GET /captures/hosts、GET /captures/{capture_id}、PATCHとDELETE /captures/{capture_id}、POST /captures/{capture_id}/verify
  • 墨消し、比較、証明:POST /captures/{capture_id}/redact(墨消し)、POST /compare、POST /certify-hash(最大100件のハッシュ)
  • 自動化:/scheduled-captures(スケジュールキャプチャと実行履歴/runs)、/webhook-subscriptions、GET /webhook-events/{capture_id}、GET /events、GET /captures/events
  • 法務向け機能:/matters(案件の封印、エクスポート、共有)、POST /legal-holds(リーガルホールド)、/imports、/captures/export-jobs
  • アカウントと公開パス:GET /whoami、GET /health、GET /ledger/{hash}、GET /matter-verify

完全なリファレンス

すべてのエンドポイントのパラメータ、レスポンス、スキーマを掲載しています。内容は OpenAPI 3仕様から生成しています。仕様はopenapi.json(英語、コードジェネレーター向け)またはopenapi-ja.json(説明が日本語)でダウンロードできます。コードを書かずにエンドポイントを試すには、Postman の ProofSnap API コレクションをフォークしてください。公式 SDK はありません。クライアントは OpenAPI 3のジェネレーターで生成し、Webhook は Standard Webhooks のライブラリで検証してください。データの保管場所と暗号化についてはセキュリティのページをご覧ください。

テストキャプチャ50件を無料で