KeyEnvKeyEnv
API Reference

CLI

CLI authentication endpoints for device authorization flow

CLI

CLI authentication endpoints for device authorization flow

Initiate CLI login

POST /api/v1/cli/login

Initiates the CLI login flow, returns a URL to open in the browser

Operation ID: cliLogin · Authentication: none (public endpoint)

Request body

application/json (required)

FieldTypeRequiredDescription
redirect_uristring (uri)yes
device_namestringno

Responses

StatusDescriptionBody
200Login URL generatedCLILoginResponse
400Invalid requestError

Response body (200)

FieldTypeDescription
auth_urlstring (uri)
statestring
expires_inintegerSeconds until state expires
user_codestringVerification code derived from the state (first 8 uppercase hex chars of SHA-256(state), formatted XXXX-XXXX). The CLI displays it and the browser consent screen shows the same code so the user can confirm they match.

Example

curl -X POST "https://api.keyenv.dev/api/v1/cli/login" \
  -H "Content-Type: application/json" \
  -d '{"redirect_uri":"string","device_name":"string"}'

Complete CLI login

POST /api/v1/cli/callback

Called by the web app after browser authentication completes

Operation ID: cliCallback · Authentication: Authorization: Bearer <token>

Request body

application/json (required)

FieldTypeRequiredDescription
statestringyes

Responses

StatusDescriptionBody
200Login completedCLICallbackResponse
400Invalid requestError
401Authentication requiredError

Response body (200)

FieldTypeDescription
access_tokenstring
refresh_tokenstring
expires_atstring (date-time)
userobject

Example

curl -X POST "https://api.keyenv.dev/api/v1/cli/callback" \
  -H "Authorization: Bearer $KEYENV_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"state":"string"}'

Poll CLI login status

GET /api/v1/cli/status

Polls the status of a CLI login flow

Operation ID: cliStatus · Authentication: none (public endpoint)

Query parameters

NameTypeRequiredDescription
statestringyes

Responses

StatusDescriptionBody
200Login statusCLIStatusResponse
400Invalid requestError

Response body (200)

FieldTypeDescription
statusenum (pending, completed, expired)
refresh_tokenstring
userobject
expires_atstring (date-time)

Example

curl -X GET "https://api.keyenv.dev/api/v1/cli/status"

Refresh CLI token

POST /api/v1/cli/refresh

Refreshes an expired access token using a refresh token

Operation ID: cliRefresh · Authentication: none (public endpoint)

Request body

application/json (required)

FieldTypeRequiredDescription
refresh_tokenstringyes

Responses

StatusDescriptionBody
200New access tokenCLIRefreshResponse
400Invalid requestError
401Authentication requiredError

Response body (200)

FieldTypeDescription
access_tokenstring
expires_atstring (date-time)

Example

curl -X POST "https://api.keyenv.dev/api/v1/cli/refresh" \
  -H "Content-Type: application/json" \
  -d '{"refresh_token":"string"}'

CLI logout

POST /api/v1/cli/logout

Revokes the CLI session

Operation ID: cliLogout · Authentication: none (public endpoint)

Request body

application/json (required)

FieldTypeRequiredDescription
refresh_tokenstringyes

Responses

StatusDescriptionBody
200Logged out
400Invalid requestError

Example

curl -X POST "https://api.keyenv.dev/api/v1/cli/logout" \
  -H "Content-Type: application/json" \
  -d '{"refresh_token":"string"}'

CLI whoami

GET /api/v1/cli/whoami

Returns the current user and session info

Operation ID: cliWhoami · Authentication: Authorization: Bearer <token>

Responses

StatusDescriptionBody
200User and session infoCLIWhoamiResponse
401Authentication requiredError

Response body (200)

FieldTypeDescription
userobject
teamsobject[]
session_created_atstring (date-time)

Example

curl -X GET "https://api.keyenv.dev/api/v1/cli/whoami" \
  -H "Authorization: Bearer $KEYENV_TOKEN"

On this page