API: Media din Vault și încărcări semnate
Vault conține fotografiile, videoclipurile și notele vocale ale unei creatoare, sortate în foldere. Fiecare element este Free, Teaser sau Paid cu un preț în Stars. Fișierele nu trec niciodată prin API: ceri un URL de încărcare semnat, trimiți fișierul acolo, apoi confirmi.
Endpoints #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /media | Listează media (creator_id= obligatoriu, folder_id=, type=photo,video,voice, access=free,teaser,paid) | can_setup | Planned |
| POST | /media/uploads | Obține un URL semnat pentru încărcarea unui fișier (valid 15 minute) | can_setup | Planned |
| POST | /media/uploads/{upload_id}/complete | Confirmă încărcarea; media este creată și procesată | can_setup | Planned |
| GET | /media/{id} | O media, previzualizarea ei și unde este folosită | can_setup | Planned |
| PATCH | /media/{id} | Schimbă descrierea, accesul, prețul sau folderul | can_setup | Planned |
| DELETE | /media/{id} | Șterge media (refuzat dacă un pas de script o folosește) | can_setup | Planned |
| GET | /media/folders | Folderele din Vault-ul unei creatoare | can_setup | Planned |
| POST | /media/folders | Creează un folder | can_setup | Planned |
| PATCH | /media/folders/{id} | Redenumește sau mută un folder | can_setup | Planned |
| DELETE | /media/folders/{id} | Șterge un folder gol | can_setup | Planned |
Obiectul media #
{
"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"
}
| Field | Type | Description |
|---|---|---|
id | string | Începe cu med_ |
creator_id | string | În al cui Vault se află |
type | string | photo, video sau voice |
status | string | processing, ready sau failed (cu motiv) |
folder_id | string sau null | Folderul din Vault |
access | string | free, teaser sau paid |
stars | number sau null | Preț în Stars, obligatoriu când access este paid (1 până la 100.000) |
description | string sau null | Ajută AI să aleagă media potrivită; nu se arată fanului |
preview_url | string sau null | O previzualizare, când media este ready |
created_at | string | ISO 8601, UTC |
Media #
Listează media #
GET /media · can_setup
| Parameter | Type | Required | Description |
|---|---|---|---|
creator_id | string | Da | Creatoarea |
folder_id | string | Nu | Doar din acest folder |
type | string | Nu | photo, video sau voice; mai multe separate prin virgulă |
access | string | Nu | free, teaser sau paid; mai multe separate prin virgulă |
limit, cursor | number, string | Nu | Paginare |
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
}
Fără creator_id, API răspunde cu 400.
Încarcă un fișier #
Trei apeluri: ceri un URL semnat, trimiți fișierul acolo, confirmi.
Pasul 1. POST /media/uploads · can_setup
| Parameter | Type | Required | Description |
|---|---|---|---|
creator_id | string | Da | În al cui Vault se încarcă |
file_name | string | Da | Numele fișierului, ex. beach-01.jpg |
content_type | string | Da | Ex. image/jpeg sau video/mp4 |
size_bytes | number | Da | Dimensiunea fișierului, până la 2 GB |
folder_id | string | Nu | Folderul din Vault unde se pune |
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-ul este valabil 15 minute.
Pasul 2. Trimite fișierul cu PUT la url, cu exact headers-urile date (fără header 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
Pasul 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 trece de la processing la ready (se fac previzualizări și copia pentru Telegram) sau failed cu motiv. Un webhook media.ready te anunță când, vezi Webhooks. Acceptate: JPEG, PNG, HEIC, MP4, MOV, OGG și M4A, până la 2 GB.
Obține o media #
GET /media/{id} · can_setup
curl https://api.lanachat.ai/v1/media/med_5521 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Răspunsul este obiectul media, cu previzualizarea și unde este folosită. Un id necunoscut răspunde cu 404.
Preț și descriere #
PATCH /media/{id} · can_setup
| Parameter | Type | Required | Description |
|---|---|---|---|
access | string | Nu | free, teaser sau paid |
stars | number | Când access este paid | 1 până la 100.000 |
description | string | Nu | Ce arată, pentru AI |
folder_id | string sau null | Nu | Mută în alt folder |
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"}'
Răspunsul este media actualizată. stars este obligatoriu când access este paid (1 până la 100.000), altfel API răspunde cu 400. Descrierea ajută AI să aleagă media potrivită; nu se arată fanului.
Șterge o media #
DELETE /media/{id} · can_setup
curl -X DELETE https://api.lanachat.ai/v1/media/med_5521 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
O media folosită încă într-un pas de script este refuzată (409): scoate-o mai întâi din script.
Foldere #
Listează foldere #
GET /media/folders · can_setup
| Parameter | Type | Required | Description |
|---|---|---|---|
creator_id | string | Da | În al cui Vault |
curl "https://api.lanachat.ai/v1/media/folders?creator_id=cr_lea" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Creează un folder #
POST /media/folders · can_setup
| Parameter | Type | Required | Description |
|---|---|---|---|
creator_id | string | Da | În al cui Vault |
name | string | Da | Numele folderului |
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"}'
Redenumește sau mută un folder #
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"}'
Șterge un folder #
DELETE /media/folders/{id} · can_setup
curl -X DELETE https://api.lanachat.ai/v1/media/folders/vf_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Doar un folder gol poate fi șters; altfel API răspunde cu 409.