# API : Médias du Vault et téléchargements signés

_API · Lecture de 5 min · Mis à jour 2026-10-22 · https://lanachat.ai/guides/fr/api-vault/_

Le **Vault** contient les photos, vidéos et notes vocales d’une créatrice, triées dans des dossiers. Chaque élément est **Free**, **Teaser** ou **Paid** avec un prix en Stars. Les fichiers ne transitent jamais par l’API : vous demandez une **URL de téléchargement signée**, envoyez le fichier là-bas, puis confirmez.

## Endpoints

| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | `/media` | Lister les médias (`creator_id=` requis, `folder_id=`, `type=photo,video,voice`, `access=free,teaser,paid`) | `can_setup` | Planned |
| POST | `/media/uploads` | Obtenir une URL signée pour uploader un fichier (valide 15 minutes) | `can_setup` | Planned |
| POST | `/media/uploads/{upload_id}/complete` | Confirmer l’upload ; le média est créé et traité | `can_setup` | Planned |
| GET | `/media/{id}` | Un média, son aperçu et où il est utilisé | `can_setup` | Planned |
| PATCH | `/media/{id}` | Modifier sa description, accès, prix ou dossier | `can_setup` | Planned |
| DELETE | `/media/{id}` | Supprimer (refusé si un script l’utilise) | `can_setup` | Planned |
| GET | `/media/folders` | Dossiers du Vault d’une créatrice | `can_setup` | Planned |
| POST | `/media/folders` | Créer un dossier | `can_setup` | Planned |
| PATCH | `/media/folders/{id}` | Renommer ou déplacer un dossier | `can_setup` | Planned |
| DELETE | `/media/folders/{id}` | Supprimer un dossier vide | `can_setup` | Planned |

## L’objet média

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

| Champ | Type | Description |
|---|---|---|
| `id` | string | Commence par `med_` |
| `creator_id` | string | À qui appartient le Vault |
| `type` | string | `photo`, `video` ou `voice` |
| `status` | string | `processing`, `ready` ou `failed` (avec raison) |
| `folder_id` | string ou null | Dossier du Vault |
| `access` | string | `free`, `teaser` ou `paid` |
| `stars` | number ou null | Prix en Stars, requis si `access` est `paid` (1 à 100 000) |
| `description` | string ou null | Aide l’IA à choisir le bon média ; jamais montré au fan |
| `preview_url` | string ou null | Aperçu, une fois le média `ready` |
| `created_at` | string | ISO 8601, UTC |

## Médias

### Lister les médias

`GET /media` · `can_setup`

| Paramètre | Type | Requis | Description |
|---|---|---|---|
| `creator_id` | string | Oui | La créatrice |
| `folder_id` | string | Non | Seulement ce dossier |
| `type` | string | Non | `photo`, `video` ou `voice` ; plusieurs séparés par des virgules |
| `access` | string | Non | `free`, `teaser` ou `paid` ; plusieurs séparés par des virgules |
| `limit`, `cursor` | number, string | Non | [Pagination](https://lanachat.ai/guides/fr/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
}
```

Sans `creator_id`, l’API répond `400`.

### Télécharger un fichier

Trois appels : demandez une URL signée, envoyez le fichier, confirmez.

**Étape 1.** `POST /media/uploads` · `can_setup`

| Paramètre | Type | Requis | Description |
|---|---|---|---|
| `creator_id` | string | Oui | À qui appartient le Vault |
| `file_name` | string | Oui | Nom du fichier, par exemple `beach-01.jpg` |
| `content_type` | string | Oui | Par exemple `image/jpeg` ou `video/mp4` |
| `size_bytes` | number | Oui | Taille du fichier, jusqu’à 2 Go |
| `folder_id` | string | Non | Dossier du Vault où le mettre |

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

L’URL est valide 15 minutes.

**Étape 2.** Envoyez le fichier avec `PUT` à `url`, avec exactement les `headers` donnés (pas d’en-tête `Authorization` ici).

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

**Étape 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"
}
```

Le `status` passe de `processing` à `ready` (aperçus et copie Telegram créés) ou `failed` avec une raison. Un webhook `media.ready` vous informe, voir [Webhooks](https://lanachat.ai/guides/fr/api-webhooks/). Formats acceptés : JPEG, PNG, HEIC, MP4, MOV, OGG et M4A, jusqu’à 2 Go.

### Obtenir un média

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

```bash
curl https://api.lanachat.ai/v1/media/med_5521 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
```

La réponse est l’objet média, avec son aperçu et où il est utilisé. Un id inconnu répond `404`.

### Prix et description

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

| Paramètre | Type | Requis | Description |
|---|---|---|---|
| `access` | string | Non | `free`, `teaser` ou `paid` |
| `stars` | number | Si `access` est `paid` | 1 à 100 000 |
| `description` | string | Non | Ce que ça montre, pour l’IA |
| `folder_id` | string ou null | Non | Déplacer dans un autre dossier |

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

La réponse est le média mis à jour. `stars` est requis si `access` est `paid` (1 à 100 000), sinon l’API répond `400`. La description aide l’IA à choisir le bon média ; elle n’est jamais montrée au fan.

### Supprimer un média

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

```bash
curl -X DELETE https://api.lanachat.ai/v1/media/med_5521 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
```

Un média encore utilisé par un script est refusé (`409`) : retirez-le d’abord du [script](https://lanachat.ai/guides/fr/api-scripts/).

## Dossiers

### Lister les dossiers

`GET /media/folders` · `can_setup`

| Paramètre | Type | Requis | Description |
|---|---|---|---|
| `creator_id` | string | Oui | À qui appartient le Vault |

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

### Créer un dossier

`POST /media/folders` · `can_setup`

| Paramètre | Type | Requis | Description |
|---|---|---|---|
| `creator_id` | string | Oui | À qui appartient le Vault |
| `name` | string | Oui | Nom du dossier |

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

### Renommer ou déplacer un dossier

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

### Supprimer un dossier

`DELETE /media/folders/{id}` · `can_setup`

```bash
curl -X DELETE https://api.lanachat.ai/v1/media/folders/vf_3 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
```

Seul un dossier vide peut être supprimé ; sinon l’API répond `409`.

## Articles liés

- [API LanaChat : démarrage rapide, authentification et erreurs](https://lanachat.ai/guides/fr/api-overview/)
- [Vault : téléversez médias, aperçus et dossiers](https://lanachat.ai/guides/fr/vault/)
- [API a0: scripts,  e9tapes et dossiers](https://lanachat.ai/guides/fr/api-scripts/)
