REST API
Управляйте доменами, сканированиями и записями о согласии по HTTPS, экспортируйте подтверждения и получайте подписанные вебхуки. Аутентификация, ошибки, лимиты.
Последнее обновление: 29 октября 2026 г.
REST API позволяет автоматизировать всё, что можно сделать в панели управления: добавлять домены, запускать сканирования, искать и экспортировать записи о согласии и получать вебхуки при изменениях. API доступен на тарифах Pro и Enterprise.
Аутентификация
Создайте API-ключ в разделе Settings → API keys. Ключ действует в пределах одного рабочего пространства и дает доступ только на чтение или на чтение и запись. Передавайте ключ как bearer-токен:
curl https://api.cookiesh.eu/v1/domains \
-H "Authorization: Bearer ck_sk_live_..."
Секретные ключи начинаются с ck_sk_. Никогда не используйте их в браузерном коде. Тегу script нужен только ваш публичный ID сайта.
Все запросы выполняются по HTTPS в формате JSON. Базовый URL — https://api.cookiesh.eu/v1. Отметки времени передаются строками ISO 8601 в UTC.
Эндпоинты
| Метод | Путь | Описание |
|---|---|---|
GET |
/domains |
Список доменов в рабочем пространстве |
POST |
/domains |
Добавить домен |
GET |
/domains/{id} |
Получить домен и его настройки |
DELETE |
/domains/{id} |
Удалить домен |
POST |
/domains/{id}/scans |
Запустить сканирование cookie |
GET |
/domains/{id}/scans/{scan_id} |
Получить статус и результаты сканирования |
GET |
/domains/{id}/cookies |
Список классифицированных файлов cookie и трекеров |
GET |
/consents |
Поиск записей о согласии |
GET |
/consents/{consent_id} |
Получить одну запись о согласии с подтверждением по хеш-цепочке |
POST |
/exports |
Запустить экспорт записей о согласии в CSV или JSON |
GET |
/exports/{id} |
Получить статус экспорта и URL для скачивания |
DELETE |
/subjects/{user_id} |
Удалить все записи о согласии, связанные с ID пользователя |
Пример: найти записи о согласии одного посетителя.
curl "https://api.cookiesh.eu/v1/consents?domain_id=dom_29xk&consent_id=cns_8Hq2Lw" \
-H "Authorization: Bearer ck_sk_live_..."
{
"data": [
{
"id": "cns_8Hq2Lw",
"domain_id": "dom_29xk",
"created_at": "2026-10-12T09:41:07Z",
"region": "DE",
"method": "banner",
"banner_version": "v14",
"categories": { "necessary": true, "preferences": false, "analytics": true, "marketing": false },
"hash": "9f2c…e71a"
}
],
"next_cursor": null
}
Пагинация
Эндпоинты со списками возвращают до 100 элементов. Чтобы получить меньше, передайте limit. Если результатов больше, ответ содержит next_cursor. Передайте его обратно в параметре cursor, чтобы получить следующую страницу. Курсоры действительны 24 часа.
Ошибки
Ошибки возвращаются со стандартными кодами состояния HTTP и единообразным телом:
{
"error": {
"type": "invalid_request",
"message": "domain_id is required",
"request_id": "req_4Kd92"
}
}
| Статус | Значение |
|---|---|
400 |
Некорректный запрос. Причина указана в сообщении. |
401 |
API-ключ отсутствует или недействителен. |
403 |
Ключ дает доступ только на чтение, или ваш тариф не включает эту функцию. |
404 |
Ресурс не существует в этом рабочем пространстве. |
429 |
Превышен лимит запросов. Повторите запрос через количество секунд, указанное в Retry-After. |
5xx |
Ошибка на нашей стороне. Повторите запрос с экспоненциальной задержкой. |
Обращаясь в поддержку, указывайте request_id.
Лимиты запросов
Рабочие пространства на тарифе Pro могут выполнять 600 запросов в минуту, на тарифе Enterprise — 3000. Каждый ответ содержит заголовки RateLimit-Limit, RateLimit-Remaining и RateLimit-Reset. Выполняющиеся экспорты не учитываются в лимите.
Вебхуки
Добавьте эндпоинт в разделе Settings → Webhooks и выберите события, которые хотите получать:
| Событие | Когда отправляется |
|---|---|
consent.created |
Посетитель сохраняет новый выбор |
consent.updated |
Посетитель меняет ранее сделанный выбор |
scan.completed |
Сканирование cookie завершено |
scan.new_items |
Сканирование нашло файлы cookie или трекеры, которые нужно проверить |
usage.threshold |
Рабочее пространство достигло 80 % или 100 % месячного лимита записей о согласии |
Каждая доставка — это запрос POST с телом в формате JSON и заголовком Cookiesh-Signature. Заголовок содержит отметку времени и подпись HMAC-SHA256 строки timestamp.body, созданную с помощью секрета подписи вашего эндпоинта. Проверяйте подпись, прежде чем доверять содержимому:
import crypto from 'node:crypto';
export function verify(rawBody: string, header: string, secret: string): boolean {
const { t, v1 } = Object.fromEntries(header.split(',').map((part) => part.split('=')));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // отклоняем старые доставки
const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}
Ответьте статусом 2xx в течение 10 секунд. Неудачные доставки повторяются с экспоненциальной задержкой в течение 24 часов. События могут приходить повторно, поэтому используйте id события, чтобы отбрасывать дубликаты.