API : Médias du Vault et téléchargements signés
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 #
{
"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 |
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
}
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 |
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"
}
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).
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
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"
}
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. Formats acceptés : JPEG, PNG, HEIC, MP4, MOV, OGG et M4A, jusqu’à 2 Go.
Obtenir un média #
GET /media/{id} · can_setup
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 |
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
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.
Dossiers #
Lister les dossiers #
GET /media/folders · can_setup
| Paramètre | Type | Requis | Description |
|---|---|---|---|
creator_id | string | Oui | À qui appartient le Vault |
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 |
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
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
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.