
# Listar tus entornos para la CLI

`GET https://api.keenauth.com/v1/environments` · llamado por `keenauth env list`

Lista los entornos en los que puedes trabajar con la CLI: los entornos de la cuenta con la que iniciaste sesión con `keenauth login` y en los que tienes un rol del panel, mediante una asignación a nivel de cuenta, proyecto o entorno. Los entornos eliminados y los entornos de proyectos eliminados no se listan. No llamas tú a este endpoint; `keenauth env list` muestra la lista y `keenauth env use <environment_id>` elige uno.

Si eres miembro de más de una cuenta, la lista contiene solo los entornos de la cuenta de tu inicio de sesión actual; inicia sesión en la otra cuenta para ver sus entornos. Si no tienes ningún rol en ningún entorno, la lista está vacía.

## Solicitud

Encabezados:

| Encabezado | Obligatorio | Descripción |
| --- | --- | --- |
| `Authorization` | sí | `DPoP <access token>`: el token de acceso que la CLI recibió cuando iniciaste sesión. |
| `DPoP` | sí | Una prueba DPoP para esta solicitud (`htm` `GET`, `htu` `https://api.keenauth.com/v1/environments` sin la consulta), firmada con la clave a la que está vinculado el token de acceso; contiene el hash del token de acceso y el nonce del servidor. |

Parámetros de consulta:

| Parámetro | Descripción |
| --- | --- |
| `limit` | Tamaño de página, de 1 a 100; predeterminado 20. |
| `after` | El valor `list_metadata.after` de la página anterior. |

La lista pagina solo hacia adelante: `before` y `order` se rechazan con `validation_failed`.

## Respuesta

`200 OK` con `Cache-Control: no-store`, el entorno más reciente primero:

| Campo | Descripción |
| --- | --- |
| `data[].id` | El entorno (`env_…`); úsalo con `keenauth env use` y con la solicitud del token de gestión. |
| `data[].slug` | La etiqueta DNS del entorno (`<slug>.<region>.keenauth.app`). |
| `data[].display_name` | El nombre del entorno. |
| `data[].environment_type` | `production`, `staging` o `development`. |
| `data[].region` | La región de los datos del entorno, por ejemplo `eu`. |
| `data[].project_id` | El proyecto (`proj_…`). |
| `data[].project_name` | El nombre del proyecto. |
| `data[].account_id` | La cuenta (`acct_…`). |
| `data[].dashboard_role` | Tu rol del panel en el entorno (`owner`, `admin`, `developer`, `support`, `billing`, `viewer`, o `custom` cuando solo lo cubren roles personalizados). |
| `data[].created_at` | Cuándo se creó el entorno (RFC 3339, UTC). |
| `list_metadata.after` | Cursor de la página siguiente; `null` en la última página. |
| `list_metadata.before` | Siempre `null`. |

El cursor está vinculado a ti y a la cuenta; no funciona para otro usuario ni para otro inicio de sesión.

## Errores

| Estado | Código | Cuándo |
| --- | --- | --- |
| 400 | `invalid_cursor` | El cursor `after` está mal formado, fue alterado o se emitió para otro usuario o cuenta. |
| 401 | `unauthenticated` | No se envió ningún token de acceso. |
| 401 | `invalid_token` | El token de acceso no es válido, expiró o no es el de la CLI; inicia sesión de nuevo con `keenauth login`. |
| 401 | `invalid_dpop_proof` | La prueba DPoP falta, está repetida o no coincide con la solicitud ni con la clave del token. |
| 401 | `use_dpop_nonce` | Reintenta con una prueba que contenga el nonce del encabezado de respuesta `DPoP-Nonce`. |
| 401 | `insufficient_user_authentication` | Se requiere autenticación multifactor; inicia sesión de nuevo. |
| 422 | `validation_failed` | `limit` no es un entero de 1 a 100, un parámetro está repetido, o se envió `before` u `order`. |

## Ejemplo

```bash
curl "https://api.keenauth.com/v1/environments?limit=50" \
  -H "Authorization: DPoP $ACCESS_TOKEN" \
  -H "DPoP: $DPOP_PROOF"
```
