# POST /api/v1/files/upload

> Загружает ваше фото и возвращает ссылку, которую можно передать в input модели.

## Запрос

```http
POST https://ai.aimixmedia.site/api/v1/files/upload
Authorization: Bearer <API_KEY>
Content-Type: multipart/form-data
```

## Параметры

| Поле формы | Обязательное | Описание |
|---|---|---|
| `file` | да | JPG, PNG или WebP, до 15 МБ |

Файл хранится 3 дн. Можно не загружать, а сразу передать любую публичную https-ссылку.

## Ответ

```json
{
  "code": 200,
  "msg": "success",
  "data": {
    "url": "https://ai.aimixmedia.site/files/5ee4b004b268e2d37c86c33552fe4f3e.jpg",
    "fileName": "5ee4b004b268e2d37c86c33552fe4f3e.jpg",
    "expiresInDays": 3
  }
}
```

## Примеры

```bash
curl -X POST https://ai.aimixmedia.site/api/v1/files/upload \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@photo.jpg"
```

```python
import os, requests

r = requests.post(
    "https://ai.aimixmedia.site/api/v1/files/upload",
    headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
    files={"file": open("photo.jpg", "rb")},
)
print(r.json()["data"]["url"])
```

```javascript
import fs from "node:fs";

const fd = new FormData();
fd.append("file", new Blob([fs.readFileSync("photo.jpg")], { type: "image/jpeg" }), "photo.jpg");
const r = await fetch("https://ai.aimixmedia.site/api/v1/files/upload", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.API_KEY}` },
  body: fd,
});
console.log((await r.json()).data.url);
```

## Ошибки

| code | error | Когда |
|---|---|---|
| 401 | `unauthorized` | Нет ключа или он неверный |
| 422 | `validation_error` | Не тот формат или слишком большой файл |
