Вайб-Маркетолог Вайб-Маркетолог
Получить ключ

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_capabilitiesestimate_generationgenerate_contentget_generation_status). Биллинг тот же — рублёвый баланс владельца аккаунта. Все правила ниже (смета перед оплатой, поллинг, display_url) действуют без изменений.

Порядок подключения (делай по шагам)

  1. GET /me — проверь, что ключ работает; посмотри daily_spend_limit и статус Яндекс OAuth. Затем представься владельцу: POST /identify {"telegram_bot":"@my_bot","host":"my-server","version":"1.0"} — он увидит, кто использует ключ.
  2. GET /balance — узнай доступные рубли.
  3. GET /capabilities — актуальный каталог моделей с required/optional по каждой. Источник истины.
  4. Если нужен файл-исходник — POST /upload-media (multipart file) → стабильный URL на 7 дней.
  5. POST /generate/estimatedry-run: проверь валидность и цену БЕЗ списания.
  6. POST /generate (добавь strict:true) — запусти генерацию.
  7. Опрашивай 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):

🆕 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 (женский) — это частая причина «все голоса одинаковые».

  1. Подбери голос: GET /api/agent/voices (фильтры ?gender=male|female, ?category=..., ?search=calm, ?has_preview=1). Всего 97 голосов; у части есть preview_url — mp3-сэмпл, который можно прослушать бесплатно.
  2. Возьми поле id (имя Roger/Bella или ID EkK5I93UQWFDigLMpZcX).
  3. Передай его в 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_boost 0.85, stability 0.5, style 0. Проверенные на 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 продуктов.

Безопасные инструменты (бесплатно, без списания)

Webhook (если используешь callback_url)

Мы шлём POST на твой callback_url при generation.complete / generation.error.

Сообщения от клиентов (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 секунд. Длинные размышления → сначала быстрый ответ, детали следующим сообщением через канал владельца.

Золотые правила

  1. Перед платной операцией — /generate/estimate и/или strict:true. Никогда не плати за кривой запрос.
  2. Исходные файлы — через /upload-media. Не используй tmpfiles.org / imgur (истекают, блокируются).
  3. Модели и их поля сверяй в GET /capabilities — он всегда актуален.
  4. 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: художественная правка, без байт-в-байт сохранения логотипа.
  5. При 429 daily_spend_limit_exceeded / 402 insufficient_balance — сообщи оператору, не повторяй вслепую.
  6. Пользователю показывай 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