Ошибки и лимиты
Формат ошибок API и коды ответов, ошибки проверки отчётов и отдельных записей, лимиты запросов на ключ, размеры пачек, квоты сайта — хиты, записи сессий, хранение — и пределы тега и отчётов.
Формат ошибки
Ошибка запроса целиком приходит с HTTP-кодом 4xx или 5xx и телом:
{"error": {"code": "validation_failed", "message": "Поле date_from обязательно"}}
code— машинный код из таблицы ниже. Проверяйте в коде именно его.message— пояснение для человека; текст может меняться.details— необязательный объект с подробностями, например о полях, которые не прошли проверку.
| Код | HTTP | Когда | Что делать |
|---|---|---|---|
invalid_request |
400 | тело не JSON или запрос не разобрать | исправить запрос |
unauthorized |
401 | нет ключа, ключ неверен или отозван | проверить ключ, выпустить новый в настройках сайта |
forbidden |
403 | сайт заблокирован или удалён, владелец заблокирован | связаться с поддержкой |
not_found |
404 | нет такого метода или объекта | проверить адрес |
payload_too_large |
413 | тело больше 1 МБ | разбить пачку на части |
validation_failed |
422 | поля не прошли проверку | исправить поля по details |
rate_limited |
429 | превышен лимит запросов, в том числе по ключу уже выполняются 2 запроса POST /reports |
повторить после паузы из заголовка Retry-After |
internal |
500 | ошибка сервиса | повторить позже; если повторяется — сообщить X-Request-ID |
unavailable |
503 | сервис временно недоступен | повторить после паузы из заголовка Retry-After |
Каждый ответ содержит заголовок X-Request-ID — сохраняйте его в логах.
Проверка отчёта
POST /reports с неверным определением отвечает 422 с кодом validation_failed. В details — поле и код причины:
{"error": {"code": "validation_failed", "message": "Неизвестная метрика", "details": [{"field": "metrics[1]", "code": "unknown_metric"}]}}
Код в details |
Причина |
|---|---|
unknown_dimension |
нет такого измерения |
unknown_metric |
нет такой метрики |
unknown_segment |
нет такого сегмента у сайта |
incompatible |
метрику нельзя посчитать вместе с измерениями запроса — например, отказы по адресу ссылки |
too_many |
больше 5 измерений, 10 метрик, 20 фильтров или 3 сортировок |
bad_date |
неверная дата, date_from позже date_to, период длиннее 25 месяцев или дата в будущем |
bad_filter |
неверный фильтр: оператор, число значений или регулярное выражение |
Если отчёт не уложился во время даже по выборке, ответ — 503 с кодом unavailable: сократите период.
Ошибки отдельных записей
Методы пачек отвечают 202 Accepted, даже если часть записей не принята. Непринятые записи перечислены в ответе.
| Метод | Где | Коды |
|---|---|---|
POST /conversions |
rejected: [{"index", "code"}] |
unknown_goal — нет JS-цели с таким кодом; unknown_visitor — посетитель не найден; too_old — подходящий визит старше 90 дней |
POST /orders |
rejected: [{"index", "code"}] |
unknown_visitor, too_old, invalid_products — ошибка в списке товаров |
POST /users |
results: [{"index", "ok", "error"}] |
pii_not_allowed — в params есть ключ персональных данных; других кодов отказа у записи нет |
index — номер записи в пачке, с нуля. duplicates в ответе POST /conversions и POST /orders — записи, которые уже были учтены: это не ошибка.
Ошибка формы хотя бы одного элемента POST /visitors/attributes или записи POST /users — неверный тип, длина, UUID, нет идентификатора — отклоняет весь запрос ответом 422 с кодом validation_failed, а в details — поле с номером элемента, например visitors[3].visitor_id или users[3].email. POST /users отвечает 503 с кодом unavailable, если приём временно недоступен: пачка не сохранена, её нужно отправить ещё раз.
Повторы
- Повторяйте при сетевой ошибке,
429,500и503— с растущей паузой, а приRetry-After— не раньше указанного времени. - Не повторяйте без исправления остальные ответы 4xx: результат будет тем же.
- Пачки конверсий и заказов можно отправлять повторно без риска задвоить данные: конверсии узнаются по
id, заказы — поtransaction_id. - Пачку
POST /usersтоже можно повторить: поля заменяются теми же значениями. Толькоinterestsпри каждом повторе снова усиливают свои темы.
Лимиты запросов
| Что | Лимит |
|---|---|
/users, /conversions, /orders |
20 запросов в секунду на ключ — общий лимит трёх методов |
/visitors/attributes, /visitors/{visitor_id}, /network |
50 в секунду на ключ — общий лимит трёх методов |
/reports |
2 одновременных запроса и 60 в минуту на ключ |
все запросы к /api/ с одного IP |
3000 в минуту |
Сверх лимита, в том числе при третьем одновременном запросе отчёта, сразу приходит ответ 429 с кодом rate_limited и заголовком Retry-After. Ответ /visitors/* из кеша тоже расходует лимит.
Размеры пачек
| Метод | В одном запросе |
|---|---|
POST /conversions |
до 1000 конверсий |
POST /orders |
до 500 заказов |
POST /users |
до 500 записей |
POST /visitors/attributes |
до 100 посетителей |
POST /reports |
до 5 измерений, 10 метрик и 10 000 строк |
| любой запрос | тело до 1 МБ |
Квоты сайта
Сервис бесплатный, нагрузку ограничивают квоты. Администратор ДАРА может изменить квоты для сайта или пользователя.
| Квота | По умолчанию | Что при превышении |
|---|---|---|
| хитов сайта в сутки по Москве | 1 000 000 | до конца суток хиты принимаются от 10 % посетителей с весом 10; отправки форм, цели из тега, покупки, возвраты и dara('user') принимаются от всех посетителей |
| записей сессий сайта в сутки по Москве | 1000 | до конца суток новые визиты не записываются, начатые записи продолжаются; короткие записи в квоту не входят |
| хранение хитов и визитов | 13 месяцев | данные старше удаляются |
| хранение записей сессий | 15 дней, не больше 90; избранные — 90 дней | запись пропадает из списка и плеера и удаляется |
| сайтов у пользователя | 30 | новый сайт не создаётся, кабинет показывает пояснение |
Роботы учитываются в квоте хитов: они тоже нагружают сервер. Как считаются отчёты сверх квоты — в разделе Отчёты и метрики.
Пределы тега
| Что | Предел |
|---|---|
| целей на сайте | 200 |
| код цели | латинские буквы в нижнем регистре, цифры, _ и -, до 64 знаков |
params в dara('goal') |
2 КБ |
params в dara('event') |
2 КБ |
user_id в dara('user') |
до 191 символа |
email, phone, city в dara('user') |
до 254, 32 и 128 символов |
age в dara('user') |
от 5 до 100 |
children в dara('user') |
до 10 детей, age ребёнка — от 0 до 17 |
interests в dara('user') |
до 50 строк, строка — до 200 символов |
params в dara('user') |
до 4 КБ в JSON; больше — params не отправляются |
| пачка хитов | до 50 событий и 64 КБ |
| кусок записи сессии | до 1024 КБ в сжатом виде; больший кусок не отправляется |
| запросы с одного посетителя | до 60 за 10 секунд и до 1000 событий в час |
| опоздавшие события | старше 24 часов отбрасываются |
Посетитель, который превысил лимиты запросов, получает отметку робота с причиной «Частота», а лишние события отбрасываются.
Лишние элементы children и interests и строки длиннее предела тег обрезает, а поля dara('user') с неверным значением не отправляет — остальные поля команды уходят. В POST /users пределы строк шире — phone до 64 символов, city до 200 — а превышение даёт 422.
Пределы отчётов
| Что | Предел |
|---|---|
| время расчёта отчёта | 30 секунд, затем автоматический повтор по выборке 10 % посетителей |
| одновременных отчётов пользователя | 2 |
| конструктор | до 5 группировок и 10 метрик |
| выгрузка XLSX | до 100 000 строк; больше 10 000 — в фоне, ссылка приходит письмом и действует 7 дней |
| хранение файла выгрузки | 7 дней, потом файл удаляется |
| выгрузки сайта | одновременно собирается одна, в очереди — до 5 |
| избранные записи сессий | до 100 на сайт |
| ссылка режима карты | действует 1 час |