Документация API ProofSnap
REST API ProofSnap открывает любой URL в браузере на серверах ProofSnap и выдаёт опечатанный пакет доказательств: скриншот, HTML, метаданные, PDF-отчёт и манифест с хешами SHA-256. Манифест подписывается ключом RSA-4096, а его хеш отправляется в OpenTimestamps для привязки к Bitcoin. Базовый URL: https://api.getproofsnap.com/v1. Аутентификация: ключ API в виде Bearer-токена. Обновлено 24 октября 2026 г.
В примерах ниже базовый URL берётся из переменной окружения: export PROOFSNAP_API_BASE=https://api.getproofsnap.com/v1
Начало работы
-
1
Создайте ключ API
Войдите в панель, откройте раздел «Разработчикам», затем «Ключи API» и нажмите «+ Новый ключ». Ключ показывается только один раз, поэтому сразу сохраните его в надёжном месте. Ключи начинаются с
ps_live_илиps_test_. Открываете панель впервые? Руководство «Первые шаги в ProofSnap Dashboard» проведёт вас через регистрацию, выбор тарифа и первый снимок. Подробнее в руководствах по панели. -
2
Сделайте первый снимок
Передайте ключ как Bearer-токен. API сразу отвечает кодом
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
Получите результат
Опрашивайте
GET /captures/{capture_id}, покаstatusне примет значениеcompletedилиfailed. Готовый снимок содержит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
Проверьте пакет
POST /captures/{capture_id}/verifyзаново сверяет каждый указанный хеш SHA-256 с сохранёнными файлами, проверяет подпись RSA-4096 манифеста и отвечаетmatch,modifiedилиinvalid. Кроме того, любой может офлайн запустить скрипты из папкиverification/пакета или найти хеш SHA-256 файлаmanifest.jsonв публичном реестре выпущенных пакетов черезGET /ledger/{hash}. Ни для того, ни для другого ключ API не нужен.curl -X POST "$PROOFSNAP_API_BASE/captures/cap_.../verify" \ -H "Authorization: Bearer ps_live_..."
Аутентификация
Передавайте ключ API (API key) в заголовке Authorization: Bearer ps_live_.... Ключи начинаются с ps_live_ или ps_test_. Рабочий ключ создаёт платные снимки, тестовый ключ создаёт полные пакеты с водяным знаком, за которые вы не платите. Если к аккаунту не подключена оплата, рабочий ключ работает как тестовый. Если ключ не передан, API отвечает 401 MISSING_API_KEY, при неизвестном или отозванном ключе 401 INVALID_API_KEY. Ключи тарифа Website Archive доступны только для чтения (403 PLAN_API_READ_ONLY). Три маршрута работают без ключа: GET /health, GET /ledger/{hash} и GET /matter-verify.
Новый аккаунт начинает работу в песочнице (sandbox) с 50 бесплатными тестовыми снимками. Тестовое использование ограничено 200 единицами на аккаунт в сутки по UTC (429 TEST_MODE_DAILY_LIMIT); на скриншоте и в PDF стоит водяной знак на языке снимка (options.language): в русскоязычном снимке «TEST - НЕ ДЛЯ ЮРИДИЧЕСКОГО ИСПОЛЬЗОВАНИЯ», без указанного языка «TEST - NOT FOR LEGAL USE»; для include_eidas нужен рабочий ключ (403 EIDAS_REQUIRES_LIVE_KEY).
Вебхуки
Укажите options.webhook_url в отдельном запросе или создайте подписки на вебхуки для всего аккаунта через POST /webhook-subscriptions. Вебхуки (webhooks) соответствуют спецификации Standard Webhooks и содержат заголовки webhook-id, webhook-timestamp и webhook-signature (v1,, за которым следует HMAC-SHA256 от идентификатора, метки времени и тела, вычисленный с помощью секрета whsec_). Типы событий: 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. Время ожидания одной попытки доставки составляет 10 секунд, неудачные попытки повторяются через 5 минут, 30 минут, 2 часа, 8 часов и 24 часа. В течение 24 часов после создания нового секрета вебхуки подписываются и старым, и новым секретом.
Вебхуки на webhook_url из запроса подписываются секретом того ключа API, с которым был отправлен запрос. Этот секрет вебхука показывается только один раз, при создании ключа в разделе «Разработчикам» панели. У подписки на вебхуки свой секрет, который возвращается только при её создании. Проверяйте подпись по необработанному телу запроса до его разбора. Отклоняйте любой вебхук, у которого webhook-timestamp отличается от времени вашего сервера более чем на 5 минут. Обрабатывайте каждый webhook-id только один раз. Любая библиотека Standard Webhooks делает это за вас.
Лимиты и ошибки
Платные запросы (POST /captures, /captures/batch, /compare, /captures/{capture_id}/redact и /certify-hash, а также запросы на проверку, юридические удержания, задания экспорта и импорт) ограничиваются для каждого аккаунта в фиксированных окнах по 60 секунд; все ключи API аккаунта и его сеанс в панели делят одно окно. Пакетный запрос или заверение нескольких хешей расходует по одной единице на каждый URL или хеш. Единиц на окно: sandbox 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), а пока платёж по тарифу просрочен, API отвечает на запросы аккаунта кодом 402 PAYMENT_REQUIRED. Число снимков, которые аккаунт может обрабатывать одновременно, ограничено (429 CONCURRENT_CAPTURE_LIMIT). Если вы передаёте заголовок Idempotency-Key, повторный запрос в течение 24 часов вернёт исходный результат с Idempotent-Replay: true вместо второго снимка. Ошибки возвращаются как объект JSON с полями error.code, error.message и при необходимости error.details. Обращаясь в поддержку, укажите значение заголовка ответа 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
Полная документация
Все эндпоинты (endpoints) с параметрами, ответами и схемами, сгенерированные из спецификации OpenAPI 3. Спецификацию можно скачать как openapi.json (на английском, для генераторов кода) или openapi-ru.json (описания на русском). Чтобы попробовать эндпоинт без написания кода, сделайте форк коллекции API ProofSnap в Postman. Официального SDK нет: сгенерируйте клиент любым генератором OpenAPI 3 и проверяйте вебхуки библиотекой Standard Webhooks.