
# Elenco degli ambienti per la CLI

`GET https://api.keenauth.com/v1/environments` · chiamato da `keenauth env list`

Elenca gli ambienti con cui puoi lavorare dalla CLI: gli ambienti dell'account con cui hai effettuato l'accesso tramite `keenauth login` e in cui hai un ruolo nella dashboard, tramite un'assegnazione a livello di account, progetto o ambiente. Gli ambienti eliminati e gli ambienti di progetti eliminati non vengono elencati. Non chiami tu questo endpoint; `keenauth env list` mostra l'elenco e `keenauth env use <environment_id>` ne sceglie uno.

Se sei membro di più account, l'elenco contiene solo gli ambienti dell'account del tuo accesso corrente; accedi all'altro account per vederne gli ambienti. Se non hai alcun ruolo in nessun ambiente, l'elenco è vuoto.

## Richiesta

Intestazioni:

| Intestazione | Obbligatoria | Descrizione |
| --- | --- | --- |
| `Authorization` | sì | `DPoP <access token>`: il token di accesso ricevuto dalla CLI al momento dell'accesso. |
| `DPoP` | sì | Una prova DPoP per questa richiesta (`htm` `GET`, `htu` `https://api.keenauth.com/v1/environments` senza la query), firmata con la chiave a cui è vincolato il token di accesso; contiene l'hash del token di accesso e il nonce del server. |

Parametri di query:

| Parametro | Descrizione |
| --- | --- |
| `limit` | Dimensione della pagina, da 1 a 100; predefinito 20. |
| `after` | Il valore `list_metadata.after` della pagina precedente. |

L'elenco pagina solo in avanti: `before` e `order` vengono rifiutati con `validation_failed`.

## Risposta

`200 OK` con `Cache-Control: no-store`, con l'ambiente più recente per primo:

| Campo | Descrizione |
| --- | --- |
| `data[].id` | L'ambiente (`env_…`); usalo con `keenauth env use` e con la richiesta del token di gestione. |
| `data[].slug` | L'etichetta DNS dell'ambiente (`<slug>.<region>.keenauth.app`). |
| `data[].display_name` | Il nome dell'ambiente. |
| `data[].environment_type` | `production`, `staging` o `development`. |
| `data[].region` | La regione dei dati dell'ambiente, ad esempio `eu`. |
| `data[].project_id` | Il progetto (`proj_…`). |
| `data[].project_name` | Il nome del progetto. |
| `data[].account_id` | L'account (`acct_…`). |
| `data[].dashboard_role` | Il tuo ruolo nella dashboard nell'ambiente (`owner`, `admin`, `developer`, `support`, `billing`, `viewer`, oppure `custom` quando solo ruoli personalizzati lo coprono). |
| `data[].created_at` | Quando l'ambiente è stato creato (RFC 3339, UTC). |
| `list_metadata.after` | Cursore della pagina successiva; `null` nell'ultima pagina. |
| `list_metadata.before` | Sempre `null`. |

Il cursore è legato a te e all'account; non funziona per un altro utente o per un altro accesso.

## Errori

| Stato | Codice | Quando |
| --- | --- | --- |
| 400 | `invalid_cursor` | Il cursore `after` è malformato, alterato o è stato emesso per un altro utente o account. |
| 401 | `unauthenticated` | Non è stato inviato alcun token di accesso. |
| 401 | `invalid_token` | Il token di accesso non è valido, è scaduto o non è quello della CLI; accedi di nuovo con `keenauth login`. |
| 401 | `invalid_dpop_proof` | La prova DPoP manca, è ripetuta o non corrisponde alla richiesta o alla chiave del token. |
| 401 | `use_dpop_nonce` | Riprova con una prova che contenga il nonce dell'intestazione di risposta `DPoP-Nonce`. |
| 401 | `insufficient_user_authentication` | È richiesta l'autenticazione a più fattori; accedi di nuovo. |
| 422 | `validation_failed` | `limit` non è un intero da 1 a 100, un parametro è ripetuto, oppure è stato inviato `before` o `order`. |

## Esempio

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