# POST /api/v1/jobs/createTask

> Создаёт задачу генерации и сразу возвращает её номер (taskId). Цена списывается сразу и возвращается при ошибке.

## Запрос

```http
POST https://ai.aimixmedia.site/api/v1/jobs/createTask
Authorization: Bearer <API_KEY>
Content-Type: application/json
```

## Параметры

| Поле | Обязательное | Описание |
|---|---|---|
| `model` | да | ID модели, например `nano-banana-2` — [список](https://docs.aimixmedia.site/models) |
| `input` | да | Параметры модели: `prompt`, фото и т. д. — см. страницу модели |
| `callBackUrl` | нет | Куда прислать результат, когда задача завершится — [callback](https://docs.aimixmedia.site/callbacks) |

Необязательный заголовок `Idempotency-Key` защищает от дублей при повторе запроса — [подробнее](https://docs.aimixmedia.site/idempotency).

## Ответ

```json
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_nano-banana-2_1790621023886ca4e4d"
  }
}
```

## Примеры

```bash
curl -X POST https://ai.aimixmedia.site/api/v1/jobs/createTask \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"nano-banana-2","callBackUrl":"https://your-app.example/callback","input":{"prompt":"Постер «Лето в Москве»","aspect_ratio":"3:4"}}'
```

```python
import os, requests

r = requests.post(
    "https://ai.aimixmedia.site/api/v1/jobs/createTask",
    headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
    json={
      "model": "nano-banana-2",
      "callBackUrl": "https://your-app.example/callback",
      "input": {
        "prompt": "Постер «Лето в Москве»",
        "aspect_ratio": "3:4"
      }
    },
)
print(r.json())  # {"code": 200, "data": {"taskId": "..."}}
```

```javascript
const r = await fetch("https://ai.aimixmedia.site/api/v1/jobs/createTask", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "model": "nano-banana-2",
    "callBackUrl": "https://your-app.example/callback",
    "input": {
      "prompt": "Постер «Лето в Москве»",
      "aspect_ratio": "3:4"
    }
  }),
});
console.log(await r.json()); // { code: 200, data: { taskId: "..." } }
```

## Ошибки

| code | error | Когда |
|---|---|---|
| 401 | `unauthorized` | Нет ключа или он неверный |
| 402 | `insufficient_balance` | Не хватает денег на балансе |
| 422 | `validation_error` | Неверный параметр (что именно — в `msg`) |
| 422 | `unsupported_model` | Нет такой модели |
| 429 | `rate_limited` | Слишком много запросов |

Все коды — в разделе [Ошибки и лимиты](https://docs.aimixmedia.site/errors).
