API: Media w Vault i podpisane przesyłanie plików
Vault przechowuje zdjęcia, filmy i notatki głosowe twórczyni, posegregowane w folderach. Każdy element jest Free, Teaser lub Paid z ceną w Stars. Pliki nigdy nie przechodzą przez API: prosisz o podpisany URL do przesłania, wysyłasz tam plik, a potem potwierdzasz.
Endpoints #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /media | Lista mediów (creator_id= wymagane, folder_id=, type=photo,video,voice, access=free,teaser,paid) | can_setup | Planned |
| POST | /media/uploads | Pobierz podpisany URL do przesłania jednego pliku (ważny 15 minut) | can_setup | Planned |
| POST | /media/uploads/{upload_id}/complete | Potwierdź przesłanie; media zostaje utworzone i przetworzone | can_setup | Planned |
| GET | /media/{id} | Jedno media, jego podgląd i gdzie jest używane | can_setup | Planned |
| PATCH | /media/{id} | Zmień opis, dostęp, cenę lub folder | can_setup | Planned |
| DELETE | /media/{id} | Usuń je (odmowa, jeśli używa go krok skryptu) | can_setup | Planned |
| GET | /media/folders | Foldery w Vault twórczyni | can_setup | Planned |
| POST | /media/folders | Utwórz folder | can_setup | Planned |
| PATCH | /media/folders/{id} | Zmień nazwę lub przenieś folder | can_setup | Planned |
| DELETE | /media/folders/{id} | Usuń pusty folder | can_setup | Planned |
Obiekt 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"
}
| Pole | Typ | Opis |
|---|---|---|
id | string | Zaczyna się od med_ |
creator_id | string | Czyj Vault |
type | string | photo, video lub voice |
status | string | processing, ready lub failed (z powodem) |
folder_id | string lub null | Folder w Vault |
access | string | free, teaser lub paid |
stars | number lub null | Cena w Stars, wymagana gdy access to paid (1 do 100000) |
description | string lub null | Pomaga AI wybrać właściwe media; nigdy nie jest pokazywana fanowi |
preview_url | string lub null | Podgląd, gdy media jest ready |
created_at | string | ISO 8601, UTC |
Media #
Lista mediów #
GET /media · can_setup
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
creator_id | string | Tak | Twórczyni |
folder_id | string | Nie | Tylko ten folder |
type | string | Nie | photo, video lub voice; kilka oddzielonych przecinkami |
access | string | Nie | free, teaser lub paid; kilka oddzielonych przecinkami |
limit, cursor | number, string | Nie | Paginacja |
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
}
Bez creator_id API odpowiada 400.
Przesyłanie pliku #
Trzy wywołania: prosisz o podpisany URL, wysyłasz plik, potwierdzasz.
Krok 1. POST /media/uploads · can_setup
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
creator_id | string | Tak | Czyj Vault go otrzymuje |
file_name | string | Tak | Nazwa pliku, np. beach-01.jpg |
content_type | string | Tak | Na przykład image/jpeg lub video/mp4 |
size_bytes | number | Tak | Rozmiar pliku, do 2 GB |
folder_id | string | Nie | Folder Vault, do którego trafi |
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 jest ważny 15 minut.
Krok 2. Wyślij plik metodą PUT na url, z dokładnie podanymi headers (bez nagłówka 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
Krok 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 zmienia się z processing na ready (tworzone są podglądy i kopia do Telegrama) lub failed z powodem. Webhook media.ready powiadomi Cię o gotowości, zobacz Webhooks. Akceptowane formaty: JPEG, PNG, HEIC, MP4, MOV, OGG i M4A, do 2 GB.
Pobierz media #
GET /media/{id} · can_setup
curl https://api.lanachat.ai/v1/media/med_5521 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Odpowiedź to obiekt media z podglądem i miejscami użycia. Nieznane id zwraca 404.
Cena i opis #
PATCH /media/{id} · can_setup
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
access | string | Nie | free, teaser lub paid |
stars | number | Gdy access to paid | 1 do 100000 |
description | string | Nie | Co pokazuje, dla AI |
folder_id | string lub null | Nie | Przenieś do innego folderu |
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"}'
Odpowiedzią jest zaktualizowane media. stars jest wymagane, gdy access to paid (1 do 100000), inaczej API zwraca 400. Opis pomaga AI wybrać właściwe media; nigdy nie jest pokazywany fanowi.
Usuń media #
DELETE /media/{id} · can_setup
curl -X DELETE https://api.lanachat.ai/v1/media/med_5521 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Media używane przez krok skryptu nie zostanie usunięte (409): najpierw usuń je ze skryptu.
Foldery #
Lista folderów #
GET /media/folders · can_setup
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
creator_id | string | Tak | Czyj Vault |
curl "https://api.lanachat.ai/v1/media/folders?creator_id=cr_lea" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Utwórz folder #
POST /media/folders · can_setup
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
creator_id | string | Tak | Czyj Vault |
name | string | Tak | Nazwa folderu |
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"}'
Zmień nazwę lub przenieś 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"}'
Usuń folder #
DELETE /media/folders/{id} · can_setup
curl -X DELETE https://api.lanachat.ai/v1/media/folders/vf_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Można usunąć tylko pusty folder; w przeciwnym razie API zwraca 409.