Coder logo

Public API

To help you integrate Coder into your automated workflows, we've documented our API.

Documentation

Please note that the API is under active development; expect breaking changes as we finalize the endpoints.

Authentication

Use of the API requires authentication with a session token. You can generate one using the Coder CLI:

  1. If you haven't already, authenticate your CLI with your workspace.

  2. Run coder tokens create <TOKEN_NAME>

  3. Save the token that's returned to use in your HTTP headers:

    curl \
    -X GET "https://apidocs.coder.com/api/" \
    -H "accept: application/json" \
    -H "Session-Token: Bk...nt"
    

Examples

These are example Coder API calls for common tasks. Note that the site-manager role is required to be perform specific actions and without it, API results will be limited to a user's member role.

Assign your Access URL, Session-Token and other resources like images and workspaces to variables for easier substitution in the curl commands.

export ACCESS_URL "https://coder.acme.com"
export API_KEY="MUdzI3UMvF-Qlwovt-----0CL0kTbADQl"
export API_ROUTE="api/v0"
export IMAGE_ID="622b3f6e-dd6fd08-----ba38c73c9639"

Example: get active SSH users in 1 week increments in August

For a full list of categories and filters, see Usage metrics.

# Currently in the private API
API_ROUTE=api/private curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/metrics/activity?\
start=2022-08-01T00:00:00.000000Z&end=2022-08-31T00:00:00.000000Z\
&category=tunnel\
&interval=1 week" \
--header "Session-Token: $API_KEY"

Example: get audit logs for a workspace and resource type

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/audit?\
limit=10\
&resource_id=$WS_ID_PHP\
&resource_type=environment" \
  --header "Session-Token: $API_KEY"

Example: get audit logs for workspace created in a Unix seconds period

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/audit?\
range_start=1646092800\
&range_end=1646697600\
&resource_type=environment\
&action=create" \
--header "Session-Token: $API_KEY"

Example: generate a session token for a user

curl --request POST \
  --url $ACCESS_URL/$API_ROUTE/api-keys/613e75c4-faef2f87-----376e1f229b6 \
  --header "Content-Type: application/json" \
  --header "Session-Token: $API_KEY" \
  --data '{
    "name": "my-session-token"
  }'

Example: get the workspaces created by a user

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/workspaces?users=$USER_ID" \
  --header "Session-Token: $API_KEY"

Example: get the workspaces built with a specific image

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/images/$IMAGE_ID" \
  --header "Session-Token: $API_KEY"

Example: get info about an image tag and workspaces built with it

Change latest to your tag name

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/images/$IMAGE_ID/tags/latest" \
  --header "Session-Token: $API_KEY"

Example: get the workspaces in a specific organization

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/workspaces?orgs=$ORG_ID" \
  --header "Session-Token: $API_KEY"

Example: get the images authorized in a specific organization

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/images/?org=$ORG_ID&workspaces=false" \
  --header "Session-Token: $API_KEY"

Example: update image tags from a registry

curl --request POST \
  --url "$ACCESS_URL/$API_ROUTE/images/$IMAGE_ID" \
  --header "Session-Token: $API_KEY" \
  --data "{}"

Example: update the compute resources baseline for an image

curl --request PATCH \
  --url "$ACCESS_URL/$API_ROUTE/images/$IMAGE_ID" \
  --header "Session-Token: $API_KEY" \
  --data "{
      \"default_memory_gb\": 8,
      \"description\": \"3/26/22 increased RAM from 4 to 8 GB\"
  }"

Example: import a container image

curl --request POST \
  --url "$ACCESS_URL/$API_ROUTE/images" \
  --header "Session-Token: $API_KEY" \
  --header "Content-Type: application/json" \
  --data "{
  \"default_cpu_cores\": 4,
  \"default_disk_gb\": 4,
  \"default_memory_gb\": 10,
  \"description\": \"IntelliJ 2020.3.4\",
  \"org_id\": \"$ORG_ID\",
  \"registry_id\": \"$REG_ID\",
  \"repository\": \"marktmilligan/intellij-ultimate\",
  \"tag\": \"2020.3.4\"
}"

Example: deprecate an image (and its tags)

curl --request PATCH \
  --url "$ACCESS_URL/$API_ROUTE/images/$IMAGE_ID" \
  --header "Session-Token: $API_KEY" \
  --data "{
      \"deprecated\": true
  }"

Example: Restart/rebuild a workspace

curl --request PATCH \
  --url $ACCESS_URL/$API_ROUTE/workspaces/$WS_ID \
  --header "Content-Type: application/json" \
  --header "Session-Token: $API_KEY" \
  --data "{}"

Example: How to create a user

curl --request POST \
  --url "$ACCESS_URL/$API_ROUTE/users" \
  --header "Session-Token: $API_KEY" \
  --header "Content-Type: application/json" \
  --data "{
  \"email\": \"bob@acme.com\",
  \"login_type\": \"built-in\",
  \"name\": \"Bob Barker\",
  \"password\": \"password\",
  \"temporary_password\": true,
  \"username\": \"bbarker\",
  \"organizations\": [\"default\",\"$ORG_ID\"]
}"

Example: Get a user's public SSH key

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/users/$USER_ID/sshkey" \
  --header "Session-Token: $API_KEY"

Example: Create a dev URL

curl --request POST \
  --url "$ACCESS_URL/$API_ROUTE/workspaces/$WS_ID_PHP/devurls" \
  --header "Session-Token: $API_KEY" \
  --header "Content-Type: application/json" \
  --data "{
  \"access\": \"PRIVATE\",
  \"name\": \"phpapp4\",
  \"port\": 1029,
  \"scheme\": \"http\"
}"

Example: Update a dev URL including access control level

curl --request PUT \
  --url "$ACCESS_URL/$API_ROUTE/workspaces/$WS_ID_PHP/devurls/$DU_ID_PHP" \
  --header "Session-Token: $API_KEY" \
  --header "Content-Type: application/json" \
  --data "{
  \"access\": \"AUTHED\",
  \"name\": \"phpapp4\",
  \"port\": 1029,
  \"scheme\": \"http\"
}"

Example: List dev URLs

curl --request GET \
  --url "$ACCESS_URL/$API_ROUTE/workspaces/$WS_ID_PHP/devurls" \
  --header "Session-Token: $API_KEY"

Example: Delete a dev URL

curl --request DELETE \
  --url "$ACCESS_URL/$API_ROUTE/workspaces/$WS_ID_PHP/devurls/$DU_ID_PHP \
  --header "Session-Token: $API_KEY" \
  --header "Content-Type: application/json" \
  --data "{
}"