Agent Quickstart - Вайб-Маркетолог
Самодостаточная инструкция для системного промпта ИИ-агента.
API активен · обновлено 2026-08-10Содержание ▾
Это самодостаточная инструкция для ИИ-агента. Скопируйте её в системный промпт агента — этого достаточно, чтобы он подключился и начал генерировать контент без ошибок. Машиночитаемая версия всего ниже:
GET https://lk.vibemarketolog.ru/api/agent/capabilities.
Кто ты и куда подключаешься
Ты работаешь с API платформы Вайб-Маркетолог. База: https://lk.vibemarketolog.ru/api/agent.
Все запросы — с заголовком Authorization: Bearer <ТОКЕН>. Ключ выдаёт оператор на
https://lk.vibemarketolog.ru/#agent (показывается один раз). Списания идут с рублёвого баланса
владельца ключа, поэтому никогда не запускай платную операцию вслепую.
Работаешь через MCP?
Если ты подключён как MCP-коннектор (Claude / ChatGPT) к https://lk.vibemarketolog.ru/mcp —
curl не нужен: вызывай тулзы напрямую (list_capabilities → estimate_generation →
generate_content → get_generation_status). Биллинг тот же — рублёвый баланс владельца
аккаунта. Все правила ниже (смета перед оплатой, поллинг, display_url) действуют без изменений.
Порядок подключения (делай по шагам)
GET /me— проверь, что ключ работает; посмотриdaily_spend_limitи статус Яндекс OAuth. Затем представься владельцу:POST /identify{"telegram_bot":"@my_bot","host":"my-server","version":"1.0"}— он увидит, кто использует ключ.GET /balance— узнай доступные рубли.GET /capabilities— актуальный каталог моделей сrequired/optionalпо каждой. Источник истины.- Если нужен файл-исходник —
POST /upload-media(multipartfile) → стабильный URL на 7 дней. POST /generate/estimate— dry-run: проверь валидность и цену БЕЗ списания.POST /generate(добавьstrict:true) — запусти генерацию.- Опрашивай
GET /generation/{id}/statusИЛИ передайcallback_urlдля webhook-пуша.
Генерация: POST /generate
Базовые поля: type (image|text|video|voice|music), model, prompt. Остальное — по модели
(см. /capabilities). Добавляй strict:true, чтобы платформа отклонила несовместимые поля
с HTTP 422 до списания (иначе лишние поля молча отбрасываются и попадают в ignored_params).
🆕 Текст (type:text): синхронно и по фактическим токенам
Две флагманские модели: claude-opus-5 (вход 1500 ₽/1M токенов, выход 7500 ₽/1M) и gpt-5.6-sol (1500 / 9000). Минимум 2 ₽ за вызов; короткий деловой запрос обходится примерно в 4 ₽.
Отличий от медиа три: ответ приходит сразу (в теле generate, поллинг не нужен), цена считается по факту (не по прайсу), и разница возвращается в том же ответе — при отправке занимается резерв по max_tokens, после ответа лишнее падает обратно на баланс. Поля: prompt✅, system, max_tokens, effort (low…max), thinking (по умолчанию false — размышления считаются по ставке вывода и удорожают простые задачи).
curl -X POST https://lk.vibemarketolog.ru/api/agent/generate -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"type":"text","model":"claude-opus-5","system":"Ты копирайтер.","prompt":"Пост про сезонный напиток, 2 абзаца.","max_tokens":1500}'
# → {"status":"complete","text":"…","usage":{...},"cost":2.28,"reserved":11.48,"refunded":9.2}
Смотри в ответе cost (сколько списали), а не reserved (сколько заняли). stop_reason:"max_tokens" = ответ обрезан, повтори с бо́льшим max_tokens. Смета до оплаты — POST /generate/estimate с тем же телом, бесплатно.
⚠️ image-to-video: правильное поле под модель
image_input — только для type:image (nano-banana / gpt-image / seedream). Видео-модели его
не читают → получишь text-to-video и всё равно заплатишь. Для оживления картинки используй:
Модель (type:video) |
Поле исходной картинки |
|---|---|
veo3_fast / veo3.1 / veo3 |
image_urls:["..."] + generation_type:"image-to-video" |
kling-3.0-std / kling-3.0-pro |
image_urls:["..."] |
seedance-2 / seedance-2-fast / seedance-2-mini |
first_frame_url:"..." (опц. last_frame_url) или reference_image_urls:["..."] |
minimax-h3 |
reference_image_urls:["..."] + h3_mode:"image" (1-я — первый кадр, 2-я — последний) |
pixverse-v6 |
image_urls:["..."] (ровно 1) + pv_mode:"image"; переход — first_frame_image_url + last_frame_image_url; референсы — image_references:[...] |
grok-itv |
image_urls:["..."] (ровно 1, Grok 1.5 Preview, до 15 сек, без mode; базовое имя — тир цены по duration, ключи -10/-20 = закреплённый тариф) |
motion-control-720p/1080p |
character_image_url + reference_video_url |
gemini-omni-video |
image_urls:["..."] (до 7) ИЛИ video_list:[{url,start,ends}] (video-to-video) |
omnihuman-1-5 |
image_url:"..." + audio_url:"..." (оживление фото — одиночное поле, не image_urls!) |
volcengine-lipsync |
video_url:"..." + audio_url:"..." (пересинхрон губ готового видео) |
🆕 PixVerse V6 — пять режимов, от 4 ₽/сек
pixverse-v6 (type:video) — самое дешёвое видео каталога: 3–15 с, до 1080p, звук вместе с
картинкой (generate_audio:true). Тариф — пара «разрешение + звук»: 360p 4/6 ₽/с, 540p 6/8,
720p 8/10, 1080p 15/19. Цена = тариф × duration, режим на неё не влияет.
Режим задаётся полем pv_mode (или выводится из состава входов):
text (по описанию) · image (оживление одного фото) · transition (переход между
first_frame_image_url и last_frame_image_url) · reference (1–7 фото в image_references,
адресуются в промпте как @Image1…@Image7) · extend (продление своего готового ролика по
video_url или parent_task_id, платишь только за добавленные секунды).
⚠️ В image уходит только первая картинка (с несколькими провайдер требует template_id).
extend по parent_task_id работает только со своей завершённой генерацией pixverse-v6.
aspect_ratio действует лишь в text и reference. multi_clip:true — только text и image.
MiniMax H3 — видео 2K со встроенным звуком
minimax-h3 (type:video) — 2560×1440 со стереодорожкой в одном файле, 4–15 с, 37 ₽/сек.
Режим задаётся полем h3_mode: text (по описанию), image (опорные кадры), reference
(до 9 фото + до 3 видео + до 3 аудио одним запросом).
⚠️ Две особенности биллинга: секунды входного видео оплачиваются по той же ставке, а изображения
сверх пяти — по 11 ₽ за штуку. Видео-референс принимается только загруженный через
POST /upload-media; ссылку на чужой домен API отклонит до списания. Точную сумму отдаёт
POST /generate/estimate.
🆕 Оживить и Озвучить: Omnihuman 1.5 + Lip-Sync
Посекундная оплата (ceil(сек) × тариф, мин 3с; точная цена — в ответе generate, поле cost):
omnihuman-1-5(type:video) — фото + аудио → говорящее/поющее видео с лип-синком. Длина = длине аудио (≤60с). Тариф: 720p 32₽/с, 1080p 42₽/с. Поля:image_url✅,audio_url✅,prompt,resolution(720/1080),pe_fast_mode,anim_seed.volcengine-lipsync(type:video) — видео + новое аудио → пересинхрон губ. Оплата поmax(видео,аудио). Тариф: Lite 10₽/с, Basic 14₽/с. Поля:video_url✅(≤500MB),audio_url✅,lipsync_mode(lite/basic),separate_vocal,open_scenedet(basic),align_audio(lite).omnihuman-1-5/human-identification(type:video, бесплатно) — проверка пригодности фото (result_object.subject_status: 1=ок, 0=возьми крупнее).
🆕 Gemini Omni (Veo 3): видео + персонаж + голос
Связка голос → персонаж → видео: 1) голос (gemini-omni-audio, type:voice, 39₽) → audioId; 2) персонаж (gemini-omni-character, type:image, 49₽, audio_ids:[audioId] привязывает голос) → characterId; 3) видео (gemini-omni-video, type:video, от 149₽) с character_ids:[characterId] — персонаж говорит голосом. ID из result_object в GET /generation/{id}/status. ⚠️ audio_ids НАПРЯМУЮ в видео не передавать — Оператор блокирует (content-policy); голос только через персонажа. lang:"ru" по умолчанию. duration 4/6/8/10, aspect_ratio 16:9/9:16, resolution 720p/1080p/4k. video2video: 1 клип ≤100MB ≤30с.
⚠️ Фильтр безопасности Google (
PUBLIC_ERROR_UNSAFE_GENERATION) блокирует риск-сцены (высота, трюки, знаменитости) — в т.ч. в загруженных видео/фото/персонаже. Если упало с вложением — причина чаще в нём, не в тексте. Деньги возвращаются.
🎙️ Озвучка (type:voice): как выбрать голос
Модели ElevenLabs: el-tts-turbo (посимвольно 6₽/1000 знаков; до 5000 знаков за запрос, 5001–200 000 → авто-«длинная озвучка»: нарезка+склейка, /generate вернёт voiceover_id+status_url), el-tts-multilingual-v2 (39₽, до 5000 знаков), el-dialogue-v3 (49₽, мультиспикер), el-sound-fx-v2 (19₽, звуки).
Модели Google Gemini TTS: gemini-flash-tts (Gemini 3.1 Flash, посимвольно 13₽/1000 знаков) и gemini-pro-tts (Gemini 2.5 Pro, студийное качество, 18₽/1000 знаков) — одиночная озвучка И диалоги (1–2 голоса), 30 фирменных голосов Google (Zephyr, Puck, Charon, Kore…), эмоции inline-тегами прямо в тексте ([радостно] Привет! [шёпотом] секрет), стили Deadpan|Whisper|Newscaster, temperature 0–2. Одиночная: voice_name+style; диалог: speakers[]+dialogue_turns[]. Лимит 5000 знаков → больше авто-«длинная озвучка».
# Gemini TTS — одиночная озвучка с эмоциями:
curl -X POST https://lk.vibemarketolog.ru/api/agent/generate -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"type":"voice","model":"gemini-flash-tts","prompt":"[радостно] Привет! [шёпотом] секрет","voice_name":"Zephyr","style":"Deadpan","temperature":1}'
Главное правило: чтобы голос отличался, в каждом запросе передавай voice_id. Без него всегда звучит дефолт Rachel (женский) — это частая причина «все голоса одинаковые».
- Подбери голос:
GET /api/agent/voices(фильтры?gender=male|female,?category=...,?search=calm,?has_preview=1). Всего 97 голосов; у части естьpreview_url— mp3-сэмпл, который можно прослушать бесплатно. - Возьми поле
id(имяRoger/Bellaили IDEkK5I93UQWFDigLMpZcX). - Передай его в
voice_id(алиасvoice— то же самое). Для диалога —dialogue:[{voice_id, text}, ...]с разными голосами по ролям.
🇷🇺 Русский (важно). Поле
gender— английское; на русском часть голосов меняет пол (Aria/Charlotte → мужской, River → женский). Замерено F0, см.gender_ru/f0_ru_hzв/voicesи фильтр?language=ru&gender=.... Модель —el-tts-multilingual-v2(turbo занижает тембр). Параметры:similarity_boost0.85,stability0.5,style0. Проверенные на ru: мужские —Brian, Callum, Will, Charlie, George, Liam, Daniel, Chris; женские —Jessica, Rachel, Alice, Sarah, Lily, Laura, Matilda. Избегать:Aria, Charlotte, River, Eric.
curl -X POST https://lk.vibemarketolog.ru/api/agent/generate -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"type":"voice","model":"el-tts-turbo","prompt":"Текст для озвучки","voice_id":"Roger","language_code":"ru"}'
Brand Voice (бесплатно): бренд один раз — стиль во всех генерациях
Создай профиль бренда и активируй его — дальше каждая генерация автоматически получает тон, палитру и голос бренда (подставляются только поля, допустимые схемой модели; твои параметры всегда важнее; ценовые поля не трогаются).
POST /api/agent/brand {"name":"Кофейня №1","tone_of_voice":"дружелюбный","palette":["#2D1B0E"]} (scope: write)
POST /api/agent/brand/activate {"brand_id": 12} (scope: write)
POST /api/agent/generate/estimate {..., "brand_id": 12} → applied_brand_fields[] — что подставится, бесплатно
В /generate: brand_id (чужой → 422 без списания), product_id, brand_apply:false — опт-аут.
Список брендов: GET /api/agent/brands (scope: read). Лимиты: 10 брендов / 50 продуктов.
Безопасные инструменты (бесплатно, без списания)
POST /generate/estimate— тот же body, что у/generate; вернётvalid(+ раздельныеbody_valid«запрос корректен» /funds_ok«денег хватает»),estimated_cost_rub,applied_tier(какая ступень тарифа применена — grok поduration, omni поresolution, seedream поquality),balance.after,rejected,value_warnings(значение вне enum — исполнитель может молча взять дешёвую ступень),misrouted_media(медиа в чужом поле → каким полем заменить),validation(HEAD-check медиа),required_missing. Используй ПЕРЕД оплатой.- Блок
acceptanceв/generate— машинопроверяемые критерии результата (format, aspect_ratio, min_width/height, размер файла); вердиктpassed/partial/failedпридёт вGET /generation/{id}/status→acceptance. Информационный, деньги и статус не меняет. POST /webhook-test({"callback_url":"https://..."}) — пришлёт подписанное тестовое событие на твой endpoint, чтобы проверить listener и подпись.POST /safety-check— оценка риска действия в Яндекс Директ.
Webhook (если используешь callback_url)
Мы шлём POST на твой callback_url при generation.complete / generation.error.
- Подпись: заголовок
X-Vibe-Signature = hmac_sha256(raw_body, webhook_secret). Проверяй на сырых байтах тела ДО парсинга JSON. - Где взять
webhook_secret: показывается один раз при создании ключа. Если не сохранил — кабинет → «API ключи для агентов» → кнопка с круговой стрелкой у ключа: секрет перевыпускается, сам ключ доступа НЕ меняется. Какая схема действует у твоего ключа — покажет полеsecret_formulaв ответеPOST /webhook-test. - Легаси-ключи (созданы до 2026-07-09, без выделенного секрета):
hmac_sha256(raw_body, sha256(твой_сырой_токен)). Перевыпусти секрет той же кнопкой, чтобы уйти с производного ключа. - Ретраи: 3 (backoff 30s / 120s / 600s). Таймаут на твой ответ: 30s. Успех — любой
2xx. - Не пришёл — опроси
GET /generation/{id}/status.
Сообщения от клиентов (Bitrix24 и другие каналы)
Клиенты твоего владельца пишут тебе из Bitrix24 — ты ОБЯЗАН забирать их сообщения и отвечать. Бесплатно.
Вариант А — polling (рекомендуется). Держи постоянный цикл:
while true; do
# long-poll: вернётся сразу при появлении сообщения, иначе через 20с пусто
MSGS=$(curl -s -H "Authorization: Bearer $TOKEN" \
"https://lk.vibemarketolog.ru/api/agent/inbox?wait=20")
# на каждое messages[].id ответь В ТЕЧЕНИЕ 20 СЕКУНД:
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"reply":"твой ответ клиенту"}' \
"https://lk.vibemarketolog.ru/api/agent/inbox/{id}/reply"
done
В сообщении есть text, channel, context (portal, dialog_id, user_name) и опционально attachments (картинки/файлы клиента: {type, url, mime, name} — скачай по url, для image используй vision).
CRM-действия: чтобы реально работать в CRM клиента, верни рядом с reply массив actions (Bitrix REST, исполняет мост):
{"reply": "Создал сделку на 50 000 ₽", "actions": [{"method": "crm.deal.add", "params": {"fields": {"TITLE": "Заявка", "OPPORTUNITY": 50000}}}]}
Разрешены crm.deal/lead/contact/company/activity add/update/list/get (whitelist моста). Нет действий — просто {reply}.
Вариант Б — push (быстрее). Один раз зарегистрируй webhook:
POST /api/agent/webhook-url {"url":"https://твой-хост/hook"} — мы будем слать событие agent.message
(подпись X-Vibe-Signature, схема как у generation-webhook). Ответь синхронно 200 {"reply":"..."} за ≤18с.
Если твой webhook упал — сообщения автоматически ждут в inbox.
Золотое правило: клиент ждёт в чате — отвечай коротко и в течение 20 секунд. Длинные размышления → сначала быстрый ответ, детали следующим сообщением через канал владельца.
Золотые правила
- Перед платной операцией —
/generate/estimateи/илиstrict:true. Никогда не плати за кривой запрос. - Исходные файлы — через
/upload-media. Не используй tmpfiles.org / imgur (истекают, блокируются). - Модели и их поля сверяй в
GET /capabilities— он всегда актуален. - Edit-модели изображений (
gpt-image-2-edit,nano-banana-*,seedream-4.5,seedream-5-pro-edit,qwen-image-3-edit,qwen-image-3-pro-edit) —preserves_input:false: художественная правка, без байт-в-байт сохранения логотипа. - При
429 daily_spend_limit_exceeded/402 insufficient_balance— сообщи оператору, не повторяй вслепую. - Пользователю показывай
display_url(постоянная ссылка на файл в ЛК), НЕresult_url— временный URL провайдера протухает.
Лимиты по scope ключа
read 120/мин · generate 30/мин · write 10/мин · autopilot 5/мин.
/generate/estimate и /webhook-test — это read (бесплатно).
Права выдаются явно: новый ключ имеет read и generate. Права yandex (сырой OAuth-токен
Яндекса), write и autopilot владелец аккаунта включает отдельно. Ключ без права получает
403 insufficient_scope с полем required — покажи владельцу, какое право включить.
Ошибки: одна схема на всё API
{ "status": "error", "error": "validation_failed", "message": "Поле model обязательно для заполнения.",
"details": { "model": ["Поле model обязательно для заполнения."] },
"request_id": "0f9c8b7a-…" }
Читай error (машинный код) для логики и message (по-русски, конкретно) — для пользователя.
details — разбор по полям. request_id называй в обращении в поддержку.
Частые коды: missing_token / invalid_token (401), insufficient_scope (403),
validation_failed (422), insufficient_balance (402), daily_spend_limit_exceeded и
rate_limit_exceeded (429), generation_failed (502). При сбое генерации деньги возвращаются.
Полный справочник: agent-api.md. Координация: @centrmedia (https://telegram.me/centrmedia).
Программное управление рекламой
Кампании Яндекс Директа, автопилот ставок, доступы к рекламным кабинетам и исследование спроса в открытую часть API не входят и предоставляются по партнёрскому соглашению — вместе с договорным SLA, выделенными лимитами запросов и приоритетной поддержкой.
Оставить заявку (имя и контакт, ответим в рабочее время): https://vibemarketolog.ru/api#lead
Или напишите напрямую: @centrmedia