
# CLI için ortamlarınızı listeleyin

`GET https://api.keenauth.com/v1/environments` · `keenauth env list` çağırır

CLI ile çalışabileceğiniz ortamları listeler: `keenauth login` ile oturum açtığınız hesabın, hesap, proje ya da ortam ataması yoluyla pano rolünüz olan ortamları. Silinmiş ortamlar ve silinmiş projelerin ortamları listelenmez. Bu ucu kendiniz çağırmazsınız; `keenauth env list` listeyi gösterir, `keenauth env use <environment_id>` birini seçer.

Birden çok hesabın üyesiyseniz liste yalnız geçerli oturumunuzun hesabının ortamlarını içerir; diğer hesabın ortamlarını görmek için o hesapla oturum açın. Hiçbir ortamda rolünüz yoksa liste boştur.

## İstek

Başlıklar:

| Başlık | Zorunlu | Açıklama |
| --- | --- | --- |
| `Authorization` | evet | `DPoP <erişim tokenı>`: oturum açtığınızda CLI'nin aldığı erişim tokenı. |
| `DPoP` | evet | Bu istek için (`htm` `GET`, `htu` sorgusuz `https://api.keenauth.com/v1/environments`), erişim tokenının bağlı olduğu anahtarla imzalanmış DPoP kanıtı; erişim tokenının özetini ve sunucu nonce'unu taşır. |

Sorgu parametreleri:

| Parametre | Açıklama |
| --- | --- |
| `limit` | Sayfa boyutu, 1–100; varsayılan 20. |
| `after` | Önceki sayfanın `list_metadata.after` değeri. |

Liste yalnız ileri sayfalanır: `before` ve `order` `validation_failed` ile reddedilir.

## Yanıt

`200 OK`, `Cache-Control: no-store` ile, en yeni ortam önce:

| Alan | Açıklama |
| --- | --- |
| `data[].id` | Ortam (`env_…`); `keenauth env use` ve yönetim tokenı isteğinde kullanılır. |
| `data[].slug` | Ortamın DNS etiketi (`<slug>.<region>.keenauth.app`). |
| `data[].display_name` | Ortamın adı. |
| `data[].environment_type` | `production`, `staging` ya da `development`. |
| `data[].region` | Ortam verisinin bölgesi, örneğin `eu`. |
| `data[].project_id` | Proje (`proj_…`). |
| `data[].project_name` | Projenin adı. |
| `data[].account_id` | Hesap (`acct_…`). |
| `data[].dashboard_role` | Ortamdaki pano rolünüz (`owner`, `admin`, `developer`, `support`, `billing`, `viewer`; yalnız özel roller kapsıyorsa `custom`). |
| `data[].created_at` | Ortamın oluşturulma zamanı (RFC 3339, UTC). |
| `list_metadata.after` | Sonraki sayfanın imleci; son sayfada `null`. |
| `list_metadata.before` | Her zaman `null`. |

İmleç size ve hesaba bağlıdır; başka bir kullanıcıda ya da başka bir oturumda çalışmaz.

## Hatalar

| Durum | Kod | Ne zaman |
| --- | --- | --- |
| 400 | `invalid_cursor` | `after` imleci bozuk, değiştirilmiş ya da başka bir kullanıcı veya hesap için verilmiş. |
| 401 | `unauthenticated` | Erişim tokenı gönderilmedi. |
| 401 | `invalid_token` | Erişim tokenı geçersiz, süresi dolmuş ya da CLI'nin değil; `keenauth login` ile yeniden oturum açın. |
| 401 | `invalid_dpop_proof` | DPoP kanıtı yok, birden çok ya da istekle veya tokenın anahtarıyla uyuşmuyor. |
| 401 | `use_dpop_nonce` | `DPoP-Nonce` yanıt başlığındaki nonce'u taşıyan bir kanıtla yeniden deneyin. |
| 401 | `insufficient_user_authentication` | Çok faktörlü kimlik doğrulama gerekir; yeniden oturum açın. |
| 422 | `validation_failed` | `limit` 1–100 arası bir tamsayı değil, bir parametre tekrarlanmış ya da `before` veya `order` gönderilmiş. |

## Örnek

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