
# CLI용 환경 목록 조회

`GET https://api.keenauth.com/v1/environments` · `keenauth env list`가 호출합니다

`keenauth login`으로 로그인한 계정에서 대시보드 역할을 가진 환경 중 CLI로 작업할 수 있는 환경을 나열합니다. 계정, 프로젝트 또는 환경 할당을 통해 역할이 부여된 환경이 포함됩니다. 삭제된 환경과 삭제된 프로젝트의 환경은 나열되지 않습니다. 이 엔드포인트를 직접 호출할 필요는 없습니다. `keenauth env list`가 목록을 표시하고, `keenauth env use <environment_id>`로 환경을 선택합니다.

여러 계정의 구성원이라면 목록에는 현재 로그인한 계정의 환경만 포함됩니다. 다른 계정의 환경을 보려면 해당 계정으로 로그인하십시오. 어떤 환경에도 역할이 없으면 목록은 비어 있습니다.

## 요청

헤더:

| 헤더 | 필수 | 설명 |
| --- | --- | --- |
| `Authorization` | 예 | `DPoP <access token>`: 로그인할 때 CLI가 받은 액세스 토큰입니다. |
| `DPoP` | 예 | 이 요청에 대한 DPoP 증명(`htm` `GET`, 쿼리를 제외한 `htu` `https://api.keenauth.com/v1/environments`)으로, 액세스 토큰이 바인딩된 키로 서명합니다. 액세스 토큰의 해시와 서버 nonce를 포함합니다. |

쿼리 매개변수:

| 매개변수 | 설명 |
| --- | --- |
| `limit` | 페이지 크기, 1~100; 기본값 20. |
| `after` | 이전 페이지의 `list_metadata.after` 값입니다. |

목록은 앞으로만 페이지를 나눕니다. `before`와 `order`는 `validation_failed`로 거부됩니다.

## 응답

`200 OK`와 `Cache-Control: no-store`, 가장 최근 환경이 먼저 나옵니다:

| 필드 | 설명 |
| --- | --- |
| `data[].id` | 환경(`env_…`)입니다. `keenauth env use` 및 관리 토큰 요청에 사용합니다. |
| `data[].slug` | 환경의 DNS 레이블(`<slug>.<region>.keenauth.app`)입니다. |
| `data[].display_name` | 환경의 이름입니다. |
| `data[].environment_type` | `production`, `staging` 또는 `development`입니다. |
| `data[].region` | 환경 데이터의 리전입니다(예: `eu`). |
| `data[].project_id` | 프로젝트(`proj_…`)입니다. |
| `data[].project_name` | 프로젝트의 이름입니다. |
| `data[].account_id` | 계정(`acct_…`)입니다. |
| `data[].dashboard_role` | 환경에서의 대시보드 역할입니다(`owner`, `admin`, `developer`, `support`, `billing`, `viewer`, 또는 사용자 지정 역할만 해당하는 경우 `custom`). |
| `data[].created_at` | 환경이 생성된 시각입니다(RFC 3339, UTC). |
| `list_metadata.after` | 다음 페이지의 커서입니다. 마지막 페이지에서는 `null`입니다. |
| `list_metadata.before` | 항상 `null`입니다. |

커서는 사용자와 계정에 바인딩되며, 다른 사용자나 다른 로그인에서는 작동하지 않습니다.

## 오류

| 상태 | 코드 | 발생 시점 |
| --- | --- | --- |
| 400 | `invalid_cursor` | `after` 커서가 잘못되었거나 변경되었거나, 다른 사용자 또는 계정용으로 발급되었습니다. |
| 401 | `unauthenticated` | 액세스 토큰이 전송되지 않았습니다. |
| 401 | `invalid_token` | 액세스 토큰이 유효하지 않거나 만료되었거나 CLI의 토큰이 아닙니다. `keenauth login`으로 다시 로그인하십시오. |
| 401 | `invalid_dpop_proof` | DPoP 증명이 없거나 중복되었거나, 요청 또는 토큰의 키와 일치하지 않습니다. |
| 401 | `use_dpop_nonce` | 응답 헤더 `DPoP-Nonce`의 nonce를 포함한 증명으로 다시 시도하십시오. |
| 401 | `insufficient_user_authentication` | 다중 인증이 필요합니다. 다시 로그인하십시오. |
| 422 | `validation_failed` | `limit`이 1~100의 정수가 아니거나, 매개변수가 반복되었거나, `before` 또는 `order`가 전송되었습니다. |

## 예시

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