LanaChat

API: Mídia do Vault e uploads assinados

Leitura de 5 minAtualizado Markdown

O Vault armazena fotos, vídeos e notas de voz de uma criadora, organizados em pastas. Cada item é Free, Teaser ou Paid com um preço em Stars. Os arquivos nunca passam pela API: você solicita uma URL de upload assinada, envia o arquivo para lá e depois confirma.

Endpoints #

MethodPathDescriptionPermissionStatus
GET/mediaListar mídia (creator_id= obrigatório, folder_id=, type=photo,video,voice, access=free,teaser,paid)can_setupPlanned
POST/media/uploadsObter uma URL assinada para enviar um arquivo (válida por 15 minutos)can_setupPlanned
POST/media/uploads/{upload_id}/completeConfirmar o upload; a mídia é criada e processadacan_setupPlanned
GET/media/{id}Uma mídia, sua prévia e onde é usadacan_setupPlanned
PATCH/media/{id}Alterar descrição, acesso, preço ou pastacan_setupPlanned
DELETE/media/{id}Excluir (recusado se um passo do script estiver usando)can_setupPlanned
GET/media/foldersPastas do Vault de uma criadoracan_setupPlanned
POST/media/foldersCriar uma pastacan_setupPlanned
PATCH/media/folders/{id}Renomear ou mover uma pastacan_setupPlanned
DELETE/media/folders/{id}Excluir uma pasta vaziacan_setupPlanned

O objeto 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"
}
FieldTypeDescription
idstringComeça com med_
creator_idstringDe quem é o Vault
typestringphoto, video ou voice
statusstringprocessing, ready ou failed (com motivo)
folder_idstring ou nullPasta do Vault
accessstringfree, teaser ou paid
starsnumber ou nullPreço em Stars, obrigatório se access for paid (1 a 100.000)
descriptionstring ou nullAjuda a AI a escolher a mídia certa; nunca mostrado para o fã
preview_urlstring ou nullUma prévia, quando a mídia estiver ready
created_atstringISO 8601, UTC

Mídia #

Listar mídia #

GET /media · can_setup

ParameterTypeRequiredDescription
creator_idstringSimA criadora
folder_idstringNãoApenas essa pasta
typestringNãophoto, video ou voice; vários separados por vírgulas
accessstringNãofree, teaser ou paid; vários separados por vírgulas
limit, cursornumber, stringNãoPaginação
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
}

Sem creator_id a API responde 400.

Enviar um arquivo #

Três chamadas: pede uma URL assinada, envia o arquivo para lá, confirma.

Passo 1. POST /media/uploads · can_setup

ParameterTypeRequiredDescription
creator_idstringSimPara qual Vault será enviado
file_namestringSimNome do arquivo, ex: beach-01.jpg
content_typestringSimExemplo: image/jpeg ou video/mp4
size_bytesnumberSimTamanho do arquivo, até 2 GB
folder_idstringNãoPasta do Vault onde será colocado
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"
}

A URL é válida por 15 minutos.

Passo 2. Envie o arquivo com PUT para url, usando exatamente os headers fornecidos (sem cabeçalho 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

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

O status muda de processing para ready (prévias e cópia para Telegram são feitas) ou failed com um motivo. Um webhook media.ready avisa quando, veja Webhooks. Aceitos: JPEG, PNG, HEIC, MP4, MOV, OGG e M4A, até 2 GB.

Obter uma mídia #

GET /media/{id} · can_setup

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

A resposta é o objeto mídia, com sua prévia e onde é usada. Um id desconhecido responde 404.

Preço e descrição #

PATCH /media/{id} · can_setup

ParameterTypeRequiredDescription
accessstringNãofree, teaser ou paid
starsnumberQuando access for paid1 a 100.000
descriptionstringNãoO que mostra, para a AI
folder_idstring ou nullNãoMover para outra pasta
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"}'

A resposta é a mídia atualizada. stars é obrigatório se access for paid (1 a 100.000), senão a API responde 400. A descrição ajuda a AI a escolher a mídia certa; nunca é mostrada para o fã.

Excluir uma mídia #

DELETE /media/{id} · can_setup

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

Uma mídia que um passo do script ainda usa é recusada (409): remova-a do script primeiro.

Pastas #

Listar pastas #

GET /media/folders · can_setup

ParameterTypeRequiredDescription
creator_idstringSimDe quem é o Vault
curl "https://api.lanachat.ai/v1/media/folders?creator_id=cr_lea" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Criar uma pasta #

POST /media/folders · can_setup

ParameterTypeRequiredDescription
creator_idstringSimDe quem é o Vault
namestringSimNome da pasta
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"}'

Renomear ou mover uma pasta #

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

Excluir uma pasta #

DELETE /media/folders/{id} · can_setup

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

Só uma pasta vazia pode ser excluída; caso contrário a API responde 409.

As últimas novidades da Lana no Telegram

Novidades e convites para o beta, primeiro no canal.