API: miembros del equipo, roles y tokens de acceso
Tu equipo son las personas que trabajan en el espacio de trabajo. Cada miembro tiene un rol (integrado o personalizado) que define lo que puede hacer, las creadoras en las que trabaja y una clave de acceso personal para iniciar sesión. Los tokens de acceso son las llaves de la API y de la conexión MCP. Todos estos endpoints requieren un token de owner: en los ejemplos, $LANACHAT_TOKEN contiene uno.
Endpoints #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /members | Listar miembros (status=active,disabled, role_id=, q=) | owner | Planned |
| POST | /members | Añadir un miembro con un rol y creadoras | owner | Planned |
| GET | /members/{id} | Un miembro, última actividad y sobrescrituras | owner | Planned |
| PATCH | /members/{id} | Cambiar rol, creadoras, sobrescrituras; deshabilitar o habilitar | owner | Planned |
| DELETE | /members/{id} | Eliminar un miembro (sus mensajes pasados mantienen su nombre) | owner | Planned |
| POST | /members/{id}/access-key | Crear una clave de acceso personal (se muestra una vez) | owner | Planned |
| POST | /members/{id}/invitation | Enviar por e-mail una clave de acceso al miembro | owner | Planned |
| DELETE | /members/{id}/access-key | Revocar la clave del miembro: se cierra su sesión | owner | Planned |
| GET | /roles | Roles integrados y personalizados con su tabla de permisos | owner | Planned |
| POST | /roles | Crear un rol personalizado | owner | Planned |
| PATCH | /roles/{id} | Renombrar un rol o cambiar sus permisos | owner | Planned |
| DELETE | /roles/{id} | Eliminar un rol personalizado que ningún miembro tenga | owner | Planned |
| GET | /tokens | Tokens de acceso API y MCP (include_revoked=true) | owner | Planned |
| POST | /tokens | Crear un token con sus permisos (se muestra una vez) | owner | Planned |
| PATCH | /tokens/{id} | Renombrar un token o cambiar sus permisos | owner | Planned |
| POST | /tokens/{id}/rotate | Reemplazar el secreto; el anterior se desactiva al instante | owner | Planned |
| DELETE | /tokens/{id} | Revocar un token | owner | Planned |
El objeto miembro #
{
"id": "mem_4",
"name": "Ana",
"email": "[email protected]",
"status": "active",
"role_id": "role_chatter",
"creator_ids": ["cr_lea", "cr_mia"],
"overrides": { "billing.read": false, "fans.export": true },
"access_key": { "active": true, "created_at": "2026-09-20T09:00:00Z" },
"last_active_at": "2026-10-06T13:40:00Z"
}
| Field | Type | Description |
|---|---|---|
id | string | Empieza con mem_ |
name | string | Su nombre en la Console |
email | string o null | Donde se envía la invitación |
status | string | active o disabled |
role_id | string | Su rol |
creator_ids | array de strings | Las creadoras en las que trabaja |
overrides | object | Permisos establecidos solo para este miembro, encima del rol |
access_key | object | Si tiene una clave de acceso personal active y desde cuándo; nunca la clave en sí |
last_active_at | string o null | Su última actividad |
Un miembro deshabilitado no puede iniciar sesión y conserva su historial, rol y creadoras.
El objeto rol #
{
"id": "role_chatter",
"name": "Chatter",
"builtin": true,
"permissions": { "live.read": true, "live.reply": true, "fans.read": true, "fans.export": false, "billing.read": false },
"members": 6
}
| Field | Type | Description |
|---|---|---|
id | string | El rol |
name | string | Su nombre |
builtin | boolean | true para Owner, Manager y Chatter |
permissions | object | Una clave por fila de la tabla de permisos, true o false |
members | integer | Cuántos miembros lo tienen |
Las claves de permisos siguen las filas de la tabla de permisos en Team Management › Roles, agrupadas por área: Dashboard, Creators, AI Brain, Conversations, Vault, Scripts, Playground, Telegram y Employees. Owner siempre tiene todos los permisos y no puede editarse. Manager y Chatter son integrados: puedes cambiar sus permisos pero no renombrarlos ni eliminarlos.
El objeto token de acceso #
{
"id": "tok_31",
"name": "Reporting script",
"permissions": ["can_fan_read", "can_sales_read"],
"status": "active",
"created_at": "2026-10-06T15:10:00Z",
"expires_at": "2027-01-04T15:10:00Z"
}
| Field | Type | Description |
|---|---|---|
id | string | Empieza con tok_ |
name | string | Hasta 100 caracteres, obligatorio |
permissions | array de strings | Los permisos que tiene |
status | string | Activo, expirado o revocado |
created_at, expires_at | string | ISO 8601, UTC |
token | string | El secreto, solo en la respuesta que lo crea o rota |
Miembros #
Listar miembros #
GET /members · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | active o disabled; ambos separados por coma |
role_id | string | No | Solo miembros con este rol |
q | string | No | Parte de un nombre |
limit, cursor | number, string | No | Paginación |
curl "https://api.lanachat.ai/v1/members?status=active&role_id=role_chatter" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
{
"data": [
{ "id": "mem_4", "name": "Ana", "email": "[email protected]", "status": "active", "role_id": "role_chatter", "creator_ids": ["cr_lea", "cr_mia"], "overrides": {}, "access_key": { "active": true, "created_at": "2026-09-20T09:00:00Z" }, "last_active_at": "2026-10-06T13:40:00Z" }
],
"next_cursor": null
}
Añadir un miembro #
POST /members · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Sí | Su nombre |
email | string | No | Necesario para enviar invitación |
role_id | string | Sí | Un rol integrado o personalizado |
creator_ids | array de strings | No | Las creadoras en las que trabaja |
curl -X POST https://api.lanachat.ai/v1/members \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name": "Ana", "email": "[email protected]", "role_id": "role_chatter", "creator_ids": ["cr_lea"]}'
La respuesta es el nuevo miembro (201), activo, sin clave de acceso aún.
Obtener un miembro #
GET /members/{id} · owner
curl https://api.lanachat.ai/v1/members/mem_4 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La respuesta es el objeto miembro. Un id desconocido responde 404.
Actualizar un miembro #
PATCH /members/{id} · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
role_id | string | No | Nuevo rol |
creator_ids | array de strings | No | Reemplaza su lista de creadoras |
overrides | object | No | Permisos solo para este miembro |
status | string | No | active o disabled |
curl -X PATCH https://api.lanachat.ai/v1/members/mem_4 \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"creator_ids": ["cr_lea", "cr_mia"], "overrides": {"fans.export": true}}'
La respuesta es el miembro actualizado. status: "disabled" corta el acceso al instante; se mantienen el rol y las creadoras.
Eliminar un miembro #
DELETE /members/{id} · owner
curl -X DELETE https://api.lanachat.ai/v1/members/mem_4 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
El miembro se elimina y sus creadoras quedan sin asignar. Sus mensajes pasados mantienen su nombre. Para conservarlos para más tarde, deshabilítalo en vez de eliminarlo.
Claves de acceso personales #
Los miembros del equipo no usan contraseña: inician sesión con una clave de acceso personal. Las claves empiezan con emp_.
Crear una clave de acceso #
POST /members/{id}/access-key · owner
curl -X POST https://api.lanachat.ai/v1/members/mem_4/access-key \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"
{ "member_id": "mem_4", "sign_in_url": "https://app.lanachat.ai/login/?mode=employee", "access_key": "emp_6Yq2…", "shown_once": true }
Envía tanto la dirección para iniciar sesión como la clave a la persona por un canal que confíes. Un miembro deshabilitado responde 409: habilítalo primero.
Enviar por e-mail una clave de acceso #
POST /members/{id}/invitation · owner
curl -X POST https://api.lanachat.ai/v1/members/mem_4/invitation \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"
La clave se envía por e-mail a la dirección en su ficha. Un miembro sin e-mail, o deshabilitado, responde 409.
Revocar una clave de acceso #
DELETE /members/{id}/access-key · owner
curl -X DELETE https://api.lanachat.ai/v1/members/mem_4/access-key \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La clave se desactiva al instante y el miembro se cierra sesión. Crea una nueva clave para que pueda volver a entrar.
Roles #
Listar roles #
GET /roles · owner
curl https://api.lanachat.ai/v1/roles \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Una lista de objetos rol: Owner, Manager, Chatter y tus roles personalizados.
Crear un rol personalizado #
POST /roles · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Sí | Nombre del rol |
permissions | object | No | Las filas a activar; las demás quedan desactivadas |
curl -X POST https://api.lanachat.ai/v1/roles \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name": "Night chatter", "permissions": {"live.read": true, "live.reply": true, "fans.read": true}}'
La respuesta es el nuevo rol (201) con builtin: false.
Actualizar un rol #
PATCH /roles/{id} · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | No | Nuevo nombre (solo roles personalizados) |
permissions | object | No | Las filas a cambiar; las demás se mantienen |
curl -X PATCH https://api.lanachat.ai/v1/roles/role_chatter \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"permissions": {"fans.export": false}}'
El cambio se aplica al instante a todos los miembros con ese rol, excepto sus sobrescrituras propias. Editar Owner, o renombrar Manager o Chatter, responde 409.
Eliminar un rol personalizado #
DELETE /roles/{id} · owner
curl -X DELETE https://api.lanachat.ai/v1/roles/role_night \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Eliminar un rol que todavía tienen miembros responde 409: asígnales otro rol primero. Los roles integrados no pueden eliminarse.
Tokens de acceso #
Listar tokens #
GET /tokens · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
include_revoked | boolean | No | true también lista tokens revocados |
curl "https://api.lanachat.ai/v1/tokens?include_revoked=true" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Una lista de objetos token de acceso, sin su secreto.
Crear un token #
POST /tokens · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Sí | Para qué sirve, hasta 100 caracteres |
permissions | array de strings | Sí | Los permisos que obtiene |
expires_in_days | integer | No | Cuándo expira |
curl -X POST https://api.lanachat.ai/v1/tokens \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name": "Reporting script", "permissions": ["can_fan_read", "can_sales_read"], "expires_in_days": 90}'
{ "id": "tok_31", "name": "Reporting script", "token": "lc_live_8f2c1d0e9b7a4c6f", "permissions": ["can_fan_read", "can_sales_read"], "expires_at": "2027-01-04T15:10:00Z" }
token está solo en esta respuesta. Un token nunca puede otorgar más permisos que el token owner que lo creó. Un nombre faltante responde 400.
Actualizar un token #
PATCH /tokens/{id} · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | No | Nuevo nombre |
permissions | array de strings | No | Reemplaza sus permisos |
curl -X PATCH https://api.lanachat.ai/v1/tokens/tok_31 \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"permissions": ["can_sales_read"]}'
La respuesta es el token, sin su secreto. Desactivar can_engine también elimina permisos de publicación, Advanced AI y reportes de experimentos. Un token revocado responde 409.
Rotar un token #
POST /tokens/{id}/rotate · owner
curl -X POST https://api.lanachat.ai/v1/tokens/tok_31/rotate \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"
La respuesta es el token con un nuevo secreto token, mostrado una vez. El secreto antiguo se desactiva al instante, así que actualiza tu script justo después. Un token revocado responde 409.
Revocar un token #
DELETE /tokens/{id} · owner
curl -X DELETE https://api.lanachat.ai/v1/tokens/tok_31 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
El token se desactiva al instante. Un token ya revocado responde 409.
Advertencia Un token funciona como una contraseña. Revócalo tan pronto dejes de usarlo o sospeches que se filtró.