---
title: Постановка генерации
description: "POST /v1/models/{model} — поставить генерацию и интерактивно отправить запрос."
---

Поставьте генерацию изображения или видео. Заполните параметры ниже и отправьте запрос со своим ключом.

## Песочница

<ApiPlayground path="/v1/models/{model}" method="post" />

`POST /v1/models/:model` ставит генерацию в очередь и сразу возвращает `request_id` со ссылками на статус и результат, а также стоимость операции в кредитах. Для создания генерации нужен scope `generate`.

<Method name="POST" path="/v1/models/:model" />

## Запрос

**Path-параметр**

<TypeTable
  type={{
    model: { type: 'string', description: 'Slug модели, напр. nano-banana-2, seedance-2-fast-i2v. Список — GET /v1/models.', required: true }
  }}
/>

**Заголовки**

<TypeTable
  type={{
    Authorization: { type: 'string', description: 'Bearer clipia_live_… (или схема Key, или X-Api-Key)', required: true },
    'Content-Type': { type: 'string', description: 'application/json', required: true },
    'Idempotency-Key': { type: 'string', description: 'UUID v4 для безопасных ретраев POST (рекомендуется)' }
  }}
/>

**Тело**

<TypeTable
  type={{
    input: { type: 'object', description: 'Параметры генерации. Состав зависит от модели — точная схема в GET /v1/models/:model (input_schema).', required: true },
    webhook_url: { type: 'string', description: 'URL для POST-уведомления о завершении (опционально)' }
  }}
/>

Распространённые ключи внутри `input`: `prompt`, `image_url`, `image_urls`, `aspect_ratio`, `duration`, `resolution`.

## Пример

<Tabs items={['cURL', 'TypeScript', 'Python']}>
<Tab value="cURL">

```bash
curl -X POST https://api.clipia.ai/v1/models/nano-banana-2 \
  -H "Authorization: Bearer $CLIPIA_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 8f3a1c7e-2b4d-4e6f-9a01-23456789abcd" \
  -d '{
    "input": {
      "prompt": "a sunset over mountains, cinematic",
      "aspect_ratio": "16:9"
    },
    "webhook_url": "https://your-server.com/clipia/webhook"
  }'
```

</Tab>
<Tab value="TypeScript">

```ts
import { createClient } from 'clipia-ai';

const clipia = createClient({ apiKey: process.env.CLIPIA_KEY! });

// Idempotency-Key (UUID v4) добавляется автоматически.
const job = await clipia.queue.submit('nano-banana-2', {
  input: { prompt: 'a sunset over mountains, cinematic', aspect_ratio: '16:9' },
  webhookUrl: 'https://your-server.com/clipia/webhook',
});

console.log(job.request_id, job.cost);
```

</Tab>
<Tab value="Python">

```python
import os
from clipia import Clipia

client = Clipia(api_key=os.environ["CLIPIA_KEY"])

# Idempotency-Key (UUID v4) добавляется автоматически.
job = client.submit(
    "nano-banana-2",
    input={"prompt": "a sunset over mountains, cinematic", "aspect_ratio": "16:9"},
    webhook_url="https://your-server.com/clipia/webhook",
)

print(job.request_id, job.cost)
```

</Tab>
</Tabs>

**Ответ `200`**

```json
{
  "request_id": "764cabcf-b745-4b3e-ae38-1200304cf45b",
  "status": "IN_QUEUE",
  "queue_position": 2,
  "status_url": "https://api.clipia.ai/v1/requests/764cabcf-b745-4b3e-ae38-1200304cf45b/status",
  "response_url": "https://api.clipia.ai/v1/requests/764cabcf-b745-4b3e-ae38-1200304cf45b",
  "cost": 12
}
```

**Поля ответа**

<TypeTable
  type={{
    request_id: { type: 'string', description: 'Идентификатор запроса генерации (uuid)' },
    status: { type: 'string', description: 'IN_QUEUE, IN_PROGRESS, COMPLETED, FAILED или CANCELED' },
    queue_position: { type: 'integer | null', description: 'Позиция в очереди, если запрос в очереди' },
    status_url: { type: 'string', description: 'Ссылка для проверки статуса' },
    response_url: { type: 'string', description: 'Ссылка для получения результата' },
    cost: { type: 'number', description: 'Фиксированная стоимость операции в кредитах (резервируется при submit)' }
  }}
/>

- `cost` — фиксированная стоимость операции в кредитах, известная заранее. Резервируется при `submit`, окончательно списывается при успехе; при фейле возвращается полностью.
- При нехватке кредитов запрос вернёт `402 insufficient_credits`.

<Callout type="info" title="Идемпотентность">
Передайте `Idempotency-Key` (UUID v4), чтобы безопасно повторять `POST` при сетевых сбоях. Тот же ключ с теми же параметрами вернёт тот же `request_id` без повторного списания (срок хранения — 24 часа). Тот же ключ с другими параметрами вернёт `409`.
</Callout>

## Оценка стоимости

Чтобы узнать цену до постановки в очередь, используйте `POST /v1/models/:model/estimate`. Он принимает тот же `input` и возвращает стоимость в кредитах без списания и без запуска генерации.

<Method name="POST" path="/v1/models/:model/estimate" />

<Tabs items={['cURL', 'TypeScript', 'Python']}>
<Tab value="cURL">

```bash
curl -X POST https://api.clipia.ai/v1/models/seedance-2-fast-i2v/estimate \
  -H "Authorization: Bearer $CLIPIA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "prompt": "aerial shot over a neon city",
      "duration": 8,
      "resolution": "1080p"
    }
  }'
```

</Tab>
<Tab value="TypeScript">

```ts
const { credits } = await clipia.models.estimate('seedance-2-fast-i2v', {
  prompt: 'aerial shot over a neon city',
  duration: 8,
  resolution: '1080p',
});

console.log(`генерация обойдётся в ${credits} кредитов`);
```

</Tab>
<Tab value="Python">

```python
est = client.models.estimate(
    "seedance-2-fast-i2v",
    {"prompt": "aerial shot over a neon city", "duration": 8, "resolution": "1080p"},
)

print(est.credits)
```

</Tab>
</Tabs>

```json
{
  "credits": 40
}
```
