ДокументацияСправочник
Справочник API
Методы API v1 с параметрами, телами запросов, ответами и схемами данных — собирается из описания OpenAPI.
Справочник собирается из описания API при каждой выкладке, поэтому совпадает с работающим сервером. Машиночитаемая схема OpenAPI — /api/v1/openapi.json, без авторизации: по ней можно сгенерировать клиент или импортировать API в Postman и Insomnia.
Обязательные поля и параметры отмечены звёздочкой. Правила и примеры интеграции — в руководствах: Объекты, События и заказы, Пользователи, Ошибки и лимиты.
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}
Объект с результатами анализа
Данные объекта, состояние обработки, медиа и сводка. Тяжёлые части — по 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 |
Ответы
| Код | Когда | Тело |
|---|---|---|
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 | до 1000 знаков |
description | string или null | до 20000 знаков |
body | string или null | до 1000000 знаков |
author | string или null | до 191 знаков |
url | string или null | до 2048 знаков |
published_at | string или null | — |
properties | object или 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 |
422 | Поля не прошли проверку | ErrorResponse |
429 | Превышен лимит частоты; есть Retry-After | ErrorResponse |
503 | Служба недоступна; есть Retry-After | ErrorResponse |
События и заказы
- 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 | — |
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: записывается как вход на устройстве |
Ответы
| Код | Когда | Тело |
|---|---|---|
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
Прочитать профиль пользователя
Поля профиля в том виде, в каком их хранит core, attributes и дата обновления каждого поля — для сверки интеграции. Пользователь ищется без создания и без узнавания; неизвестный — 404.
Авторизация: ключ проекта в заголовке 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 | — |
Ответы
| Код | Когда | Тело |
|---|---|---|
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 |
Служебное
- GET
/api/v1/health— Состояние службы
GET /api/v1/health
Состояние службы
Отвечает ok или degraded (БД недоступна или очередь анализа перегружена). Авторизация не нужна.
Без авторизации
Ответы
| Код | Когда | Тело |
|---|---|---|
200 | Состояние | HealthResponse |
Схемы
BatchError
| Поле | Тип | Описание |
|---|---|---|
code * | string | — |
message * | string | — |
details | object[] или null | — |
BatchOperation
| Поле | Тип | Описание |
|---|---|---|
op * | string | одно из: put, patch, delete |
id * | string | id объекта — до 191 символа Unicode до 191 знаков; от 1 знаков |
data | object или null | Тело PUT или PATCH; для delete не нужно |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
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 | — |
ok * | boolean | — |
status | string или null | одно из: queued, processing, ready, partial, failed, deferred |
error | BatchError или null | — |
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 |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"anonymous_id": "b7f3c9",
"user_id": "u-42"
}
ErrorInfo
| Поле | Тип | Описание |
|---|---|---|
code * | string | Код ошибки: invalid_request, unauthorized, forbidden, not_found, payload_too_large, validation_failed, rate_limited, internal, unavailable |
message * | string | Текст ошибки по-русски |
details | object[] или null | Ошибки по полям: [{field, code, message}] |
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 | — |
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, order_managed |
EventTypeOut
| Поле | Тип | Описание |
|---|---|---|
code * | string | — |
title * | string | — |
mode * | string | fact — факты с окном дедупликации; max — наибольшее значение; state — последнее значение одно из: fact, max, state |
weight * | number | Вес в профиле; может быть отрицательным |
value_kind * | string | одно из: 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 | — |
hides_item * | boolean | — |
is_active * | boolean | — |
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.
EventsResponse
| Поле | Тип | Описание |
|---|---|---|
accepted * | integer | Принято новых событий |
duplicates * | integer | Уже присланные ранее (по id) — не учитываются повторно |
rejected * | EventRejection[] | — |
Пример
{
"accepted": 998,
"duplicates": 1,
"rejected": [
{
"code": "unknown_item",
"id": "evt-1018",
"index": 17
}
]
}
FrameOut
| Поле | Тип | Описание |
|---|---|---|
media_position * | integer | — |
ts * | number | — |
duplicate_of_ts | number или null | Время исходного кадра, если это дубль |
description | string или null | — |
tags | string[] или null | — |
ocr_text | string или null | — |
safety | object или null | — |
image_url | string или null | Подписанная ссылка на 1 час |
HealthResponse
| Поле | Тип | Описание |
|---|---|---|
status * | string | одно из: ok, degraded |
ItemDeleteResponse
| Поле | Тип | Описание |
|---|---|---|
id * | string | — |
deleted * | boolean | — |
Пример
{
"deleted": true,
"id": "abc"
}
ItemDetail
| Поле | Тип | Описание |
|---|---|---|
id * | string | — |
type * | string | одно из: video, image, audio, text, mixed |
title | string или null | — |
description | string или null | — |
author | string или null | — |
url | string или null | — |
published_at | string или null | — |
properties | object или null | — |
origin * | string | одно из: api, import, order |
available * | boolean | — |
deleted * | boolean | — |
status * | string | одно из: queued, processing, ready, partial, failed, deferred |
processing * | Processing | — |
updated_at * | string | — |
media * | MediaOut[] | — |
summary | SummaryOut или null | — |
transcript | TranscriptOut[] или null | При include=transcript |
frames | FrameOut[] или null | При include=frames |
search_chunks | SearchChunkOut[] или null | При include=search_chunks |
ItemListEntry
| Поле | Тип | Описание |
|---|---|---|
id * | string | — |
status * | string | одно из: queued, processing, ready, partial, failed, deferred |
available * | boolean | — |
deleted * | boolean | — |
updated_at * | string | — |
ItemListResponse
| Поле | Тип | Описание |
|---|---|---|
items * | ItemListEntry[] | — |
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 | до 1000 знаков |
description | string или null | до 20000 знаков |
body | string или null | до 1000000 знаков |
author | string или null | до 191 знаков |
url | string или null | до 2048 знаков |
published_at | string или null | — |
properties | object или 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 | — |
status * | string | одно из: 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, откуда core заберёт медиа до 2048 знаков |
version | string или null | Версия от клиента: изменилась — медиа переобрабатывается до 64 знаков |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
MediaOut
| Поле | Тип | Описание |
|---|---|---|
position * | integer | — |
kind * | string | одно из: video, audio, image |
url * | string | — |
duration_sec | number или null | — |
width | integer или null | — |
height | integer или null | — |
status * | string | одно из: new, ready, failed |
Moderation
| Поле | Тип | Описание |
|---|---|---|
level | string или null | одно из: none, low, medium, high |
categories | object или null | — |
evidence | object[] или null | — |
OrderIn
| Поле | Тип | Описание |
|---|---|---|
order_id * | string | id заказа, до 64 печатных символов ASCII; повтор заменяет состав до 64 знаков |
user * | EndUserIds | — |
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 | — |
code * | string | одно из: unknown_item, invalid_value |
OrderResponse
| Поле | Тип | Описание |
|---|---|---|
order_id * | string | — |
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.
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 | — |
order_id * | string или null | — |
ok * | boolean | — |
accepted | integer или null | — |
rejected | OrderLineRejection[] или null | — |
error | BatchError или null | — |
Processing
| Поле | Тип | Описание |
|---|---|---|
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 |
ProfileBatchRequest
| Поле | Тип | Описание |
|---|---|---|
profiles * | ProfileRequest[] | До 500 профилей до 500 элементов |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
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 | — |
ok * | boolean | — |
error | BatchError или null | — |
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 | — |
Другие поля не принимаются: неизвестное поле — ошибка 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, anonymous |
updated_fields * | string[] | Поля, значение которых изменилось |
Пример
{
"identity": "user",
"updated_fields": [
"gender",
"birth_year"
]
}
ReprocessRequest
| Поле | Тип | Описание |
|---|---|---|
steps | string[] или null | Шаги; без steps переобрабатывается всё, включая подготовку медиа |
Другие поля не принимаются: неизвестное поле — ошибка unknown_field.
Пример
{
"steps": [
"summary",
"embedding"
]
}
SearchChunkOut
| Поле | Тип | Описание |
|---|---|---|
media_position | integer или null | — |
start_sec | number или null | — |
end_sec | number или null | — |
text * | string | — |
StoredProfile
| Поле | Тип | Описание |
|---|---|---|
identity * | string | одно из: 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 | — |
hidden_authors * | string[] или null | — |
personalization * | boolean | — |
attributes * | object или null | — |
fields_updated_at * | object | Дата последнего изменения каждого поля |
Пример
{
"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[] | по умолчанию [] |
tags | string[] | по умолчанию [] |
entities | object[] | по умолчанию [] |
language | string или null | — |
age_rating | string или null | одно из: 0+, 6+, 12+, 16+, 18+ |
moderation | Moderation или null | — |
TranscriptOut
| Поле | Тип | Описание |
|---|---|---|
media_position * | integer | — |
language | string или null | — |
timestamps * | string | одно из: 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: записывается как вход на устройстве |
Другие поля не принимаются: неизвестное поле — ошибка 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
}