LanaChat

API: Medios de Vault y cargas firmadas

5 min de lecturaActualizado Markdown

El Vault guarda las fotos, videos y notas de voz de una creadora, organizados en carpetas. Cada elemento es Free, Teaser o Paid con un precio en Stars. Los archivos nunca viajan a través de la API: pides una URL de carga firmada, envías el archivo allí y luego confirmas.

Endpoints #

MethodPathDescriptionPermissionStatus
GET/mediaListar medios (creator_id= obligatorio, folder_id=, type=photo,video,voice, access=free,teaser,paid)can_setupPlanned
POST/media/uploadsObtener una URL firmada para subir un archivo (válida 15 minutos)can_setupPlanned
POST/media/uploads/{upload_id}/completeConfirmar la carga; el medio se crea y procesacan_setupPlanned
GET/media/{id}Un medio, su vista previa y dónde se usacan_setupPlanned
PATCH/media/{id}Cambiar su descripción, acceso, precio o carpetacan_setupPlanned
DELETE/media/{id}Eliminarlo (rechazado si un paso de script lo usa)can_setupPlanned
GET/media/foldersCarpetas del Vault de una creadoracan_setupPlanned
POST/media/foldersCrear una carpetacan_setupPlanned
PATCH/media/folders/{id}Renombrar o mover una carpetacan_setupPlanned
DELETE/media/folders/{id}Eliminar una carpeta vacíacan_setupPlanned

El objeto 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"
}
CampoTipoDescripción
idstringComienza con med_
creator_idstringDe quién es el Vault
typestringphoto, video o voice
statusstringprocessing, ready o failed (con motivo)
folder_idstring o nullCarpeta del Vault
accessstringfree, teaser o paid
starsnumber o nullPrecio en Stars, obligatorio si access es paid (1 a 100,000)
descriptionstring o nullAyuda a la IA a elegir el medio correcto; nunca se muestra al fan
preview_urlstring o nullVista previa, una vez que el medio está ready
created_atstringISO 8601, UTC

Medios #

Listar medios #

GET /media · can_setup

ParámetroTipoObligatorioDescripción
creator_idstringSíLa creadora
folder_idstringNoSolo esta carpeta
typestringNophoto, video o voice; varios separados por comas
accessstringNofree, teaser o paid; varios separados por comas
limit, cursornumber, stringNoPaginación
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
}

Sin creator_id la API responde 400.

Subir un archivo #

Tres llamadas: pides una URL firmada, envías el archivo allí, confirmas.

Paso 1. POST /media/uploads · can_setup

ParámetroTipoObligatorioDescripción
creator_idstringSíA quién pertenece el Vault que lo recibe
file_namestringSíNombre del archivo, por ejemplo beach-01.jpg
content_typestringSíPor ejemplo image/jpeg o video/mp4
size_bytesnumberSíTamaño del archivo, hasta 2 GB
folder_idstringNoCarpeta del Vault donde ponerlo
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"
}

La URL es válida 15 minutos.

Paso 2. Envía el archivo con PUT a url, con exactamente los headers indicados (sin encabezado 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

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

El status pasa de processing a ready (se crean vistas previas y la copia para Telegram) o failed con un motivo. Un webhook media.ready te avisa cuándo, consulta Webhooks. Se aceptan: JPEG, PNG, HEIC, MP4, MOV, OGG y M4A, hasta 2 GB.

Obtener un medio #

GET /media/{id} · can_setup

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

La respuesta es el objeto media, con su vista previa y dónde se usa. Un id desconocido responde 404.

Precio y descripción #

PATCH /media/{id} · can_setup

ParámetroTipoObligatorioDescripción
accessstringNofree, teaser o paid
starsnumberCuando access es paid1 a 100,000
descriptionstringNoQué muestra, para la IA
folder_idstring o nullNoMoverlo a otra carpeta
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 respuesta es el medio actualizado. stars es obligatorio cuando access es paid (1 a 100,000), si no la API responde 400. La descripción ayuda a la IA a elegir el medio correcto; nunca se muestra al fan.

Eliminar un medio #

DELETE /media/{id} · can_setup

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

Un medio que un paso de script aún usa es rechazado (409): quítalo del script primero.

Carpetas #

Listar carpetas #

GET /media/folders · can_setup

ParámetroTipoObligatorioDescripción
creator_idstringSíDe quién es el Vault
curl "https://api.lanachat.ai/v1/media/folders?creator_id=cr_lea" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Crear una carpeta #

POST /media/folders · can_setup

ParámetroTipoObligatorioDescripción
creator_idstringSíDe quién es el Vault
namestringSíNombre de la carpeta
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"}'

Renombrar o mover una carpeta #

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

Eliminar una carpeta #

DELETE /media/folders/{id} · can_setup

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

Solo se puede eliminar una carpeta vacía; de lo contrario la API responde 409.

Las últimas novedades de Lana en Telegram

Novedades e invitaciones a la beta, primero en el canal.