# API: Media din Vault și încărcări semnate

_API · 5 min de citit · Actualizat 2026-10-22 · https://lanachat.ai/guides/ro/api-vault/_

**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

```json
{
  "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](https://lanachat.ai/guides/ro/api-overview/) |

```bash
curl "https://api.lanachat.ai/v1/media?creator_id=cr_lea&type=photo&access=paid" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
```

```json
{
  "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 |

```bash
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"}'
```

```json
{
  "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`).

```bash
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`

```bash
curl -X POST https://api.lanachat.ai/v1/media/uploads/up_7781/complete \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"
```

```json
{
  "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](https://lanachat.ai/guides/ro/api-webhooks/). Acceptate: JPEG, PNG, HEIC, MP4, MOV, OGG și M4A, până la 2 GB.

### Obține o media

`GET /media/{id}` · `can_setup`

```bash
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 |

```bash
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`

```bash
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](https://lanachat.ai/guides/ro/api-scripts/).

## Foldere

### Listează foldere

`GET /media/folders` · `can_setup`

| Parameter | Type | Required | Description |
|---|---|---|---|
| `creator_id` | string | Da | În al cui Vault |

```bash
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 |

```bash
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`

```bash
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`

```bash
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`.

## Articole conexe

- [API LanaChat: început rapid, autentificare și erori](https://lanachat.ai/guides/ro/api-overview/)
- [Vault: încărcare media, previzualizări și foldere](https://lanachat.ai/guides/ro/vault/)
- [API: scripturi, pași și foldere](https://lanachat.ai/guides/ro/api-scripts/)
