ДокументацияРуководства
События и заказы
Приём событий, пресеты и режимы учёта, дедупликация, досмотр и дочитывание, заказы и отмены, товары вне каталога, приглушение купленного.
Событие — действие посетителя с объектом. События формируют интересы пользователя, статистику объектов, пары «вместе» и метрики выдачи. То, что вы знаете о пользователе, но не является действием с объектом, передаётся профилем.
Приём событий: POST /events
Тело — {"events": [...]}, до 1000 событий.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
id |
string до 64 символов ASCII | да | уникальный id события в проекте — для защиты от повторов |
type |
string | да | код типа события проекта |
item |
string | да | id объекта |
user |
object | да | {user_id, anonymous_id, fingerprint_uuid}, хотя бы одно поле — см. Пользователи |
value |
number | по типу | процент, секунды просмотра, сумма; 1 или 0 для состояний |
occurred_at |
datetime | нет | когда произошло; по умолчанию — время приёма |
recommendation_id |
string | нет | id выдачи, из которой пришёл пользователь |
surface |
string до 16 символов | нет | место показа: feed, next, … |
position |
int | нет | позиция в выдаче, с 0 |
order_id |
string до 64 символов ASCII | нет | заказ: строки одного заказа образуют пары «вместе» |
quantity |
number | нет | количество в строке заказа |
price |
number | нет | цена за единицу |
curl -X POST https://core.daratech.ru/api/v1/events \
-H "Authorization: Bearer $DARA_KEY" \
-H "Content-Type: application/json" \
-d '{"events": [
{"id": "imp-91a7-0", "type": "impression", "item": "v-2210", "user": {"anonymous_id": "a-7f3c2e"},
"recommendation_id": "01JC8Z6Q9W3M5N7P2R4T6V8X0Y", "surface": "feed", "position": 0},
{"id": "like-u501-v2210", "type": "like", "item": "v-2210", "user": {"user_id": "u-501"}, "value": 1}
]}'
Ответ 202:
{"accepted": 2, "duplicates": 0, "rejected": []}
Каждое событие проверяется отдельно: неверные попадают в rejected, остальные принимаются.
Код в rejected |
Причина |
|---|---|
unknown_type |
нет такого типа события в проекте |
inactive_type |
тип отключён в кабинете |
unknown_item |
объекта нет в проекте |
no_user |
в user нет ни одного учитываемого идентификатора |
invalid_user |
anonymous_id не в ASCII или fingerprint_uuid не UUID |
invalid_value |
значение не подходит к виду значения типа |
too_old |
событие старше 730 дней |
order_managed |
событие покупки для заказа, переданного через POST /orders |
Правила приёма:
- события по удалённым и недоступным объектам принимаются и участвуют в профилях;
- повторно присланное событие с тем же
idне учитывается и попадает вduplicates; - время события больше чем на 5 минут в будущем заменяется временем приёма;
- без подключения DARA Fingerprint поле
fingerprint_uuidне учитывается: событие только с ним отклоняетсяno_user.
Типы событий: GET /event-types
[{"code": "watch", "title": "Досмотр", "mode": "max", "weight": 1.0, "value_kind": "watch_seconds",
"value_map": {"thresholds": [[0.1, -0.3], [0.5, 0.3], [0.8, 0.7]], "else": 1.0},
"dedup_window_sec": 0, "suppress_similar_days": 0,
"is_impression": false, "is_open": false, "is_goal": true, "is_purchase": false,
"hides_item": false, "is_active": true}]
Типы, веса и флаги правятся в кабинете, во вкладке «Типы событий» проекта. Тип, по которому уже есть события, не удаляется, а отключается.
Пресеты
Все пресеты начинают с impression (показ, вес 0) — показы нужны для метрик, статистики и усталости от повторных показов.
Видеохостинг
| Код | Название | Режим | Вес | Значение | Окно | Флаги |
|---|---|---|---|---|---|---|
impression |
Показ | fact | 0 | — | — | показ |
view |
Открытие | fact | 0,2 | — | 24 ч | открытие |
watch |
Досмотр | max | 1,0 | секунды просмотра | — | цель |
like |
Лайк | state | 1,5 | 1/0 | — | цель |
comment |
Комментарий | fact | 1,2 | — | 24 ч | цель |
subscribe |
Подписка | state | 2,0 | 1/0 | — | — |
report |
Жалоба | state | −3,0 | 1/0 | — | скрывает объект |
Магазин
| Код | Название | Режим | Вес | Значение | Окно | Флаги |
|---|---|---|---|---|---|---|
impression |
Показ | fact | 0 | — | — | показ |
view |
Просмотр товара | fact | 0,3 | — | 24 ч | открытие |
favorite |
Избранное | state | 1,0 | 1/0 | — | цель |
cart |
Корзина | state | 1,8 | 1/0 | — | цель |
purchase |
Покупка | fact | 3,0 | сумма | — | цель, покупка |
not_interested |
Не интересно | state | −2,0 | 1/0 | — | скрывает объект |
Медиа
| Код | Название | Режим | Вес | Значение | Окно | Флаги |
|---|---|---|---|---|---|---|
impression |
Показ | fact | 0 | — | — | показ |
view |
Открытие | fact | 0,3 | — | 24 ч | открытие |
read |
Дочитывание | max | 1,0 | процент | — | цель |
like |
Лайк | state | 1,2 | 1/0 | — | цель |
share |
Поделиться | fact | 1,5 | — | 24 ч | цель |
comment |
Комментарий | fact | 1,2 | — | 24 ч | цель |
Пресет «Свой» содержит только impression и view, остальные типы вы добавляете сами.
Флаги:
- показ — объект показан в выдаче; сырые показы не хранятся, только агрегаты;
- открытие — переход к объекту; обнуляет счётчик показов без клика;
- цель — целевое действие для метрик («целевые события на 100 показов»);
- покупка — в этот тип раскладываются строки заказов; такой тип в проекте один;
- скрывает объект — объект больше не показывается этому пользователю.
Режимы учёта
fact— факты накапливаются. Повтор того же типа по тому же объекту от того же пользователя внутри окна дедупликации сохраняется, но не усиливает вклад: десять открытий одного ролика за час при окне 24 ч считаются одним.max— учитывается наибольшее значение: досмотр на 30 %, потом на 80 % — в профиле 80 %.state— действует последнее по времени значение. Лайк —value: 1, снятие лайка —value: 0: вклад обнуляется. Событие старше уже учтённого состояние не меняет.
Вклад пары «пользователь × объект × тип» затухает со временем: вес уменьшается вдвое за 30 дней (полураспад проекта). Для fact вклад растёт логарифмически от числа фактов, для max и state зависит от множителя по значению; у state затухание не опускается ниже 0,3.
Досмотр и дочитывание
Для типов со значением watch_seconds и percent вовлечённость e переводится в множитель вклада:
| Вовлечённость | Множитель |
|---|---|
| меньше 10 % | −0,3 — объект скорее не понравился |
| от 10 до 50 % | 0,3 |
| от 50 до 80 % | 0,7 |
| 80 % и больше | 1,0 |
watch_seconds— вvalueпередавайте, сколько секунд просмотрено. e — большее из двух долей: «просмотрено / длительность медиа» и «просмотрено / 300 с», но не больше 1. Пять минут просмотра приравниваются к досмотру длинного видео.percent— вvalueпередавайте процент от 0 до 100, e = value / 100.
Отправляйте такое событие при закрытии плеера или страницы либо периодически во время просмотра — каждый раз с новым id: режим max оставит наибольшее значение. Объекты, досмотренные или дочитанные с множителем 0,7 и выше, 30 дней не показываются в ленте.
Показы
- Отправляйте показы тем же
POST /eventsпачками, сrecommendation_id,surfaceиposition. - Показы дедуплицируются по
idв течение 48 часов. - Объект, трижды показанный без открытия, опускается в ленте ниже. Показы из выдачи без рекомендаций — без
recommendation_id— служат базой для сравнения в метриках.
Заказы: POST /orders
Заказ передаётся одним запросом: ДАРА раскладывает его на события типа с флагом «покупка».
curl -X POST https://core.daratech.ru/api/v1/orders \
-H "Authorization: Bearer $DARA_KEY" \
-H "Content-Type: application/json" \
-d '{
"order_id": "ord-20931",
"user": {"user_id": "u-501"},
"occurred_at": "2026-09-14T15:20:00Z",
"items": [
{"item": "sku-3107", "quantity": 1, "price": 8900},
{"item": "sku-2240", "quantity": 2, "price": 1200},
{"item": "sku-9001", "quantity": 1, "price": 450, "title": "Пакет фирменный"}
]
}'
{"order_id": "ord-20931", "accepted": 3, "rejected": []}
| Поле | Описание |
|---|---|
order_id |
id заказа, до 64 печатных символов ASCII |
user |
покупатель, как в событиях |
occurred_at |
время заказа; по умолчанию — время приёма |
status |
created (по умолчанию) или cancelled |
items |
строки, до 200: item, quantity, price, title, properties |
Правила:
- Одинаковые товары складываются. Строки с одним
itemдают одно событие: количество суммируется, цена — средневзвешенная. - Строка → событие покупки.
idсобытия —o:и первые 32 символа hex SHA-256 отorder_idиitem; в событииorder_id,quantity,priceиvalue=quantity × price, если переданы оба. - Повтор заменяет состав. Тот же
order_idещё раз: новые строки добавляются, пропавшие отменяются, дублей нет. Передавайте заказ целиком при каждом изменении. - Отмена.
"status": "cancelled"снимает вклад заказа: события помечаются отменёнными, сигналы и пары «вместе» пересчитываются. - Один заказ — один способ. События покупки с
order_idзаказа изPOST /orders, присланные черезPOST /events, отклоняютсяorder_managed. Если строки заказа раньше пришли событиями,POST /ordersс тем жеorder_idзаменяет их. - Товара нет в каталоге. Если в строке есть
title, заводится недоступный объект сorigin: order: он учитывается в профиле, но в выдачу не попадает, анализ медиа и сводка для него не запускаются. ПозжеPUTэтого объекта сделает его обычным. Безtitleстрока отклоняетсяunknown_item. - В проекте нет типа с флагом «покупка» — ответ
422с кодомno_purchase_typeвdetails.
Перенос истории: POST /orders/batch
До 500 заказов и не больше 5000 строк в сумме: {"orders": [...]}. Даты заказов — до 730 дней назад. Заказы обрабатываются независимо; ответ 202 — {"results": [...]} с результатом по каждому заказу.
Приглушение купленного
У покупки в пресете «Магазин» срок приглушения 30 дней: купленный товар и товары с косинусной близостью 0,9 и выше к нему этот срок не показываются покупателю в ленте и похожих. Для товаров повседневного спроса поставьте в кабинете срок 0.
Пары «вместе»
- Из заказов — товары из одного неотменённого заказа за 365 дней.
- Из сессий — объекты, которые один пользователь открыл или по которым совершил целевое действие в пределах 30 минут, за 30 дней.
Пара учитывается, когда её набрали не меньше трёх пользователей. Пары работают в ленте (reason: together), в похожих и в «дополните заказ» — похожих для нескольких товаров корзины.