API: Медіа Vault та підписані завантаження
Vault зберігає фото, відео та голосові нотатки авторки, відсортовані по папках. Кожен елемент є Free, Teaser або Paid з ціною в Stars. Файли ніколи не проходять через API: ви запитуєте підписаний URL для завантаження, відправляєте файл туди, а потім підтверджуєте.
Endpoints #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /media | Список медіа (creator_id= обов’язковий, folder_id=, type=photo,video,voice, access=free,teaser,paid) | can_setup | Planned |
| POST | /media/uploads | Отримати підписаний URL для завантаження одного файлу (дійсний 15 хвилин) | can_setup | Planned |
| POST | /media/uploads/{upload_id}/complete | Підтвердити завантаження; медіа створюється та обробляється | can_setup | Planned |
| GET | /media/{id} | Одне медіа, його прев’ю та де воно використовується | can_setup | Planned |
| PATCH | /media/{id} | Змінити опис, доступ, ціну або папку | can_setup | Planned |
| DELETE | /media/{id} | Видалити (відмовлено, якщо крок скрипта його використовує) | can_setup | Planned |
| GET | /media/folders | Папки Vault авторки | can_setup | Planned |
| POST | /media/folders | Створити папку | can_setup | Planned |
| PATCH | /media/folders/{id} | Перейменувати або перемістити папку | can_setup | Planned |
| DELETE | /media/folders/{id} | Видалити порожню папку | can_setup | Planned |
Об’єкт медіа #
{
"id": "med_5521",
"creator_id": "cr_lea",
"type": "photo",
"status": "ready",
"folder_id": "vf_3",
"access": "paid",
"stars": 300,
"description": "Beach, golden hour, white bikini",
"preview_url": "https://cdn.lanachat.ai/w/7Hq2/cr_lea/med_5521/preview.jpg",
"created_at": "2026-10-06T14:21:40Z"
}
| Поле | Тип | Опис |
|---|---|---|
id | string | Починається з med_ |
creator_id | string | Чий Vault |
type | string | photo, video або voice |
status | string | processing, ready або failed (з причиною) |
folder_id | string або null | Папка Vault |
access | string | free, teaser або paid |
stars | number або null | Ціна в Stars, обов’язково при access = paid (від 1 до 100000) |
description | string або null | Допомагає AI вибрати потрібне медіа; ніколи не показується фанам |
preview_url | string або null | Прев’ю, коли медіа ready |
created_at | string | ISO 8601, UTC |
Медіа #
Список медіа #
GET /media · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
creator_id | string | Так | Авторка |
folder_id | string | Ні | Тільки ця папка |
type | string | Ні | photo, video або voice; кілька через кому |
access | string | Ні | free, teaser або paid; кілька через кому |
limit, cursor | number, string | Ні | Пагінація |
curl "https://api.lanachat.ai/v1/media?creator_id=cr_lea&type=photo&access=paid" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
{
"data": [
{ "id": "med_5522", "creator_id": "cr_lea", "type": "photo", "status": "ready", "folder_id": "vf_3", "access": "paid", "stars": 250, "description": "Mirror, black dress", "preview_url": "https://cdn.lanachat.ai/w/7Hq2/cr_lea/med_5522/preview.jpg", "created_at": "2026-10-06T14:25:10Z" },
{ "id": "med_5521", "creator_id": "cr_lea", "type": "photo", "status": "ready", "folder_id": "vf_3", "access": "paid", "stars": 300, "description": "Beach, golden hour, white bikini", "preview_url": "https://cdn.lanachat.ai/w/7Hq2/cr_lea/med_5521/preview.jpg", "created_at": "2026-10-06T14:21:40Z" }
],
"next_cursor": null
}
Без creator_id API відповідає 400.
Завантаження файлу #
Три виклики: запитати підписаний URL, відправити файл туди, підтвердити.
Крок 1. POST /media/uploads · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
creator_id | string | Так | Чий Vault приймає файл |
file_name | string | Так | Ім’я файлу, наприклад beach-01.jpg |
content_type | string | Так | Наприклад image/jpeg або video/mp4 |
size_bytes | number | Так | Розмір файлу, до 2 ГБ |
folder_id | string | Ні | Папка Vault для розміщення |
curl -X POST https://api.lanachat.ai/v1/media/uploads \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"creator_id": "cr_lea", "file_name": "beach-01.jpg", "content_type": "image/jpeg", "size_bytes": 2483201, "folder_id": "vf_3"}'
{
"upload_id": "up_7781",
"url": "https://uploads.lanachat.ai/w/7Hq2/up_7781?X-Signature=…&X-Expires=1759760100",
"method": "PUT",
"headers": { "Content-Type": "image/jpeg" },
"expires_at": "2026-10-06T14:35:00Z"
}
URL дійсний 15 хвилин.
Крок 2. Відправте файл з PUT на url, з точно заданими headers (без заголовка Authorization).
curl -X PUT "https://uploads.lanachat.ai/w/7Hq2/up_7781?X-Signature=…&X-Expires=1759760100" \
-H "Content-Type: image/jpeg" --data-binary @beach-01.jpg
Крок 3. POST /media/uploads/{upload_id}/complete · can_setup
curl -X POST https://api.lanachat.ai/v1/media/uploads/up_7781/complete \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"
{
"id": "med_5521",
"creator_id": "cr_lea",
"type": "photo",
"status": "processing",
"folder_id": "vf_3",
"access": "paid",
"stars": null,
"description": null,
"preview_url": null,
"created_at": "2026-10-06T14:21:40Z"
}
status змінюється з processing на ready (створюються прев’ю та копія для Telegram) або failed з причиною. Вебхук media.ready повідомляє про готовність, див. Webhooks. Підтримуються формати: JPEG, PNG, HEIC, MP4, MOV, OGG та M4A, до 2 ГБ.
Отримати медіа #
GET /media/{id} · can_setup
curl https://api.lanachat.ai/v1/media/med_5521 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Відповідь, об’єкт медіа з прев’ю та інформацією про використання. Невідомий id відповідає 404.
Встановити ціну та опис #
PATCH /media/{id} · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
access | string | Ні | free, teaser або paid |
stars | number | При access = paid | Від 1 до 100000 |
description | string | Ні | Що показує, для AI |
folder_id | string або null | Ні | Перемістити в іншу папку |
curl -X PATCH https://api.lanachat.ai/v1/media/med_5521 \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"access": "paid", "stars": 300, "description": "Beach, golden hour, white bikini"}'
Відповідь, оновлене медіа. stars обов’язковий при access = paid (від 1 до 100000), інакше API відповідає 400. Опис допомагає AI вибрати потрібне медіа; ніколи не показується фанам.
Видалити медіа #
DELETE /media/{id} · can_setup
curl -X DELETE https://api.lanachat.ai/v1/media/med_5521 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Медіа, яке ще використовується в кроці скрипта, не видаляється (409): спочатку видаліть його зі скрипта.
Папки #
Список папок #
GET /media/folders · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
creator_id | string | Так | Чий Vault |
curl "https://api.lanachat.ai/v1/media/folders?creator_id=cr_lea" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Створити папку #
POST /media/folders · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
creator_id | string | Так | Чий Vault |
name | string | Так | Назва папки |
curl -X POST https://api.lanachat.ai/v1/media/folders \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"creator_id": "cr_lea", "name": "Beach"}'
Перейменувати або перемістити папку #
PATCH /media/folders/{id} · can_setup
curl -X PATCH https://api.lanachat.ai/v1/media/folders/vf_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Beach, summer"}'
Видалити папку #
DELETE /media/folders/{id} · can_setup
curl -X DELETE https://api.lanachat.ai/v1/media/folders/vf_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Видалити можна лише порожню папку; інакше API відповідає 409.