# POST /api/v1/files/upload

> Uploads your photo and returns a link you can pass to the model input.

## Request

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

## Parameters

| Form field | Required | Description |
|---|---|---|
| `file` | yes | JPG, PNG or WebP, up to 15 MB |

The file is kept for 3 days. You can skip uploading and pass any public https link instead.

## Response

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

## Examples

```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);
```

## Errors

| code | error | When |
|---|---|---|
| 401 | `unauthorized` | Missing or invalid key |
| 422 | `validation_error` | Wrong format or file too large |
