---
title: "Create content (video/image/voice/music/text). Charges the RUB balance."
method: POST
path: "/generate"
tags: ["Generate"]
---

# Create content (video/image/voice/music/text). Charges the RUB balance.

`POST /generate`

## Request

- Base URL: `https://vibemarketolog.ru/api/agent`
- URL: `https://vibemarketolog.ru/api/agent/generate`
- Auth: HTTP bearer

## Request body

- GenerateRequest: Параметры модели передаются ПЛОСКО, на верхнем уровне тела — вложенного объекта params нет. Набор параметров у каждой модели свой: GET /capabilities отдаёт для неё required, optional, limits и enums. Неизвестные параметры при strict=true отклоняются до списания.
  - `type` 'video' | 'image' | 'voice' | 'music' | 'text', required: Тип содержимого.
  - `model` string, required: Идентификатор модели. Допустимые значения — из GET /capabilities.
  - `prompt` string: Описание желаемого результата.
  - `callback_url` string, uri: Куда сообщить о готовности. Тело подписывается заголовком X-Vibe-Signature. Для длинной озвучки не поддерживается.
  - `idempotency_key` string: Ключ повторной отправки. Повтор с тем же ключом и тем же телом возвращает прежний результат без нового списания; тот же ключ с другим телом — ошибка 409. Запись живёт 24 часа.
  - `strict` boolean: Отклонять неизвестные и несовместимые параметры ДО списания. Без него они возвращаются в ignored_params, а деньги списываются.

## Response `200`

Completed synchronously

- GenerationResult: Состояние генерации. Обратите внимание на ссылки: ни одна из них не вечная. Пользователю показывайте display_url; для длительного хранения скачивайте файл.
  - `status` 'pending' | 'processing' | 'complete' | 'error'
  - `generation_id` integer
  - `task_id` string, nullable
  - `model` string, nullable
  - `type` string, nullable
  - `cost` number, nullable: Списанная сумма в рублях.
  - `display_url` string, nullable: Подписанная ссылка на результат: открывается без входа в кабинет, действует около 7 суток (точный срок — в expires_at), и при каждом запросе состояния выдаётся свежая. Её и показывайте пользователю. В базу сохранять нельзя. Бывает null, пока файл не сохранён.
  - `file_url` string, nullable: Ссылка внутри личного кабинета: без срока действия, но требует входа.
  - `result_url` string, nullable: Ссылка в том виде, в каком её отдал сервис. У части моделей это адрес поставщика, который перестаёт работать быстро. Не сохранять.
  - `result_urls` string[]: То же для моделей, возвращающих несколько файлов.
  - `expires_at` string, date-time, nullable: До какого момента действует display_url.
  - `thumbnail` string, nullable
  - `title` string, nullable
  - `duration` number, nullable: Длительность в секундах, если применимо.
  - `error_message` string, nullable: Причина, если status = error.
  - `refunded` boolean, nullable: true, если списание возвращено автоматически после сбоя.
  - `result_object` object, nullable: Дополнительные данные отдельных моделей.
  - `created_at` string, date-time, nullable
  - `updated_at` string, date-time, nullable

## Other responses

- `202`: Accepted (async); poll status_url or await webhook
- `401`: Ключ не передан, недействителен, отозван или истёк (missing_token / invalid_token)
- `402`: Не хватает рублей на балансе (insufficient_balance)
- `403`: Scope not granted or IP not allowed
- `422`: Поля запроса не прошли проверку; разбор — в details (validation_failed)
- `429`: Превышена частота запросов или суточный лимит траты ключа (rate_limit_exceeded / daily_spend_limit_exceeded)
- `500`: Внутренняя ошибка сервиса; повторите позже и сообщите request_id (internal_error)

---

[API](https://skmtc.dev/vibemarketolog/apis/agent-api.md) · [All operations](https://skmtc.dev/vibemarketolog/apis/agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/vibemarketolog/apis/agent-api/revisions/6a74f8ad5d58?raw)
