# API: miembros del equipo, roles y tokens de acceso

_API · 6 min de lectura · Actualizado 2026-10-22 · https://lanachat.ai/guides/es/api-team/_

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

```json
{
  "id": "mem_4",
  "name": "Ana",
  "email": "ana@mia-agency.com",
  "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

```json
{
  "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

```json
{
  "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](https://lanachat.ai/guides/es/api-overview/) 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](https://lanachat.ai/guides/es/api-overview/) |

```bash
curl "https://api.lanachat.ai/v1/members?status=active&role_id=role_chatter" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
```

```json
{
  "data": [
    { "id": "mem_4", "name": "Ana", "email": "ana@mia-agency.com", "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 |

```bash
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": "ana@mia-agency.com", "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`

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

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

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

```bash
curl -X POST https://api.lanachat.ai/v1/members/mem_4/access-key \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"
```

```json
{ "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`

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

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

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

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

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

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

```bash
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](https://lanachat.ai/guides/es/api-overview/) que obtiene |
| `expires_in_days` | integer | No | Cuándo expira |

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

```json
{ "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 |

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

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

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

> Warning: Un token funciona como una contraseña. Revócalo tan pronto dejes de usarlo o sospeches que se filtró.

## Artículos relacionados

- [API de LanaChat: inicio rápido, autenticación y errores](https://lanachat.ai/guides/es/api-overview/)
- [Gestión del equipo: empleados y roles](https://lanachat.ai/guides/es/team-and-roles/)
- [Roles personalizados y la tabla de permisos](https://lanachat.ai/guides/es/custom-roles/)
- [Claves de acceso personal](https://lanachat.ai/guides/es/personal-access-keys/)
