ДокументацияСправочник
Справочник API
Методы API v1 с параметрами, телами запросов, ответами и схемами данных — собирается из описания OpenAPI.
Справочник собирается из описания API при каждой выкладке, поэтому совпадает с работающим сервером. Машиночитаемая схема OpenAPI — /api/v1/openapi.json, без авторизации: по ней можно сгенерировать клиент или импортировать API в Postman и Insomnia.
Обязательные поля и параметры отмечены звёздочкой. Раздел «Вебхуки» описывает запросы ДАРА на ваш адрес: у них нет ключа, отправителя подтверждает подпись.
Правила и примеры интеграции — в руководствах: Объекты, Результаты анализа, События и заказы, Пользователи, Рекомендации, Поиск, Вебхуки, Ошибки и лимиты. Загрузка файлами идёт в кабинете и методов API не имеет — Импорт файлов.
API ДАРА: объекты, события и заказы, пользователи, рекомендации, поиск и вебхуки.
Аутентификация — Authorization: Bearer <ключ проекта>; ключ в адресе не принимается.
Формат — JSON в UTF-8, время — ISO-8601 с Z. Ошибки — {"error": {"code", "message", "details"?}}.
Каждый ответ содержит X-Request-ID — сообщите его при обращении в поддержку.
Объекты
- GET
/api/v1/items/{id}— Объект с результатами анализа - PUT
/api/v1/items/{id}— Создать или заменить объект - PATCH
/api/v1/items/{id}— Изменить часть полей объекта - DELETE
/api/v1/items/{id}— Удалить объект - POST
/api/v1/items/batch— Пакет операций с объектами - GET
/api/v1/items— Список объектов для сверки - POST
/api/v1/items/{id}/reprocess— Переобработать объект - GET
/api/v1/items/{id}/subtitles— Субтитры медиа объекта
GET /api/v1/items/{id}
Объект с результатами анализа
Данные объекта, состояние обработки, медиа и сводка. Тяжёлые части — по include: transcript, frames, search_chunks через запятую. Удалённый объект отдаётся с deleted: true.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Параметры
| Имя | Где | Тип | Описание |
|---|---|---|---|
id * | путь | string | id объекта у клиента; в пути — только [A-Za-z0-9._:-], до 191 символа. Другие id — через пакет.до 191 знаков |
include | строка запроса | string или null | Тяжёлые части ответа через запятую: transcript — транскрипты речи медиа с фрагментами и временем; frames — кадры с описанием, метками, текстом на кадре, оценками безопасности и ссылкой на изображение; search_chunks — куски поиска (текст и время фрагментов). Например, transcript,frames |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Объект | ItemDetail |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
404 | Объект не найден | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
PUT /api/v1/items/{id}
Создать или заменить объект
Идемпотентная полная замена объекта. Непереданные поля очищаются, PUT удалённого объекта снимает удаление. Анализ перезапускается только для изменившихся частей: текст — сводка и векторы, медиа (url или version) — изменённые медиа и всё, что от них зависит.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Параметры
| Имя | Где | Тип | Описание |
|---|---|---|---|
id * | путь | string | id объекта у клиента; в пути — только [A-Za-z0-9._:-], до 191 символа. Другие id — через пакет.до 191 знаков |
Тело запроса
JSON: ItemPutRequest. Объект целиком
| Поле | Тип | Описание |
|---|---|---|
type * | string | Тип объекта одно из: video, image, audio, text, mixed |
title | string или null | Заголовок до 1000 знаков |
description | string или null | Описание до 20000 знаков |
body | string или null | Основной текст (статья, пост) до 1000000 знаков |
author | string или null | id автора у клиента: близость к автору и разнообразие выдачи до 191 знаков |
url | string или null | Ссылка на объект на сайте клиента до 2048 знаков |
published_at | string или null | Время публикации ISO-8601; по умолчанию — время создания |
properties | object или null | Произвольные свойства до 16 КБ; фильтруемые свойства проекта — объявленного типа |
media | MediaIn[] или null | Медиа по порядку. Для video, image, audio обязательно хотя бы одно медиа своего вида; у text медиа нет до 50 элементов |
available | boolean | Можно ли показывать объект в выдаче; null не принимается по умолчанию true |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Объект обновлён | ItemWriteResponse |
201 | Объект создан | ItemWriteResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
PATCH /api/v1/items/{id}
Изменить часть полей объекта
Переданные поля заменяются, null очищает поле; media и available не принимают null. type через PATCH не меняется. Правила переобработки — как у PUT. Удаление PATCH не снимает.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Параметры
| Имя | Где | Тип | Описание |
|---|---|---|---|
id * | путь | string | id объекта у клиента; в пути — только [A-Za-z0-9._:-], до 191 символа. Другие id — через пакет.до 191 знаков |
Тело запроса
JSON: ItemPatchRequest. Изменяемые поля
| Поле | Тип | Описание |
|---|---|---|
title | string или null | Заголовок; null очищает до 1000 знаков |
description | string или null | Описание; null очищает до 20000 знаков |
body | string или null | Основной текст; null очищает до 1000000 знаков |
author | string или null | id автора у клиента; null очищает до 191 знаков |
url | string или null | Ссылка на объект на сайте клиента; null очищает до 2048 знаков |
published_at | string или null | Время публикации ISO-8601; null — время создания |
properties | object или null | Произвольные свойства целиком, до 16 КБ; null очищает |
media | MediaIn[] | Новый список медиа целиком, по порядку; null не принимается до 50 элементов |
available | boolean | Можно ли показывать объект в выдаче; null не принимается |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Объект обновлён | ItemWriteResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
404 | Объект не найден | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
DELETE /api/v1/items/{id}
Удалить объект
Мягкое удаление: объект навсегда исключается из выдачи и поиска, результаты анализа и события сохраняются и участвуют в профилях. Повторный DELETE тоже отвечает 200.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Параметры
| Имя | Где | Тип | Описание |
|---|---|---|---|
id * | путь | string | id объекта у клиента; в пути — только [A-Za-z0-9._:-], до 191 символа. Другие id — через пакет.до 191 знаков |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Объект удалён | ItemDeleteResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
404 | Объект не найден | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/items/batch
Пакет операций с объектами
До 500 операций put, patch, delete. Выполняются по порядку и независимо: ошибка одной не отменяет остальные. Больше лимита — 413 payload_too_large.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: BatchRequest. Операции
| Поле | Тип | Описание |
|---|---|---|
operations * | BatchOperation[] | До 500 операций, выполняются по порядку и независимо до 500 элементов |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Результат по каждой операции | BatchResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
GET /api/v1/items
Список объектов для сверки
Объекты проекта по возрастанию updated_at, включая удалённые. Постраничный обход — cursor из next_cursor; объект, изменённый во время обхода, появится на последующих страницах снова.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Параметры
| Имя | Где | Тип | Описание |
|---|---|---|---|
status | строка запроса | string или null | Статус объекта одно из: queued, processing, ready, partial, failed, deferred |
available | строка запроса | boolean или null | Только доступные (true) или недоступные (false) |
updated_since | строка запроса | string или null | Изменённые не раньше этого времени, ISO-8601 |
cursor | строка запроса | string или null | Курсор из next_cursor до 512 знаков |
limit | строка запроса | integer | До 500 от 1 до 500; по умолчанию 100 |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Страница списка | ItemListResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/items/{id}/reprocess
Переобработать объект
Шаги speech, vision, summary, embedding; без steps переобрабатывается всё, включая подготовку медиа. Зависимые шаги пересчитываются следом.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Параметры
| Имя | Где | Тип | Описание |
|---|---|---|---|
id * | путь | string | id объекта у клиента; в пути — только [A-Za-z0-9._:-], до 191 символа. Другие id — через пакет.до 191 знаков |
Тело запроса
JSON: ReprocessRequest — необязательно. Шаги
| Поле | Тип | Описание |
|---|---|---|
steps | string[] или null | Шаги; без steps переобрабатывается всё, включая подготовку медиа |
Ответы
| Код | Когда | Тело |
|---|---|---|
202 | Переобработка поставлена в очередь | ItemWriteResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
404 | Объект не найден | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
GET /api/v1/items/{id}/subtitles
Субтитры медиа объекта
Файл субтитров WebVTT или SRT по транскрипту речи медиа на позиции media: реплики не длиннее 7 секунд, до 2 строк по 42 знака, короткие реплики объединяются. Ответ 200 — файл в UTF-8 без BOM (Content-Type: text/vtt; charset=utf-8 или application/x-subrip; charset=utf-8, Content-Disposition: inline), ошибки — JSON. Пустой транскрипт (музыка без слов) — файл без реплик; удалённый объект тоже отдаёт субтитры. 404 — нет объекта, медиа на этой позиции или транскрипта (речь ещё распознаётся, не выполняется, завершилась ошибкой, медиа — изображение). 503 с Retry-After: 1 — сейчас собирается слишком много файлов, повторите через секунду. id с символами вне [A-Za-z0-9._:-] субтитры через API не получает: пакетного метода нет.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Параметры
| Имя | Где | Тип | Описание |
|---|---|---|---|
id * | путь | string | id объекта у клиента; в пути — только [A-Za-z0-9._:-], до 191 символа. Другие id — через пакет.до 191 знаков |
media | строка запроса | integer | Позиция медиа в объекте, с 0 (media[].position в GET /items/{id}); по умолчанию 0от 0 до 65535; по умолчанию 0 |
format | строка запроса | string | Формат файла: vtt — WebVTT, srt — SubRip; по умолчанию vttодно из: vtt, srt; по умолчанию vtt |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Файл субтитров | файл WebVTT text/vtt — stringфайл SubRip (SRT) application/x-subrip — string |
400 | Неверный id объекта в пути или параметры `media`, `format` | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
404 | Нет объекта, медиа на этой позиции или транскрипта медиа | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна или сейчас собирается слишком много файлов субтитров; есть Retry-After | ErrorResponse |
Пример ответа 200 · text/vtt
WEBVTT
00:00:01.200 --> 00:00:04.800
Добрый день! Сегодня расскажем,
как выбрать городской велосипед.
Пример ответа 200 · application/x-subrip
1
00:00:01,200 --> 00:00:04,800
Добрый день! Сегодня расскажем,
как выбрать городской велосипед.
События и заказы
- GET
/api/v1/event-types— Типы событий проекта - POST
/api/v1/events— Принять события - POST
/api/v1/orders— Передать заказ - POST
/api/v1/orders/batch— Пакет заказов
GET /api/v1/event-types
Типы событий проекта
Коды, режимы, веса и флаги типов событий. Типы настраиваются в кабинете.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Типы событий | EventTypesResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/events
Принять события
До 1000 событий за запрос. События дедуплицируются по id: повтор отвечает в duplicates и ничего не меняет. Показы (is_impression) не хранятся поштучно, только агрегируются. Отклонённые события перечислены в rejected с кодом: unknown_type, inactive_type, unknown_item, no_user, invalid_user, invalid_value, too_old, order_managed. События по удалённым и недоступным объектам принимаются.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: EventsRequest. События
| Поле | Тип | Описание |
|---|---|---|
events * | EventIn[] | До 1000 событий до 1000 элементов |
Ответы
| Код | Когда | Тело |
|---|---|---|
202 | Пакет обработан | EventsResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/orders
Передать заказ
Заказ раскладывается на события типа «покупка»: строка — событие с id o: + 32 hex SHA-256 от order_id и item. Строки одного товара складываются. Повтор того же order_id заменяет состав: новые строки добавляются, пропавшие отменяются. status=cancelled снимает вклад заказа. Товар вне каталога с title заводится недоступным объектом, без title строка отклоняется unknown_item. Нет типа «покупка» — 422 no_purchase_type.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: OrderIn. Заказ
| Поле | Тип | Описание |
|---|---|---|
order_id * | string | id заказа, до 64 печатных символов ASCII; повтор заменяет состав до 64 знаков |
user * | EndUserIds | Покупатель: хотя бы один из user_id, anonymous_id, fingerprint_uuid |
occurred_at | string или null | Время заказа ISO-8601; по умолчанию — время приёма, при повторе — прежнее время заказа |
status | string или null | cancelled снимает вклад всего заказа одно из: created, cancelled; по умолчанию created |
items | OrderLineIn[] или null | До 200 строк; для cancelled можно не передавать до 200 элементов |
Ответы
| Код | Когда | Тело |
|---|---|---|
202 | Заказ записан | OrderResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/orders/batch
Пакет заказов
До 500 заказов и не больше 5000 строк в сумме — для переноса истории (даты до 730 дней назад). Заказы обрабатываются независимо, ответ — по каждому.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: OrdersBatchRequest. Заказы
| Поле | Тип | Описание |
|---|---|---|
orders * | OrderIn[] | До 500 заказов и не больше 5000 строк в сумме до 500 элементов |
Ответы
| Код | Когда | Тело |
|---|---|---|
202 | Результат по каждому заказу | OrdersBatchResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
Пользователи
- POST
/api/v1/users/link— Склеить анонима с пользователем при входе - GET
/api/v1/users/profile— Прочитать профиль пользователя - POST
/api/v1/users/profile— Записать данные о пользователе - POST
/api/v1/users/profile/batch— Пакет профилей - POST
/api/v1/users/delete— Удалить пользователя
POST /api/v1/users/link
Склеить анонима с пользователем при входе
Переносит историю и данные профиля анонима (найденного по anonymous_id, а если его нет — по неспорному проверенному fingerprint_uuid) в пользователя user_id. Заполненные поля профиля пользователя не перезаписываются. Анонимная история, уже перенесённая одному пользователю, другому не переносится. fingerprint_uuid записывается как вход на устройстве.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: UserLinkRequest. Пользователь и идентификаторы устройства
| Поле | Тип | Описание |
|---|---|---|
user_id * | string | Аккаунт, в который вошёл пользователь до 191 знаков |
anonymous_id | string или null | Браузер или устройство до входа до 191 знаков |
fingerprint_uuid | string или null | visitor_uuid DARA Fingerprint: записывается как вход на устройстве |
analytics_id | string или null | Идентификатор посетителя ДАРА АНАЛИТИКИ (UUID): привязывается к пользователю, в которого идёт склейка |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Результат склейки | UserLinkResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
GET /api/v1/users/profile
Прочитать профиль пользователя
Поля профиля в том виде, в каком их хранит ДАРА, attributes и дата обновления каждого поля — для сверки интеграции. Пользователь ищется без создания и без узнавания; неизвестный — 404. При подключённой ДАРА АНАЛИТИКЕ у найденного в её сети пользователя добавляется блок network: это данные сети, а не данные клиента — они не заменяют поля профиля и не меняются POST /users/profile.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Параметры
| Имя | Где | Тип | Описание |
|---|---|---|---|
user_id | строка запроса | string или null | Аккаунт у клиента |
anonymous_id | строка запроса | string или null | Браузер или устройство |
fingerprint_uuid | строка запроса | string или null | Устройство: visitor_uuid DARA Fingerprint |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Профиль | StoredProfile |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
404 | Пользователь не найден | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/users/profile
Записать данные о пользователе
Что клиент знает о пользователе: пол, год рождения или возраст, город, интересы, любимые и скрытые авторы, отказ от персонализации, произвольные атрибуты. Действия с объектами передаются событиями. Без user_id пишется анонимный профиль, даже если пользователь узнан без входа. Персональные данные в attributes — 422 pii_not_allowed.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: ProfileRequest. Пользователь и поля профиля
| Поле | Тип | Описание |
|---|---|---|
gender | string или null | Пол одно из: male, female |
birth_year | integer или null | От 1900 до текущего года от 1900 |
age | integer или null | Вместо birth_year: пересчитывается в год рождения от 0 до 120 |
interests | string[] или null | До 50 строк до 200 знаков: интересы текстом на любом языке до 50 элементов |
excluded_interests | string[] или null | «Не интересно» до 50 элементов |
followed_authors | string[] или null | id авторов: подписки до 500 элементов |
hidden_authors | string[] или null | id авторов, которых не показывать до 500 элементов |
city | string или null | Хранится в нижнем регистре без лишних пробелов до 100 знаков |
country | string или null | Страна: название или код до 100 знаков |
personalization | boolean или null | false — не персонализировать |
attributes | object или null | Любые данные до 16 КБ, кроме персональных: ключи email, phone, name, first_name, last_name, middle_name, address, birth_date, passport на любой глубине — 422 pii_not_allowed |
user * | EndUserIds | Пользователь: без user_id пишется анонимный профиль |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Профиль записан | ProfileResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/users/profile/batch
Пакет профилей
До 500 профилей в формате POST /users/profile, каждый обрабатывается независимо.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: ProfileBatchRequest. Профили
| Поле | Тип | Описание |
|---|---|---|
profiles * | ProfileRequest[] | До 500 профилей до 500 элементов |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Результат по каждому профилю | ProfileBatchResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/users/delete
Удалить пользователя
Удаляет данные клиента о пользователе, идентификаторы, входы на устройствах, события, заказы, сигналы, профиль, снимки выдачи и данные ДАРА АНАЛИТИКИ о нём — сразу. В самой ДАРА АНАЛИТИКЕ при этом не удаляется ничего. Агрегаты статистики объектов остаются обезличенными.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: UserDeleteRequest. Пользователь
| Поле | Тип | Описание |
|---|---|---|
user * | EndUserIds | Пользователь: хотя бы один идентификатор |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Результат удаления | UserDeleteResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
Рекомендации
- POST
/api/v1/recommendations/feed— Лента рекомендаций - POST
/api/v1/recommendations/similar— Похожие объекты - POST
/api/v1/recommendations/rerank— Переранжировать свои объекты
POST /api/v1/recommendations/feed
Лента рекомендаций
Персональная лента пользователя (mode=personal) или неперсональная по популярному, свежему и текущей сессии (cold). Первая страница (offset = 0) строит выдачу до 500 объектов и сохраняет её снимком на 30 минут; следующие страницы берутся из снимка этого же пользователя — без повторов, даже без recommendation_id. Передавайте одни и те же идентификаторы на всех страницах; первая страница без anonymous_id тоже продолжается. Выдача без user одинакова для всех в течение часа. Удалённые, недоступные и скрытые пользователем объекты не показываются; уже досмотренные — только в конце ленты, когда остальные закончились. Если служба не успевает ответить или индекс проекта загружается — запасная выдача (mode=fallback) по трендовому списку с фильтрами запроса; 503 — только когда отдать нечего.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: FeedRequest — необязательно. Параметры ленты; пустое тело — все параметры по умолчанию
| Поле | Тип | Описание |
|---|---|---|
user | RecommendationUser или null | Пользователь, как в событиях: хотя бы один id. Без user выдача неперсональная и одинакова для всех в течение часа. Передавайте одни и те же id на всех страницах |
limit | integer | Объектов на странице, 1–100 от 1 до 100; по умолчанию 24 |
offset | integer | Смещение, 0–1000. Страницы после первой продолжают тот же список без повторов от 0 до 1000; по умолчанию 0 |
types | string[] или null | Только объекты этих типов: 1–5 разных значений до 5 элементов |
exclude | string[] или null | id объектов, которые не показывать (уже на странице и т. п.), до 500 до 500 элементов |
filters | object или null | Условия по фильтруемым свойствам проекта (настройки выдачи): "in_stock": true — равенство; {"in": [...]} и {"not_in": [...]}; {"gte": 100, "lte": 5000} — для чисел; {"any": [...]} — для свойств-списков. Несколько условий — И. Свойство, не отмеченное фильтруемым, или условие не того типа — 422 с кодом unknown_filter. Нет свойства у объекта — условие не выполнено, кроме not_in |
recommendation_id | string или null | id выдачи первой страницы (ULID). Необязателен: без него страница берётся из последнего снимка этого пользователя с теми же параметрами |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Страница ленты | FeedResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/recommendations/similar
Похожие объекты
Похожие на объект (item) или «дополните заказ» для корзины (items, до 20 id): близкие по содержанию, покупаемые или смотримые вместе, того же автора, по интересам пользователя. Для объекта, неизвестного ДАРА, — популярное (mode=fallback), а не ошибка. Пагинации нет: длина — limit.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: SimilarRequest. Исходные объекты и параметры
| Поле | Тип | Описание |
|---|---|---|
item | string или null | id исходного объекта; объект, неизвестный ДАРА, — популярное, mode=fallbackдо 191 знаков; от 1 знаков |
items | string[] или null | Корзина: до 20 id; неизвестные id не учитываются до 20 элементов |
user | RecommendationUser или null | Пользователь, как в событиях: хотя бы один id. Без user выдача неперсональная и одинакова для всех в течение часа. Передавайте одни и те же id на всех страницах |
limit | integer | Объектов, 1–50 от 1 до 50; по умолчанию 8 |
types | string[] или null | Только объекты этих типов: 1–5 разных значений до 5 элементов |
exclude | string[] или null | id объектов, которые не показывать (уже на странице и т. п.), до 500 до 500 элементов |
filters | object или null | Условия по фильтруемым свойствам проекта (настройки выдачи): "in_stock": true — равенство; {"in": [...]} и {"not_in": [...]}; {"gte": 100, "lte": 5000} — для чисел; {"any": [...]} — для свойств-списков. Несколько условий — И. Свойство, не отмеченное фильтруемым, или условие не того типа — 422 с кодом unknown_filter. Нет свойства у объекта — условие не выполнено, кроме not_in |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Похожие объекты | SimilarResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
POST /api/v1/recommendations/rerank
Переранжировать свои объекты
Упорядочивает переданные id по оценке ленты пользователя, без разнообразия и разведки. В ответе все переданные id: сначала по убыванию оценки, затем в исходном порядке с score: null — неизвестные ДАРА, удалённые, недоступные, без векторов, скрытые пользователем и повторы. Фильтры, скрытые авторы и возраст здесь не применяются. Больше 1000 id — 413.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: RerankRequest. Объекты и пользователь
| Поле | Тип | Описание |
|---|---|---|
user | RecommendationUser или null | Пользователь, как в событиях: хотя бы один id. Без user выдача неперсональная и одинакова для всех в течение часа. Передавайте одни и те же id на всех страницах |
items * | string[] | id объектов, 1–1000; больше — 413 payload_too_largeдо 1000 элементов |
filters | object или null | Принимается для совместимости и не применяется |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Объекты по порядку | RerankResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело больше 5 МБ или больше 1000 id | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
Поиск
- POST
/api/v1/search— Поиск
POST /api/v1/search
Поиск
Поиск по смыслу и словам: находит видео, аудио и тексты по речи, описанию и сводке, в том числе по фразе из середины длинного видео — matches показывает фрагменты со временем, откуда открыть плеер. Первая страница (offset = 0) ищет заново и сохраняет результаты снимком на 30 минут; следующие страницы берутся из снимка этого же пользователя без повторов. Скрытые пользователем объекты и авторы, возрастные ограничения, types и filters применяются. Если вектор запроса сейчас недоступен, порядок строится по словам, а matches пусты. 503 с Retry-After: 1 — поиск перегружен, Retry-After: 2 — служба недоступна.
Авторизация: ключ проекта в заголовке Authorization: Bearer ck_…
Тело запроса
JSON: SearchRequest. Запрос и параметры поиска
| Поле | Тип | Описание |
|---|---|---|
query * | string | Текст запроса: до 500 знаков после схлопывания пробелов и обрезки краёв. Ищется по смыслу (речь, описание и текст объекта, его сводка) и по словам с учётом окончаний; служебные слова не обязательны до 500 знаков; от 1 знаков |
user | RecommendationUser или null | Пользователь, как в событиях: хотя бы один id. Нужен, чтобы не показывать скрытое пользователем и учитывать его интересы; передавайте одни и те же id на всех страницах |
limit | integer | Объектов на странице, 1–50 от 1 до 50; по умолчанию 20 |
offset | integer | Смещение, 0–500. Страницы после первой продолжают тот же список без повторов от 0 до 500; по умолчанию 0 |
types | string[] или null | Только объекты этих типов: 1–5 разных значений до 5 элементов |
filters | object или null | Условия по фильтруемым свойствам проекта, как в ленте: "in_stock": true — равенство; {"in": [...]} и {"not_in": [...]}; {"gte": 100, "lte": 5000} — для чисел; {"any": [...]} — для свойств-списков. Несколько условий — И. Свойство, не отмеченное фильтруемым, или условие не того типа — 422 с кодом unknown_filter |
recommendation_id | string или null | id результатов первой страницы (ULID). Необязателен: без него страница берётся из последнего поиска этого пользователя с тем же запросом и параметрами |
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Страница результатов поиска | SearchResponse |
400 | Неверный JSON или параметры | ErrorResponse |
401 | Нет ключа, ключ неверен или отозван | ErrorResponse |
403 | Клиент заблокирован или проект в архиве | ErrorResponse |
413 | Тело или пакет больше лимита | ErrorResponse |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
Вебхуки
- POST
item.processed— Обработка завершена - POST
item.failed— Обработка завершилась с ошибкой - POST
webhook.test— Проверка вебхука
POST item.processed
Обработка завершена
Объект перешёл в статус ready: все применимые шаги анализа завершены. Приходит при каждой новой обработке объекта, завершившейся статусом ready. Тело и подпись формируются заново на каждую попытку; редиректы не выполняются; доставка «не меньше одного раза» — повторы отбрасывайте по delivery_id.
Запрос от ДАРА на ваш адрес, подпись — X-Core-Signature
Заголовки
| Имя | Где | Тип | Описание |
|---|---|---|---|
X-Core-Event * | заголовок | string | Событие — то же, что поле event тела |
X-Core-Timestamp * | заголовок | string | Время начала попытки, unix-секунды; входит в подпись. Запросы со старой отметкой можно отклонять |
X-Core-Signature * | заголовок | string | Подпись: sha256= и hex HMAC-SHA256 от X-Core-Timestamp, точки и сырого тела запроса; ключ — секрет вебхука целиком (whsec_…). Сравнивайте в постоянное время |
X-Core-Delivery * | заголовок | string | Идентификатор доставки — тот же, что поле delivery_id тела; одинаков у всех попыток |
Тело запроса
JSON: WebhookPayload
| Поле | Тип | Описание |
|---|---|---|
event * | string | Событие: item.processed — обработка завершена; item.failed — обработка завершилась с ошибкой; webhook.test — проверка из кабинета. Совпадает с заголовком X-Core-Event одно из: item.processed, item.failed, webhook.test |
project_id * | string | Идентификатор проекта — как в кабинете, 12 символов |
sent_at * | string (date-time) | Время начала этой попытки, ISO-8601 UTC с миллисекундами; у каждой попытки своё |
delivery_id * | string | Идентификатор доставки: одинаков у всех попыток одного события и равен заголовку X-Core-Delivery — по нему отбрасываются повторы |
item * | WebhookItem | Объект, статус которого изменился |
Ответы
| Код | Когда | Тело |
|---|---|---|
2XX | Доставлено: любой ответ 2xx не позже 10 с | — |
default | Любой другой ответ или нет ответа за 10 с — повтор по расписанию: через 1 мин, 5 мин, 30 мин, 2 ч, 6 ч, 12 ч, затем доставка отмечается неудачной | — |
POST item.failed
Обработка завершилась с ошибкой
Объект перешёл в статус partial (часть шагов с ошибкой, объект участвует в выдаче) или failed (объект не обработан); статус — в item.status. Одно событие на смену статуса, а не на каждый шаг. Тело и подпись формируются заново на каждую попытку; редиректы не выполняются; доставка «не меньше одного раза» — повторы отбрасывайте по delivery_id.
Запрос от ДАРА на ваш адрес, подпись — X-Core-Signature
Заголовки
| Имя | Где | Тип | Описание |
|---|---|---|---|
X-Core-Event * | заголовок | string | Событие — то же, что поле event тела |
X-Core-Timestamp * | заголовок | string | Время начала попытки, unix-секунды; входит в подпись. Запросы со старой отметкой можно отклонять |
X-Core-Signature * | заголовок | string | Подпись: sha256= и hex HMAC-SHA256 от X-Core-Timestamp, точки и сырого тела запроса; ключ — секрет вебхука целиком (whsec_…). Сравнивайте в постоянное время |
X-Core-Delivery * | заголовок | string | Идентификатор доставки — тот же, что поле delivery_id тела; одинаков у всех попыток |
Тело запроса
JSON: WebhookPayload
| Поле | Тип | Описание |
|---|---|---|
event * | string | Событие: item.processed — обработка завершена; item.failed — обработка завершилась с ошибкой; webhook.test — проверка из кабинета. Совпадает с заголовком X-Core-Event одно из: item.processed, item.failed, webhook.test |
project_id * | string | Идентификатор проекта — как в кабинете, 12 символов |
sent_at * | string (date-time) | Время начала этой попытки, ISO-8601 UTC с миллисекундами; у каждой попытки своё |
delivery_id * | string | Идентификатор доставки: одинаков у всех попыток одного события и равен заголовку X-Core-Delivery — по нему отбрасываются повторы |
item * | WebhookItem | Объект, статус которого изменился |
Ответы
| Код | Когда | Тело |
|---|---|---|
2XX | Доставлено: любой ответ 2xx не позже 10 с | — |
default | Любой другой ответ или нет ответа за 10 с — повтор по расписанию: через 1 мин, 5 мин, 30 мин, 2 ч, 6 ч, 12 ч, затем доставка отмечается неудачной | — |
POST webhook.test
Проверка вебхука
Кнопка «Отправить тест» в кабинете: одна попытка без повторов, item.id — «webhook-test», статус ready. Подпись — как у остальных событий.
Запрос от ДАРА на ваш адрес, подпись — X-Core-Signature
Заголовки
| Имя | Где | Тип | Описание |
|---|---|---|---|
X-Core-Event * | заголовок | string | Событие — то же, что поле event тела |
X-Core-Timestamp * | заголовок | string | Время начала попытки, unix-секунды; входит в подпись. Запросы со старой отметкой можно отклонять |
X-Core-Signature * | заголовок | string | Подпись: sha256= и hex HMAC-SHA256 от X-Core-Timestamp, точки и сырого тела запроса; ключ — секрет вебхука целиком (whsec_…). Сравнивайте в постоянное время |
X-Core-Delivery * | заголовок | string | Идентификатор доставки — тот же, что поле delivery_id тела; одинаков у всех попыток |
Тело запроса
JSON: WebhookPayload
| Поле | Тип | Описание |
|---|---|---|
event * | string | Событие: item.processed — обработка завершена; item.failed — обработка завершилась с ошибкой; webhook.test — проверка из кабинета. Совпадает с заголовком X-Core-Event одно из: item.processed, item.failed, webhook.test |
project_id * | string | Идентификатор проекта — как в кабинете, 12 символов |
sent_at * | string (date-time) | Время начала этой попытки, ISO-8601 UTC с миллисекундами; у каждой попытки своё |
delivery_id * | string | Идентификатор доставки: одинаков у всех попыток одного события и равен заголовку X-Core-Delivery — по нему отбрасываются повторы |
item * | WebhookItem | Объект, статус которого изменился |
Ответы
| Код | Когда | Тело |
|---|---|---|
2XX | Доставлено: любой ответ 2xx не позже 10 с | — |
default | Любой другой ответ или нет ответа за 10 с — повтор по расписанию: через 1 мин, 5 мин, 30 мин, 2 ч, 6 ч, 12 ч, затем доставка отмечается неудачной | — |
Служебное
- GET
/api/v1/health— Состояние службы
GET /api/v1/health
Состояние службы
Отвечает ok или degraded (БД недоступна, очередь анализа перегружена, индекс выдачи не обновляется или таблицы кусков поиска не загружаются). Авторизация не нужна.
Без авторизации
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Состояние | HealthResponse |
Схемы
BatchError
| Поле | Тип | Описание |
|---|---|---|
code * | string | Код ошибки, как в ответе с ошибкой: validation_failed, not_found, internal |
message * | string | Текст ошибки по-русски |
details | ErrorDetail[] или null | Ошибки по полям |
Пример
{
"code": "not_found",
"message": "Объект не найден"
}
BatchOperation
| Поле | Тип | Описание |
|---|---|---|
op * | string | Операция: как PUT, PATCH или DELETE /items/{id} одно из: put, patch, delete |
id * | string | id объекта — до 191 символа Unicode до 191 знаков; от 1 знаков |
data | object или null | Тело PUT или PATCH; для delete не нужно |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"data": {
"available": false
},
"id": "def",
"op": "patch"
}
BatchRequest
| Поле | Тип | Описание |
|---|---|---|
operations * | BatchOperation[] | До 500 операций, выполняются по порядку и независимо до 500 элементов |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"operations": [
{
"data": {
"title": "Заметка",
"type": "text"
},
"id": "abc",
"op": "put"
},
{
"data": {
"available": false
},
"id": "def",
"op": "patch"
},
{
"id": "old-1",
"op": "delete"
}
]
}
BatchResponse
| Поле | Тип | Описание |
|---|---|---|
results * | BatchResult[] | Результаты в порядке операций |
Пример
{
"results": [
{
"id": "abc",
"ok": true,
"status": "queued"
},
{
"error": {
"code": "not_found",
"message": "Объект не найден"
},
"id": "def",
"ok": false
}
]
}
BatchResult
| Поле | Тип | Описание |
|---|---|---|
id * | string или null | id объекта из операции; null, если он не строка |
ok * | boolean | Операция выполнена |
status | string или null | Статус объекта после put или patch одно из: queued, processing, ready, partial, failed, deferred |
error | BatchError или null | Ошибка операции, если ok = false |
Пример
{
"id": "abc",
"ok": true,
"status": "queued"
}
EndUserIds
Идентификаторы конечного пользователя (ТЗ §8): хотя бы одно поле.
| Поле | Тип | Описание |
|---|---|---|
user_id | string или null | Аккаунт у клиента, до 191 символа Unicode до 191 знаков |
anonymous_id | string или null | Браузер или устройство: до 191 печатного символа ASCII до 191 знаков |
fingerprint_uuid | string или null | visitor_uuid DARA Fingerprint (UUID); учитывается только при подключённом DARA Fingerprint |
analytics_id | string или null | Идентификатор посетителя ДАРА АНАЛИТИКИ (UUID, значение её cookie _dara_a): привязывается к пользователю запроса, но сам пользователя не определяет |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"anonymous_id": "b7f3c9",
"user_id": "u-42"
}
ErrorDetail
Ошибка одного поля или параметра.
| Поле | Тип | Описание |
|---|---|---|
field * | string | Поле тела (media[0].url, events[3].occurred_at) или параметр запроса |
code * | string | Код ошибки поля: required, invalid_type, invalid_value, too_long, unknown_field, unknown_filter, pii_not_allowed и другие |
message * | string | Пояснение по-русски |
Пример
{
"code": "invalid_url",
"field": "media[0].url",
"message": "допустим только адрес https"
}
ErrorInfo
| Поле | Тип | Описание |
|---|---|---|
code * | string | Код ошибки: invalid_request, unauthorized, forbidden, not_found, payload_too_large, validation_failed, rate_limited, internal, unavailable |
message * | string | Текст ошибки по-русски |
details | ErrorDetail[] или null | Ошибки по полям или параметрам; только у 400 и 422 |
ErrorResponse
| Поле | Тип | Описание |
|---|---|---|
error * | ErrorInfo | Ошибка: код, текст и ошибки по полям |
Пример
{
"error": {
"code": "validation_failed",
"details": [
{
"code": "invalid_url",
"field": "media[0].url",
"message": "допустим только адрес https"
}
],
"message": "Поля не прошли проверку"
}
}
EventIn
| Поле | Тип | Описание |
|---|---|---|
id * | string | Уникальный id события в проекте, до 64 печатных символов ASCII; повтор — дубль до 64 знаков |
type * | string | Код типа события проекта (GET /event-types) |
item * | string | id объекта до 191 знаков |
user * | EndUserIds | Пользователь: хотя бы один из user_id, anonymous_id, fingerprint_uuid |
value | number или null | percent — 0…100; watch_seconds — секунды просмотра ≥ 0; number — любое число; для состояний 1 или 0 (по умолчанию 1); у типов без значения не учитывается |
occurred_at | string или null | Время события ISO-8601 с Z; по умолчанию — время приёма. Больше чем на 5 минут в будущем — время приёма; старше 730 дней — отказ too_old |
recommendation_id | string или null | id выдачи, из которой пришёл пользователь |
surface | string или null | Место показа: feed, next, … до 16 знаков |
position | integer или null | Позиция в выдаче, с 0 от 0 до 65535 |
order_id | string или null | Заказ: строки одного заказа образуют пары «вместе» до 64 знаков |
quantity | number или null | Количество в строке заказа от 0 |
price | number или null | Цена за единицу от 0 |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"id": "evt-1001",
"item": "v-123",
"occurred_at": "2026-09-14T12:00:00.250Z",
"position": 3,
"recommendation_id": "01J8Z3K4M5N6P7Q8R9S0T1V2W3",
"surface": "feed",
"type": "watch",
"user": {
"user_id": "u-42"
},
"value": 184
}
EventRejection
| Поле | Тип | Описание |
|---|---|---|
index * | integer | Номер события в запросе, с 0 |
id * | string или null | id события, если он строка |
code * | string | Причина: unknown_type — нет такого типа; inactive_type — тип выключен; unknown_item — нет объекта; no_user — пользователь не определён; invalid_user — неверные идентификаторы; invalid_value — неверное значение поля; too_old — старше 730 дней; order_managed — покупка по заказу передаётся через POST /ordersодно из: unknown_type, inactive_type, unknown_item, no_user, invalid_user, invalid_value, too_old, order_managed |
EventTypeOut
| Поле | Тип | Описание |
|---|---|---|
code * | string | Код типа: поле type события |
title * | string | Название типа |
mode * | string | fact — факты с окном дедупликации; max — наибольшее значение; state — последнее значение одно из: fact, max, state |
weight * | number | Вес в профиле; может быть отрицательным |
value_kind * | string | Значение события: none — без значения; number — число; percent — 0…100; watch_seconds — секунды просмотраодно из: none, number, percent, watch_seconds |
value_map * | object или null | Пороги множителя по вовлечённости |
dedup_window_sec * | integer | Окно дедупликации для fact, секунды |
suppress_similar_days * | integer | Сколько дней после события не показывать объект и похожие |
is_impression * | boolean | Показ: не хранится поштучно, только агрегируется |
is_open * | boolean | Открытие объекта: считается в метриках открытий |
is_goal * | boolean | Целевое действие: считается в метриках целей |
is_purchase * | boolean | Покупка: строки заказов POST /orders пишутся этим типом |
hides_item * | boolean | Скрывает объект из выдачи пользователя |
is_active * | boolean | Тип включён; события выключенного типа отклоняются inactive_type |
EventTypesResponse
Тип: EventTypeOut[]
Пример
[
{
"code": "view",
"dedup_window_sec": 86400,
"hides_item": false,
"is_active": true,
"is_goal": false,
"is_impression": false,
"is_open": true,
"is_purchase": false,
"mode": "fact",
"suppress_similar_days": 0,
"title": "Открытие",
"value_kind": "none",
"weight": 0.2
}
]
EventsRequest
| Поле | Тип | Описание |
|---|---|---|
events * | EventIn[] | До 1000 событий до 1000 элементов |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"events": [
{
"id": "evt-1001",
"item": "v-123",
"occurred_at": "2026-09-14T12:00:00Z",
"position": 0,
"recommendation_id": "01J8Z3K4M5N6P7Q8R9S0T1V2W3",
"surface": "feed",
"type": "impression",
"user": {
"user_id": "u-42"
}
},
{
"id": "evt-1002",
"item": "v-123",
"occurred_at": "2026-09-14T12:00:03Z",
"position": 0,
"recommendation_id": "01J8Z3K4M5N6P7Q8R9S0T1V2W3",
"surface": "feed",
"type": "view",
"user": {
"user_id": "u-42"
}
},
{
"id": "evt-1003",
"item": "v-123",
"occurred_at": "2026-09-14T12:03:07.250Z",
"type": "watch",
"user": {
"user_id": "u-42"
},
"value": 184
},
{
"id": "evt-1004",
"item": "v-77",
"type": "like",
"user": {
"anonymous_id": "b7f3c9"
},
"value": 1
}
]
}
EventsResponse
| Поле | Тип | Описание |
|---|---|---|
accepted * | integer | Принято новых событий |
duplicates * | integer | Уже присланные ранее (по id) — не учитываются повторно |
rejected * | EventRejection[] | Отклонённые события с причиной |
Пример
{
"accepted": 998,
"duplicates": 1,
"rejected": [
{
"code": "unknown_item",
"id": "evt-1018",
"index": 17
}
]
}
FeedItem
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта у клиента |
score * | number | Оценка объекта, 4 знака; в fallback — трендовость или популярность объекта |
reason * | string | Почему объект в выдаче: interest — интересы; session — текущая сессия; together — вместе с понравившимся; author — близкий автор; trending — в тренде; fresh — новое; popular — популярное; segment — популярное у похожих пользователейодно из: interest, session, together, author, trending, fresh, popular, segment |
FeedRequest
Лента: первая страница (offset = 0) строит новую выдачу, следующие берутся из снимка выдачи.
| Поле | Тип | Описание |
|---|---|---|
user | RecommendationUser или null | Пользователь, как в событиях: хотя бы один id. Без user выдача неперсональная и одинакова для всех в течение часа. Передавайте одни и те же id на всех страницах |
limit | integer | Объектов на странице, 1–100 от 1 до 100; по умолчанию 24 |
offset | integer | Смещение, 0–1000. Страницы после первой продолжают тот же список без повторов от 0 до 1000; по умолчанию 0 |
types | string[] или null | Только объекты этих типов: 1–5 разных значений до 5 элементов |
exclude | string[] или null | id объектов, которые не показывать (уже на странице и т. п.), до 500 до 500 элементов |
filters | object или null | Условия по фильтруемым свойствам проекта (настройки выдачи): "in_stock": true — равенство; {"in": [...]} и {"not_in": [...]}; {"gte": 100, "lte": 5000} — для чисел; {"any": [...]} — для свойств-списков. Несколько условий — И. Свойство, не отмеченное фильтруемым, или условие не того типа — 422 с кодом unknown_filter. Нет свойства у объекта — условие не выполнено, кроме not_in |
recommendation_id | string или null | id выдачи первой страницы (ULID). Необязателен: без него страница берётся из последнего снимка этого пользователя с теми же параметрами |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"exclude": [
"v-17"
],
"filters": {
"category": {
"in": [
"sport",
"travel"
]
}
},
"limit": 24,
"offset": 0,
"user": {
"anonymous_id": "b7f3c9",
"user_id": "u-42"
}
}
FeedResponse
| Поле | Тип | Описание |
|---|---|---|
recommendation_id * | string | id выдачи (ULID): передавайте в событиях показа, открытия и цели |
items * | FeedItem[] | Объекты по порядку; страница может быть короче limit, если объекты успели удалить или скрыть |
has_more * | boolean | Есть ли следующая страница: offset + limit меньше длины выдачи |
mode * | string | personal — по профилю пользователя; cold — по популярному, свежему и текущей сессии; fallback — запасная выдача (служба не успела или индекс проекта загружается)одно из: personal, cold, fallback |
identity * | string | Как определён пользователь: user — по user_id; recognized — узнан без входа (DARA Fingerprint); anonymous — по anonymous_id или fingerprint_uuid; none — без userодно из: user, recognized, anonymous, none |
Пример
{
"has_more": true,
"identity": "user",
"items": [
{
"id": "v-123",
"reason": "interest",
"score": 0.8123
},
{
"id": "v-77",
"reason": "trending",
"score": 0.6402
}
],
"mode": "personal",
"recommendation_id": "01J8Z3K4M5N6P7Q8R9S0T1V2W3"
}
FrameOut
| Поле | Тип | Описание |
|---|---|---|
media_position * | integer | Позиция медиа в объекте, с 0 |
ts * | number | Время кадра, секунды |
duplicate_of_ts | number или null | Время исходного кадра, если это дубль |
description | string или null | Описание кадра |
tags | string[] или null | Метки кадра |
ocr_text | string или null | Текст на кадре |
safety | object или null | Оценки безопасности кадра 0…1 по категориям |
image_url | string или null | Подписанная ссылка на 1 час |
HealthResponse
| Поле | Тип | Описание |
|---|---|---|
status * | string | ok — служба работает; degraded — БД недоступна, очередь анализа перегружена, индекс выдачи или таблицы поиска не обновляютсяодно из: ok, degraded |
Пример
{
"status": "ok"
}
ItemDeleteResponse
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта у клиента |
deleted * | boolean | Всегда true |
Пример
{
"deleted": true,
"id": "abc"
}
ItemDetail
Объект с результатами анализа; transcript, frames, search_chunks — только по include.
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта у клиента |
type * | string | Тип объекта одно из: video, image, audio, text, mixed |
title | string или null | Заголовок |
description | string или null | Описание |
author | string или null | id автора у клиента |
url | string или null | Ссылка на объект на сайте клиента |
published_at | string или null | Время публикации, ISO-8601 с Z |
properties | object или null | Свойства, как прислал клиент |
origin * | string | Откуда объект: api, import — файл импорта, order — товар вне каталога из заказаодно из: api, import, order |
available * | boolean | Можно ли показывать объект в выдаче |
deleted * | boolean | Объект удалён (результаты анализа сохраняются) |
status * | string | Статус объекта: queued — в очереди, processing — обрабатывается, ready — готов, partial — готов частично (часть шагов с ошибкой), failed — ошибка, deferred — анализ медиа отложен до available: trueодно из: queued, processing, ready, partial, failed, deferred |
processing * | Processing | Состояние шагов анализа |
updated_at * | string | Время последнего изменения, ISO-8601 с миллисекундами |
media * | MediaOut[] | Медиа по порядку |
summary | SummaryOut или null | Сводка; null — ещё нет или не выполняется |
transcript | TranscriptOut[] или null | При include=transcript |
frames | FrameOut[] или null | При include=frames |
search_chunks | SearchChunkOut[] или null | При include=search_chunks |
Пример
{
"author": "channel-42",
"available": true,
"deleted": false,
"description": "Обзор городских моделей",
"id": "v-123",
"media": [
{
"duration_sec": 312.48,
"height": 1080,
"kind": "video",
"position": 0,
"status": "ready",
"url": "https://cdn.example.ru/v-123.mp4",
"width": 1920
}
],
"origin": "api",
"processing": {
"embedding": "done",
"prepare": "done",
"speech": "done",
"summary": "done",
"vision": "done"
},
"properties": {
"category": "sport"
},
"published_at": "2026-09-14T12:00:00Z",
"status": "ready",
"summary": {
"age_rating": "0+",
"description": "Обзор городских велосипедов: рама, передачи, тормоза.",
"entities": [
{
"name": "Москва",
"type": "place"
}
],
"language": "ru",
"moderation": {
"categories": {
"adult": 0,
"drugs": 0,
"extremism": 0,
"gambling": 0,
"gore": 0,
"hate": 0,
"self_harm": 0,
"spam": 0.01,
"violence": 0,
"weapons": 0
},
"evidence": [],
"level": "none"
},
"summary": "Ведущий сравнивает городские велосипеды и объясняет, как подобрать раму по росту.",
"tags": [
"велосипед",
"обзор",
"рама",
"передачи",
"тормоза"
],
"topics": [
"велосипеды",
"городской транспорт",
"выбор снаряжения"
]
},
"title": "Как выбрать велосипед",
"transcript": [
{
"language": "ru",
"media_position": 0,
"segments": [
{
"end": 4.8,
"start": 1.2,
"text": "Добрый день! Сегодня расскажем, как выбрать городской велосипед."
}
],
"text": "Добрый день! Сегодня расскажем, как выбрать городской велосипед.",
"timestamps": "model"
}
],
"type": "video",
"updated_at": "2026-09-14T12:06:41.512Z",
"url": "https://example.ru/v/v-123"
}
ItemListEntry
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта у клиента |
status * | string | Статус объекта одно из: queued, processing, ready, partial, failed, deferred |
available * | boolean | Можно ли показывать объект в выдаче |
deleted * | boolean | Объект удалён |
updated_at * | string | Время последнего изменения, ISO-8601 с миллисекундами |
ItemListResponse
| Поле | Тип | Описание |
|---|---|---|
items * | ItemListEntry[] | Объекты страницы по возрастанию updated_at |
next_cursor * | string или null | Курсор следующей страницы; null — страниц больше нет |
Пример
{
"items": [
{
"available": true,
"deleted": false,
"id": "abc",
"status": "ready",
"updated_at": "2026-09-14T12:00:00.123Z"
}
]
}
ItemPatchRequest
Частичное обновление: переданные поля заменяются, null очищает поле, кроме media и available; type не меняется.
| Поле | Тип | Описание |
|---|---|---|
title | string или null | Заголовок; null очищает до 1000 знаков |
description | string или null | Описание; null очищает до 20000 знаков |
body | string или null | Основной текст; null очищает до 1000000 знаков |
author | string или null | id автора у клиента; null очищает до 191 знаков |
url | string или null | Ссылка на объект на сайте клиента; null очищает до 2048 знаков |
published_at | string или null | Время публикации ISO-8601; null — время создания |
properties | object или null | Произвольные свойства целиком, до 16 КБ; null очищает |
media | MediaIn[] | Новый список медиа целиком, по порядку; null не принимается до 50 элементов |
available | boolean | Можно ли показывать объект в выдаче; null не принимается |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"available": false
}
ItemPutRequest
Объект целиком. Непереданные поля очищаются.
| Поле | Тип | Описание |
|---|---|---|
type * | string | Тип объекта одно из: video, image, audio, text, mixed |
title | string или null | Заголовок до 1000 знаков |
description | string или null | Описание до 20000 знаков |
body | string или null | Основной текст (статья, пост) до 1000000 знаков |
author | string или null | id автора у клиента: близость к автору и разнообразие выдачи до 191 знаков |
url | string или null | Ссылка на объект на сайте клиента до 2048 знаков |
published_at | string или null | Время публикации ISO-8601; по умолчанию — время создания |
properties | object или null | Произвольные свойства до 16 КБ; фильтруемые свойства проекта — объявленного типа |
media | MediaIn[] или null | Медиа по порядку. Для video, image, audio обязательно хотя бы одно медиа своего вида; у text медиа нет до 50 элементов |
available | boolean | Можно ли показывать объект в выдаче; null не принимается по умолчанию true |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"author": "channel-42",
"available": true,
"description": "Обзор городских моделей",
"media": [
{
"kind": "video",
"url": "https://cdn.example.ru/abc.mp4",
"version": "1"
}
],
"properties": {
"category": "sport"
},
"published_at": "2026-09-14T12:00:00Z",
"title": "Как выбрать велосипед",
"type": "video",
"url": "https://example.ru/v/abc"
}
ItemWriteResponse
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта у клиента |
status * | string | Статус объекта: queued — в очереди, processing — обрабатывается, ready — готов, partial — готов частично (часть шагов с ошибкой), failed — ошибка, deferred — анализ медиа отложен до available: trueодно из: queued, processing, ready, partial, failed, deferred |
available * | boolean | Можно ли показывать объект в выдаче |
deleted * | boolean | Объект удалён |
processing * | Processing | Состояние шагов анализа |
Пример
{
"available": true,
"deleted": false,
"id": "abc",
"processing": {
"embedding": "queued",
"prepare": "queued",
"speech": "queued",
"summary": "queued",
"vision": "queued"
},
"status": "queued"
}
MediaIn
| Поле | Тип | Описание |
|---|---|---|
kind * | string | Вид медиа одно из: video, audio, image |
url * | string | Адрес https, откуда ДАРА заберёт медиа: файл целиком или плейлист HLS (.m3u8, с 4.0.4)до 2048 знаков |
version | string или null | Версия от клиента: изменилась — медиа переобрабатывается до 64 знаков |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"kind": "video",
"url": "https://cdn.example.ru/abc.mp4",
"version": "1"
}
MediaOut
| Поле | Тип | Описание |
|---|---|---|
position * | integer | Позиция медиа в объекте, с 0 (параметр media субтитров) |
kind * | string | Вид медиа одно из: video, audio, image |
url * | string | Адрес медиа, присланный клиентом |
duration_sec | number или null | Длительность видео или аудио, секунды |
width | integer или null | Ширина кадра или изображения, пиксели |
height | integer или null | Высота кадра или изображения, пиксели |
status * | string | new — ещё не подготовлено, ready — подготовлено, failed — не удалось загрузить или прочитатьодно из: new, ready, failed |
Пример
{
"duration_sec": 312.48,
"height": 1080,
"kind": "video",
"position": 0,
"status": "ready",
"url": "https://cdn.example.ru/abc.mp4",
"width": 1920
}
Moderation
| Поле | Тип | Описание |
|---|---|---|
level | string или null | Уровень риска по наибольшей оценке категорий одно из: none, low, medium, high |
categories | object или null | Оценки 0…1 по категориям: adult, violence, gore, weapons, drugs, extremism, hate, self_harm, gambling, spam |
evidence | object[] или null | Доказательства, до 10: {source: speech|frame|text, ts, quote, category} |
NetworkChild
| Поле | Тип | Описание |
|---|---|---|
age_group * | string | Возрастная группа ребёнка одно из: 0_2, 3_6, 7_10, 11_13, 14_17 |
NetworkCompany
| Поле | Тип | Описание |
|---|---|---|
type * | string | legal — организация, individual — предпринимательодно из: legal, individual |
industry * | string или null | Отрасль организации |
region * | string или null | Регион организации: её адрес, а не место человека |
NetworkData
| Поле | Тип | Описание |
|---|---|---|
status * | string | found — человек найден в сети ДАРА АНАЛИТИКИвсегда found |
gender | string или null | Пол по данным сети одно из: male, female |
gender_confidence | number или null | Уверенность в поле, от 0 до 1 |
age_group | string или null | Возрастная группа: lt14, 14_17, 18_24, 25_34, 35_44, 45_54, 55_64 или 65p; года рождения в данных сети нет |
country | string или null | Страна кодом ISO 3166-1 alpha-2 |
region | string или null | Регион в нижнем регистре |
city | string или null | Город в нижнем регистре |
children | NetworkChild[] или null | Возрастные группы детей |
company | NetworkCompany или null | Организация человека |
interests | NetworkInterest[] или null | Темы интересов по убыванию доли |
purchases | NetworkPurchase[] или null | Категории покупок |
checked_at * | string | Когда данные сети проверялись в последний раз |
Пример
{
"age_group": "25_34",
"checked_at": "2026-09-24T10:00:00Z",
"children": [
{
"age_group": "3_6"
}
],
"city": "нижний новгород",
"company": {
"industry": "Торговля",
"region": "Москва",
"type": "legal"
},
"country": "RU",
"gender": "female",
"gender_confidence": 0.95,
"interests": [
{
"path": "Дом > Ремонт",
"sensitive": false,
"share": 0.6,
"topic_id": 11
}
],
"purchases": [
{
"category_id": 5,
"path": "Дом > Мебель",
"segment": "mid"
}
],
"region": "нижегородская область",
"status": "found"
}
NetworkInterest
| Поле | Тип | Описание |
|---|---|---|
topic_id * | integer | id темы в справочнике ДАРА АНАЛИТИКИ |
path * | string | Путь темы в справочнике |
share * | number | Доля темы среди интересов человека |
sensitive * | boolean | Чувствительная тема: такие не отдаются, пока ДАРА АНАЛИТИКА не разрешила передачу |
NetworkPurchase
| Поле | Тип | Описание |
|---|---|---|
category_id * | integer | id категории в справочнике ДАРА АНАЛИТИКИ |
path * | string | Путь категории в справочнике |
segment * | string или null | Ценовой сегмент покупок в категории одно из: low, mid, high |
OrderIn
| Поле | Тип | Описание |
|---|---|---|
order_id * | string | id заказа, до 64 печатных символов ASCII; повтор заменяет состав до 64 знаков |
user * | EndUserIds | Покупатель: хотя бы один из user_id, anonymous_id, fingerprint_uuid |
occurred_at | string или null | Время заказа ISO-8601; по умолчанию — время приёма, при повторе — прежнее время заказа |
status | string или null | cancelled снимает вклад всего заказа одно из: created, cancelled; по умолчанию created |
items | OrderLineIn[] или null | До 200 строк; для cancelled можно не передавать до 200 элементов |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"items": [
{
"item": "sku-1",
"price": 990,
"quantity": 2
},
{
"item": "sku-2",
"price": 450
},
{
"item": "sku-new",
"properties": {
"brand": "Дом"
},
"title": "Кружка керамическая"
}
],
"occurred_at": "2026-09-14T12:00:00Z",
"order_id": "A-100500",
"user": {
"user_id": "u-42"
}
}
OrderLineIn
| Поле | Тип | Описание |
|---|---|---|
item * | string | id объекта (товара) до 191 знаков |
quantity | number или null | Количество, по умолчанию 1 |
price | number или null | Цена за единицу от 0 |
title | string или null | Название: товара нет в каталоге — заводится недоступный объект до 1000 знаков |
properties | object или null | Свойства для такого объекта, до 16 КБ |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
OrderLineRejection
| Поле | Тип | Описание |
|---|---|---|
index * | integer | Номер строки в items, с 0 |
item * | string или null | id объекта строки, если он строка |
code * | string | unknown_item — товара нет в каталоге и нет title; invalid_value — неверное значение строкиодно из: unknown_item, invalid_value |
OrderResponse
| Поле | Тип | Описание |
|---|---|---|
order_id * | string | id заказа |
accepted * | integer | Принято строк |
rejected * | OrderLineRejection[] | Отклонённые строки с причиной |
Пример
{
"accepted": 2,
"order_id": "A-100500",
"rejected": [
{
"code": "unknown_item",
"index": 2,
"item": "sku-x"
}
]
}
OrdersBatchRequest
| Поле | Тип | Описание |
|---|---|---|
orders * | OrderIn[] | До 500 заказов и не больше 5000 строк в сумме до 500 элементов |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"orders": [
{
"items": [
{
"item": "sku-1",
"price": 990,
"quantity": 2
},
{
"item": "sku-2",
"price": 450
}
],
"occurred_at": "2026-03-02T09:15:00Z",
"order_id": "A-100500",
"user": {
"user_id": "u-42"
}
},
{
"items": [
{
"item": "sku-2",
"price": 450,
"quantity": 1
},
{
"item": "sku-archive-7",
"price": 1290,
"title": "Термос 0,5 л"
}
],
"occurred_at": "2026-03-05T18:40:00Z",
"order_id": "A-100501",
"user": {
"user_id": "u-43"
}
},
{
"occurred_at": "2026-02-11T10:00:00Z",
"order_id": "A-100377",
"status": "cancelled",
"user": {
"user_id": "u-42"
}
}
]
}
OrdersBatchResponse
| Поле | Тип | Описание |
|---|---|---|
results * | OrdersBatchResult[] | Результаты в порядке заказов |
Пример
{
"results": [
{
"accepted": 3,
"index": 0,
"ok": true,
"order_id": "A-1",
"rejected": []
},
{
"error": {
"code": "validation_failed",
"details": [
{
"code": "too_old",
"field": "occurred_at",
"message": "заказ старше 730 дней"
}
],
"message": "Поля не прошли проверку"
},
"index": 1,
"ok": false,
"order_id": "A-2"
}
]
}
OrdersBatchResult
| Поле | Тип | Описание |
|---|---|---|
index * | integer | Номер заказа в запросе, с 0 |
order_id * | string или null | id заказа, если он строка |
ok * | boolean | Заказ записан |
accepted | integer или null | Принято строк, если ok = true |
rejected | OrderLineRejection[] или null | Отклонённые строки, если ok = true |
error | BatchError или null | Ошибка заказа, если ok = false |
Processing
Состояние публичных шагов анализа.
| Поле | Тип | Описание |
|---|---|---|
prepare * | string | Подготовка медиа: загрузка, проверка, звук и кадры. queued, running, done, skipped (шаг не нужен или отключён), failed, deferred (отложен до available: true), waiting (ждёт лимита, модели или внешней службы)одно из: queued, running, done, skipped, failed, deferred, waiting |
speech * | string | Распознавание речи одно из: queued, running, done, skipped, failed, deferred, waiting |
vision * | string | Анализ кадров одно из: queued, running, done, skipped, failed, deferred, waiting |
summary * | string | Сводка: описание, темы, теги, модерация одно из: queued, running, done, skipped, failed, deferred, waiting |
embedding * | string | Векторы для выдачи и поиска; пока не готовы куски поиска — их состояние одно из: queued, running, done, skipped, failed, deferred, waiting |
Пример
{
"embedding": "done",
"prepare": "done",
"speech": "running",
"summary": "queued",
"vision": "done"
}
ProfileBatchRequest
| Поле | Тип | Описание |
|---|---|---|
profiles * | ProfileRequest[] | До 500 профилей до 500 элементов |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"profiles": [
{
"birth_year": 1997,
"city": "Казань",
"gender": "female",
"interests": [
"горные велосипеды",
"фотография"
],
"user": {
"user_id": "u-42"
}
},
{
"age": 35,
"followed_authors": [
"channel-7"
],
"hidden_authors": [
"channel-13"
],
"user": {
"user_id": "u-43"
}
},
{
"attributes": {
"tier": "silver"
},
"personalization": false,
"user": {
"user_id": "u-44"
}
}
]
}
ProfileBatchResponse
| Поле | Тип | Описание |
|---|---|---|
results * | ProfileBatchResult[] | Результаты в порядке профилей |
Пример
{
"results": [
{
"index": 0,
"ok": true
},
{
"error": {
"code": "validation_failed",
"details": [
{
"code": "pii_not_allowed",
"field": "attributes.email",
"message": "персональные данные не принимаются"
}
],
"message": "Поля не прошли проверку"
},
"index": 1,
"ok": false
}
]
}
ProfileBatchResult
| Поле | Тип | Описание |
|---|---|---|
index * | integer | Номер профиля в запросе, с 0 |
ok * | boolean | Профиль записан |
error | BatchError или null | Ошибка профиля, если ok = false |
ProfileRequest
Переданные поля заменяются, null очищает поле, непереданные не меняются.
| Поле | Тип | Описание |
|---|---|---|
gender | string или null | Пол одно из: male, female |
birth_year | integer или null | От 1900 до текущего года от 1900 |
age | integer или null | Вместо birth_year: пересчитывается в год рождения от 0 до 120 |
interests | string[] или null | До 50 строк до 200 знаков: интересы текстом на любом языке до 50 элементов |
excluded_interests | string[] или null | «Не интересно» до 50 элементов |
followed_authors | string[] или null | id авторов: подписки до 500 элементов |
hidden_authors | string[] или null | id авторов, которых не показывать до 500 элементов |
city | string или null | Хранится в нижнем регистре без лишних пробелов до 100 знаков |
country | string или null | Страна: название или код до 100 знаков |
personalization | boolean или null | false — не персонализировать |
attributes | object или null | Любые данные до 16 КБ, кроме персональных: ключи email, phone, name, first_name, last_name, middle_name, address, birth_date, passport на любой глубине — 422 pii_not_allowed |
user * | EndUserIds | Пользователь: без user_id пишется анонимный профиль |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"age": 29,
"attributes": {
"subscriptions": 3,
"tier": "gold"
},
"city": "Казань",
"followed_authors": [
"channel-7"
],
"gender": "female",
"interests": [
"горные велосипеды",
"фотография"
],
"user": {
"user_id": "u-42"
}
}
ProfileResponse
| Поле | Тип | Описание |
|---|---|---|
identity * | string | Чей профиль записан: user — по user_id, anonymous — анонимаодно из: user, anonymous |
updated_fields * | string[] | Поля, значение которых изменилось |
Пример
{
"identity": "user",
"updated_fields": [
"gender",
"birth_year"
]
}
RecommendationUser
Идентификаторы пользователя (ТЗ §8): хотя бы одно поле.
| Поле | Тип | Описание |
|---|---|---|
user_id | string или null | Аккаунт у клиента, до 191 символа Unicode до 191 знаков |
anonymous_id | string или null | Браузер или устройство: до 191 печатного символа ASCII до 191 знаков |
fingerprint_uuid | string или null | visitor_uuid DARA Fingerprint (UUID); учитывается только при подключённом DARA Fingerprint |
analytics_id | string или null | Идентификатор посетителя ДАРА АНАЛИТИКИ (UUID): принимается, но пользователя не определяет и запросом выдачи не привязывается — выдача ничего не пишет |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"anonymous_id": "b7f3c9",
"user_id": "u-42"
}
ReprocessRequest
| Поле | Тип | Описание |
|---|---|---|
steps | string[] или null | Шаги; без steps переобрабатывается всё, включая подготовку медиа |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"steps": [
"summary",
"embedding"
]
}
RerankItem
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта из запроса |
score * | number или null | Оценка, 4 знака; null — объект не ранжируется: неизвестен ДАРА, удалён, недоступен, без векторов, скрыт пользователем или повтор id |
RerankRequest
Упорядочить свои id по оценке ленты пользователя.
| Поле | Тип | Описание |
|---|---|---|
user | RecommendationUser или null | Пользователь, как в событиях: хотя бы один id. Без user выдача неперсональная и одинакова для всех в течение часа. Передавайте одни и те же id на всех страницах |
items * | string[] | id объектов, 1–1000; больше — 413 payload_too_largeдо 1000 элементов |
filters | object или null | Принимается для совместимости и не применяется |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"items": [
"v-5",
"v-9",
"v-12"
],
"user": {
"user_id": "u-42"
}
}
RerankResponse
| Поле | Тип | Описание |
|---|---|---|
recommendation_id * | string | id выдачи (ULID) |
items * | RerankItem[] | Все переданные id: сначала по убыванию оценки, затем в исходном порядке без оценки |
identity * | string | Как определён пользователь: user — по user_id; recognized — узнан без входа (DARA Fingerprint); anonymous — по anonymous_id или fingerprint_uuid; none — без userодно из: user, recognized, anonymous, none |
Пример
{
"identity": "user",
"items": [
{
"id": "v-9",
"score": 0.5521
},
{
"id": "v-5",
"score": 0.4108
},
{
"id": "v-12"
}
],
"recommendation_id": "01J8Z3K4M5N6P7Q8R9S0T1V2W5"
}
SearchChunkOut
| Поле | Тип | Описание |
|---|---|---|
media_position | integer или null | Позиция медиа; нет — кусок текста или сводки |
start_sec | number или null | Начало фрагмента в медиа, секунды |
end_sec | number или null | Конец фрагмента, секунды |
text * | string | Текст куска |
SearchItem
Найденный объект.
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта у клиента |
score * | number | Оценка соответствия запросу, 4 знака; сравнивайте только внутри одного ответа |
matches * | SearchMatch[] | До 3 фрагментов, по убыванию близости; пусто — у объекта нет фрагментов или они сейчас недоступны (порядок результатов от этого не меняется) до 3 элементов |
SearchMatch
Фрагмент объекта, близкий к запросу. Поля без значения не передаются.
| Поле | Тип | Описание |
|---|---|---|
media_position | integer или null | Номер медиа объекта (с 0), к которому относится фрагмент; нет — фрагмент текста или описания объекта |
start_sec | number или null | Начало фрагмента в медиа, секунды (оценка по транскрипту): откройте плеер с этого места |
end_sec | number или null | Конец фрагмента в медиа, секунды |
text * | string | Текст фрагмента — не длиннее 2000 знаков до 2000 знаков |
Пример
{
"end_sec": 675.5,
"media_position": 0,
"start_sec": 585,
"text": "…и теперь добавляем свёклу…"
}
SearchRequest
Поиск: первая страница (offset = 0) ищет заново, следующие берутся из снимка результатов.
| Поле | Тип | Описание |
|---|---|---|
query * | string | Текст запроса: до 500 знаков после схлопывания пробелов и обрезки краёв. Ищется по смыслу (речь, описание и текст объекта, его сводка) и по словам с учётом окончаний; служебные слова не обязательны до 500 знаков; от 1 знаков |
user | RecommendationUser или null | Пользователь, как в событиях: хотя бы один id. Нужен, чтобы не показывать скрытое пользователем и учитывать его интересы; передавайте одни и те же id на всех страницах |
limit | integer | Объектов на странице, 1–50 от 1 до 50; по умолчанию 20 |
offset | integer | Смещение, 0–500. Страницы после первой продолжают тот же список без повторов от 0 до 500; по умолчанию 0 |
types | string[] или null | Только объекты этих типов: 1–5 разных значений до 5 элементов |
filters | object или null | Условия по фильтруемым свойствам проекта, как в ленте: "in_stock": true — равенство; {"in": [...]} и {"not_in": [...]}; {"gte": 100, "lte": 5000} — для чисел; {"any": [...]} — для свойств-списков. Несколько условий — И. Свойство, не отмеченное фильтруемым, или условие не того типа — 422 с кодом unknown_filter |
recommendation_id | string или null | id результатов первой страницы (ULID). Необязателен: без него страница берётся из последнего поиска этого пользователя с тем же запросом и параметрами |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"filters": {
"category": {
"in": [
"food"
]
}
},
"limit": 20,
"offset": 0,
"query": "как приготовить борщ",
"types": [
"video",
"text"
],
"user": {
"anonymous_id": "b7f3c9",
"user_id": "u-42"
}
}
SearchResponse
Страница результатов поиска.
| Поле | Тип | Описание |
|---|---|---|
recommendation_id * | string | id результатов (ULID): передавайте в событиях показа, открытия и цели с surface: "search" |
items * | SearchItem[] | Объекты по убыванию оценки; страница может быть короче limit, если объекты успели удалить или скрыть |
has_more * | boolean | Есть ли следующая страница: offset + limit меньше длины результатов |
identity * | string | Как определён пользователь: user — по user_id; recognized — узнан без входа (DARA Fingerprint); anonymous — по anonymous_id или fingerprint_uuid; none — без userодно из: user, recognized, anonymous, none |
Пример
{
"has_more": true,
"identity": "user",
"items": [
{
"id": "v-123",
"matches": [
{
"end_sec": 675.5,
"media_position": 0,
"start_sec": 585,
"text": "…и теперь добавляем свёклу…"
}
],
"score": 1.2841
},
{
"id": "a-7",
"matches": [],
"score": 0.9312
}
],
"recommendation_id": "01J8Z3K4M5N6P7Q8R9S0T1V2W6"
}
SimilarItem
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта у клиента |
score * | number | Оценка объекта, 4 знака; в fallback — популярность или трендовость объекта |
reason * | string | similar — близок по содержанию; together — покупают или смотрят вместе; author — тот же автор; interest — интересы пользователя; popular — популярное; trending — в тренде (запасная выдача)одно из: similar, together, author, interest, popular, trending |
SimilarRequest
Похожие на объект (item) или «дополните заказ» для корзины (items): ровно одно из двух полей.
| Поле | Тип | Описание |
|---|---|---|
item | string или null | id исходного объекта; объект, неизвестный ДАРА, — популярное, mode=fallbackдо 191 знаков; от 1 знаков |
items | string[] или null | Корзина: до 20 id; неизвестные id не учитываются до 20 элементов |
user | RecommendationUser или null | Пользователь, как в событиях: хотя бы один id. Без user выдача неперсональная и одинакова для всех в течение часа. Передавайте одни и те же id на всех страницах |
limit | integer | Объектов, 1–50 от 1 до 50; по умолчанию 8 |
types | string[] или null | Только объекты этих типов: 1–5 разных значений до 5 элементов |
exclude | string[] или null | id объектов, которые не показывать (уже на странице и т. п.), до 500 до 500 элементов |
filters | object или null | Условия по фильтруемым свойствам проекта (настройки выдачи): "in_stock": true — равенство; {"in": [...]} и {"not_in": [...]}; {"gte": 100, "lte": 5000} — для чисел; {"any": [...]} — для свойств-списков. Несколько условий — И. Свойство, не отмеченное фильтруемым, или условие не того типа — 422 с кодом unknown_filter. Нет свойства у объекта — условие не выполнено, кроме not_in |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"item": "v-123",
"limit": 8,
"user": {
"user_id": "u-42"
}
}
SimilarResponse
| Поле | Тип | Описание |
|---|---|---|
recommendation_id * | string | id выдачи (ULID) |
items * | SimilarItem[] | Объекты по порядку, не больше limit |
mode * | string | personal — по профилю пользователя; cold — по популярному, свежему и текущей сессии; fallback — запасная выдача (служба не успела или индекс проекта загружается)одно из: personal, cold, fallback |
identity * | string | Как определён пользователь: user — по user_id; recognized — узнан без входа (DARA Fingerprint); anonymous — по anonymous_id или fingerprint_uuid; none — без userодно из: user, recognized, anonymous, none |
Пример
{
"identity": "user",
"items": [
{
"id": "v-88",
"reason": "similar",
"score": 0.7311
}
],
"mode": "cold",
"recommendation_id": "01J8Z3K4M5N6P7Q8R9S0T1V2W4"
}
StoredProfile
| Поле | Тип | Описание |
|---|---|---|
identity * | string | user — пользователь с user_id, anonymous — анонимодно из: user, anonymous |
gender * | string или null | Пол одно из: male, female |
birth_year * | integer или null | Год рождения (возраст хранится годом) |
city * | string или null | Город в нижнем регистре |
country * | string или null | Страна |
interests * | string[] или null | Интересы |
excluded_interests * | string[] или null | «Не интересно» |
followed_authors * | string[] или null | id авторов в подписках |
hidden_authors * | string[] или null | id скрытых авторов |
personalization * | boolean | false — пользователь отказался от персонализации |
attributes * | object или null | Произвольные атрибуты |
fields_updated_at * | object | Дата последнего изменения каждого поля |
network | NetworkData или null | Данные ДАРА АНАЛИТИКИ о человеке: отдельный блок, поля профиля они не заменяют. Пустые значения в блоке не отдаются, а самого блока нет, пока подключения нет или данные не найдены |
Пример
{
"attributes": {
"tier": "gold"
},
"birth_year": 1997,
"city": "казань",
"fields_updated_at": {
"birth_year": "2026-09-14T12:00:00Z",
"gender": "2026-09-14T12:00:00Z"
},
"followed_authors": [
"channel-7"
],
"gender": "female",
"identity": "user",
"interests": [
"горные велосипеды"
],
"personalization": true
}
SummaryOut
| Поле | Тип | Описание |
|---|---|---|
summary | string или null | Краткое содержание |
description | string или null | Описание для карточки |
topics | string[] | Темы, 3–7 по умолчанию [] |
tags | string[] | Теги, 5–15 по умолчанию [] |
entities | object[] | Сущности: {name, type}, type — person, organization, brand, place, product, event, otherпо умолчанию [] |
language | string или null | Язык содержания, код из двух букв |
age_rating | string или null | Возрастная маркировка одно из: 0+, 6+, 12+, 16+, 18+ |
moderation | Moderation или null | Модерация |
TranscriptOut
| Поле | Тип | Описание |
|---|---|---|
media_position * | integer | Позиция медиа в объекте, с 0 |
language | string или null | Язык речи |
timestamps * | string | model — время от модели; estimated — оценочное по паузам, точность до пары секундодно из: model, estimated |
text * | string | Полный текст |
segments | TranscriptSegment[] | Фрагменты со временем по умолчанию [] |
TranscriptSegment
| Поле | Тип | Описание |
|---|---|---|
start * | number | Начало, секунды от начала медиа |
end * | number | Конец, секунды |
text * | string | Текст фрагмента |
speaker | string или null | Говорящий, если модель его различает |
UserDeleteRequest
| Поле | Тип | Описание |
|---|---|---|
user * | EndUserIds | Пользователь: хотя бы один идентификатор |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"user": {
"user_id": "u-42"
}
}
UserDeleteResponse
| Поле | Тип | Описание |
|---|---|---|
deleted * | boolean | false — пользователь неизвестен |
Пример
{
"deleted": true
}
UserLinkRequest
| Поле | Тип | Описание |
|---|---|---|
user_id * | string | Аккаунт, в который вошёл пользователь до 191 знаков |
anonymous_id | string или null | Браузер или устройство до входа до 191 знаков |
fingerprint_uuid | string или null | visitor_uuid DARA Fingerprint: записывается как вход на устройстве |
analytics_id | string или null | Идентификатор посетителя ДАРА АНАЛИТИКИ (UUID): привязывается к пользователю, в которого идёт склейка |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"anonymous_id": "b7f3c9",
"fingerprint_uuid": "0b8f6a52-3f3e-4a57-9d51-6c1a1f0e7a01",
"user_id": "u-42"
}
UserLinkResponse
| Поле | Тип | Описание |
|---|---|---|
merged * | boolean | false — анонима нет или его история уже перенесена другому пользователю |
events_moved * | integer | Сколько событий анонима перенесено пользователю |
Пример
{
"events_moved": 12,
"merged": true
}
WebhookItem
| Поле | Тип | Описание |
|---|---|---|
id * | string | id объекта в вашей системе — тот, что передан в PUT /items/{id}; у события webhook.test — «webhook-test» |
status * | string | Новый статус объекта: ready — всё готово; partial — часть шагов с ошибкой; failed — объект не обработан одно из: ready, partial, failed |
processing * | WebhookProcessing | Состояние шагов обработки — как в GET /items/{id} |
summary | WebhookSummary или null | Сводка — как в GET /items/{id}; ключа нет, пока сводка не построена |
WebhookModeration
| Поле | Тип | Описание |
|---|---|---|
level | string или null | Итоговый уровень модерации: none, low, medium, high одно из: none, low, medium, high |
categories | object или null | Оценки категорий модерации от 0 до 1 (adult, violence, drugs и другие) |
evidence | object[] или null | Основания оценки: кадры и фрагменты речи, где найдено нарушение |
WebhookPayload
| Поле | Тип | Описание |
|---|---|---|
event * | string | Событие: item.processed — обработка завершена; item.failed — обработка завершилась с ошибкой; webhook.test — проверка из кабинета. Совпадает с заголовком X-Core-Event одно из: item.processed, item.failed, webhook.test |
project_id * | string | Идентификатор проекта — как в кабинете, 12 символов |
sent_at * | string (date-time) | Время начала этой попытки, ISO-8601 UTC с миллисекундами; у каждой попытки своё |
delivery_id * | string | Идентификатор доставки: одинаков у всех попыток одного события и равен заголовку X-Core-Delivery — по нему отбрасываются повторы |
item * | WebhookItem | Объект, статус которого изменился |
Пример
{
"delivery_id": "Dl1very0000A",
"event": "item.processed",
"item": {
"id": "v-1042",
"processing": {
"embedding": "done",
"prepare": "done",
"speech": "done",
"summary": "done",
"vision": "done"
},
"status": "ready",
"summary": {
"age_rating": "0+",
"moderation": {
"categories": {
"adult": 0,
"violence": 0
},
"evidence": [],
"level": "none"
},
"summary": "Как выбрать горный велосипед: рама, колёса и тормоза",
"tags": [
"велосипед",
"горный велосипед",
"тормоза"
],
"topics": [
"велоспорт",
"снаряжение"
]
}
},
"project_id": "XXXXXXXXXXXX",
"sent_at": "2026-09-21T14:00:00.000Z"
}
WebhookProcessing
| Поле | Тип | Описание |
|---|---|---|
prepare * | string | Подготовка медиа одно из: queued, running, done, skipped, failed, deferred, waiting |
speech * | string | Распознавание речи одно из: queued, running, done, skipped, failed, deferred, waiting |
vision * | string | Анализ кадров и изображений одно из: queued, running, done, skipped, failed, deferred, waiting |
summary * | string | Сводка: краткое содержание, темы, теги, модерация одно из: queued, running, done, skipped, failed, deferred, waiting |
embedding * | string | Векторы для рекомендаций и поиска одно из: queued, running, done, skipped, failed, deferred, waiting |
WebhookSummary
| Поле | Тип | Описание |
|---|---|---|
summary | string или null | Краткое содержание материала |
topics | string[] | Темы материала |
tags | string[] | Теги материала |
age_rating | string или null | Возрастная маркировка одно из: 0+, 6+, 12+, 16+, 18+ |
moderation | WebhookModeration или null | Модерация материала |