ДокументацияРуководства
Объекты
Создание, изменение и удаление объектов — поля и проверки, что переобрабатывается, статусы анализа, пакеты, переобработка и сверка каталога.
Создать или заменить: PUT /items/{id}
PUT задаёт объект целиком: поля, которых нет в теле, очищаются. Ответ 201 — объект создан, 200 — обновлён. Повтор того же запроса ничего не меняет.
В пути допустимы только символы A-Z a-z 0-9 . _ : -, до 191 символа. Объекты с другими id — кириллицей, пробелами, слешами — передавайте через пакет.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
type |
string | да | video, image, audio, text, mixed |
title |
string до 1000 знаков | нет | заголовок |
description |
string до 20 000 знаков | нет | описание |
body |
string до 1 000 000 знаков | нет | основной текст: статья, пост, описание товара |
author |
string до 191 знака | нет | id автора у вас: близость к авторам и разнообразие выдачи |
url |
string до 2048 знаков | нет | ссылка на объект на вашем сайте, http или https |
published_at |
datetime | нет | время публикации; по умолчанию — время создания объекта |
properties |
object до 16 КБ | нет | произвольные свойства; хранятся и отдаются как есть |
media |
array до 50 | для video, image, audio — да |
[{kind, url, version}] в порядке следования |
available |
bool | нет, по умолчанию true |
можно ли показывать объект в выдаче |
Медиа:
kind—video,audioилиimage;url— только https и публичный адрес: ссылки на внутренние сети и localhost не принимаются. Видео и аудио читаются по сети без полного скачивания, изображения — до 30 МБ;version— необязательная строка до 64 знаков. Заменили файл по той же ссылке — поменяйтеversion, и медиа обработается заново.
curl -X PUT https://core.daratech.ru/api/v1/items/sku-3107 \
-H "Authorization: Bearer $DARA_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "image",
"title": "Куртка утеплённая, графит",
"author": "brand-north",
"url": "https://shop.example.ru/p/sku-3107",
"properties": {"price": 8900, "in_stock": true, "category": "outerwear"},
"media": [{"kind": "image", "url": "https://cdn.example.ru/sku-3107/1.jpg", "version": "2"}]
}'
Проверки
- у
textдолжен быть хотя бы один изtitle,description,body, аmediaне передаётся; - у
videoдолжно быть хотя бы одно медиаkind=video, уaudio—kind=audio, уimage—kind=image; уmixed— любые медиа; - свойства, которые проект отметил фильтруемыми, должны иметь объявленный тип: строка, число,
true/falseили список строк; - неизвестное поле — ошибка: опечатка в имени поля не теряется молча;
- время — ISO-8601 с
Zили смещением, время без зоны не принимается; - пустые строки в
author,urlиpublished_atсчитаютсяnull.
Ошибки полей приходят ответом 422 с полем details:
{"error": {"code": "validation_failed", "message": "Поля не прошли проверку",
"details": [{"field": "media[0].url", "code": "invalid_url", "message": "допустим только адрес https"}]}}
Код в details |
Когда |
|---|---|
required |
нет обязательного поля |
invalid_type, invalid_value |
неверный тип или значение |
too_long, too_large, too_many, too_deep |
строка длиннее лимита, свойства больше 16 КБ, больше 50 медиа, слишком глубокая вложенность свойств |
unknown_field |
поле не из списка |
invalid_url |
ссылка не https, без хоста или ведёт во внутреннюю сеть |
invalid_datetime |
время не в ISO-8601 или без зоны |
text_required |
у text нет ни заголовка, ни описания, ни текста |
media_required, media_not_allowed |
нет медиа нужного вида или медиа у text |
invalid_property_type |
фильтруемое свойство не того типа |
immutable |
type в PATCH |
Что переобрабатывается
Анализ перезапускается только для того, что изменилось:
| Изменилось | Что происходит |
|---|---|
available, properties, url, published_at, author |
анализ не перезапускается, обновляется только индекс выдачи |
title, description или body при тех же медиа |
сводка, векторы и поисковый индекс |
список медиа — url или version |
изменённые медиа и всё, что от них зависит; задания по старым медиа отменяются |
available: false |
речь и кадры откладываются до available: true; быстрый вектор и сводка по тексту считаются сразу |
Свойства попадают в сводку как вспомогательный контекст, но ради них сводка не пересчитывается.
Изменить часть полей: PATCH /items/{id}
Те же поля, кроме type. Переданные поля заменяются, null очищает поле, остальные не меняются. Правила переобработки — как у PUT. Для несуществующего объекта — 404.
curl -X PATCH https://core.daratech.ru/api/v1/items/sku-3107 \
-H "Authorization: Bearer $DARA_KEY" \
-H "Content-Type: application/json" \
-d '{"available": false, "properties": {"price": 7900, "in_stock": false, "category": "outerwear"}}'
properties заменяются целиком. media: null в PATCH не принимается. PATCH удалённого объекта сохраняет изменения, но удаление не снимает.
Удалить: DELETE /items/{id}
Мягкое удаление:
- объект исключается из выдачи и поиска;
- результаты анализа и события сохраняются и продолжают участвовать в профилях пользователей;
- повторный
DELETEтоже отвечает200; - вернуть объект можно только
PUT— он снимает удаление.
{"id": "sku-3107", "deleted": true}
Если объект временно нельзя показывать — нет в наличии, снят с публикации, — не удаляйте его, а передайте available: false.
Пакет: POST /items/batch
До 500 операций put, patch и delete в одном запросе. Операции выполняются по порядку и независимо: ошибка одной не отменяет остальные. В пакете id может содержать любые символы — до 191 символа Unicode.
{"operations": [
{"op": "put", "id": "статья/2026/09/осень", "data": {"type": "text", "title": "Осенние маршруты", "body": "…"}},
{"op": "patch", "id": "sku-3107", "data": {"available": true}},
{"op": "delete", "id": "old-1"}
]}
{"results": [
{"id": "статья/2026/09/осень", "ok": true, "status": "queued"},
{"id": "sku-3107", "ok": true, "status": "ready"},
{"id": "old-1", "ok": false, "error": {"code": "not_found", "message": "Объект не найден"}}
]}
Больше 500 операций — 413 payload_too_large. Ошибки полей в пакете приходят с путями вида data.media[0].url.
Объект и результаты анализа: GET /items/{id}
Ответ содержит:
- данные объекта:
id,type,title,description,author,url,published_at,properties,origin; - состояние:
available,deleted,status,processing,updated_at; media:[{position, kind, url, duration_sec, width, height, status}];summary:{summary, description, topics, tags, entities, language, age_rating, moderation: {level, categories, evidence}}— когда сводка готова.
Тяжёлые части — по параметру include через запятую:
transcript—[{media_position, language, timestamps, text, segments: [{start, end, text, speaker}]}];timestamps—model, если таймкоды дала модель, илиestimated, если они оценены;frames—[{media_position, ts, duplicate_of_ts, description, tags, ocr_text, safety, image_url}];image_url— подписанная ссылка, действует час;search_chunks— фрагменты поискового индекса.
origin — откуда объект: api, import (загрузка файла в кабинете) или order (товар из заказа, которого не было в каталоге).
Субтитры медиа — GET /items/{id}/subtitles?media=0&format=vtt или format=srt: реплики не длиннее 7 секунд, до 2 строк по 42 знака. Нет транскрипта — 404.
Статус объекта
status |
Значение |
|---|---|
queued |
ждёт обработки |
processing |
шаги выполняются |
ready |
все применимые шаги завершены |
partial |
часть шагов завершилась ошибкой, но вектор есть — объект участвует в выдаче |
failed |
нет ни одного вектора |
deferred |
объект недоступен (available: false), речь и кадры отложены |
Состояние шагов
В processing — состояние шагов prepare, speech, vision, summary, embedding:
| Состояние | Значение |
|---|---|
queued |
в очереди |
running |
выполняется |
done |
готово |
skipped |
не нужен: задача отключена в проекте, у объекта нет такого медиа или звуковой дорожки |
failed |
окончательная ошибка после повторов |
deferred |
отложен до available: true |
waiting |
ждёт условия: например, исчерпан месячный объём анализа — задание продолжится само |
Переобработать: POST /items/{id}/reprocess
{"steps": ["summary", "embedding"]}
Шаги — speech, vision, summary, embedding; зависимые шаги пересчитываются следом. Без steps переобрабатывается всё, включая подготовку медиа. Ответ 202 — как у PUT.
Сверка каталога: GET /items
Список объектов проекта, включая удалённые, по возрастанию updated_at.
| Параметр | Описание |
|---|---|
status |
статус объекта |
available |
true или false |
updated_since |
изменённые не раньше этого времени, ISO-8601 |
cursor |
курсор следующей страницы из next_cursor |
limit |
от 1 до 500, по умолчанию 100 |
{"items": [{"id": "v-1042", "status": "ready", "available": true, "deleted": false,
"updated_at": "2026-09-14T12:00:00.123Z"}],
"next_cursor": "eyJ1IjoiMjAyNi0wOS0xNFQxMjowMDowMC4xMjMwMDAiLCJpIjo0Mn0"}
next_cursor: null — страниц больше нет. Объект, изменённый во время обхода, встретится на следующих страницах ещё раз. Удобная схема — раз в сутки забирать изменения с updated_since и сравнивать с каталогом у себя.