Sign Up

Organizations

GET
/organizations/invitations

Authorization

headerAuthorizationBearer <token>

API Key access

Response Body

List of organization invitations

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/organizations/invitations'
[  {    "organizationId": "organizationId",    "createdAt": "2000-01-23T04:56:07.000+00:00",    "invitedBy": "invitedBy",    "role": "owner",    "organizationName": "organizationName",    "assignedRoles": [      {        "createdAt": "2000-01-23T04:56:07.000+00:00",        "permissions": [          "write:registries",          "write:registries"        ],        "name": "name",        "isGlobal": true,        "description": "description",        "id": "id",        "updatedAt": "2000-01-23T04:56:07.000+00:00"      },      {        "createdAt": "2000-01-23T04:56:07.000+00:00",        "permissions": [          "write:registries",          "write:registries"        ],        "name": "name",        "isGlobal": true,        "description": "description",        "id": "id",        "updatedAt": "2000-01-23T04:56:07.000+00:00"      }    ],    "id": "id",    "email": "email",    "expiresAt": "2000-01-23T04:56:07.000+00:00",    "status": "pending",    "updatedAt": "2000-01-23T04:56:07.000+00:00"  }]
GET
/organizations/invitations/count

Authorization

headerAuthorizationBearer <token>

API Key access

Response Body

Count of organization invitations

response?numberapplication/json
curl -X GET 'http://localhost:3000/organizations/invitations/count'
0
POST
/organizations/invitations/{invitationId}/accept

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

invitationId*string

Invitation ID

Response Body

Organization invitation accepted successfully

application/json
  1. response
id*string

Invitation ID

email*string

Email address of the invitee

invitedBy*string

Email address of the inviter

organizationId*string

Organization ID

organizationName*string

Organization name

expiresAt*string

Expiration date of the invitation

Formatdate-time
status*string

Invitation status

Value in"pending""accepted""declined""cancelled"
role*string

Member role

Value in"owner""member"
assignedRoles*array<>

Assigned roles

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X POST 'http://localhost:3000/organizations/invitations/string/accept'
{  "organizationId": "organizationId",  "createdAt": "2000-01-23T04:56:07.000+00:00",  "invitedBy": "invitedBy",  "role": "owner",  "organizationName": "organizationName",  "assignedRoles": [    {      "createdAt": "2000-01-23T04:56:07.000+00:00",      "permissions": [        "write:registries",        "write:registries"      ],      "name": "name",      "isGlobal": true,      "description": "description",      "id": "id",      "updatedAt": "2000-01-23T04:56:07.000+00:00"    },    {      "createdAt": "2000-01-23T04:56:07.000+00:00",      "permissions": [        "write:registries",        "write:registries"      ],      "name": "name",      "isGlobal": true,      "description": "description",      "id": "id",      "updatedAt": "2000-01-23T04:56:07.000+00:00"    }  ],  "id": "id",  "email": "email",  "expiresAt": "2000-01-23T04:56:07.000+00:00",  "status": "pending",  "updatedAt": "2000-01-23T04:56:07.000+00:00"}
POST
/organizations/invitations/{invitationId}/decline

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

invitationId*string

Invitation ID

Response Body

Organization invitation declined successfully

curl -X POST 'http://localhost:3000/organizations/invitations/string/decline'
Empty

List organizations

GET
/organizations

Authorization

headerAuthorizationBearer <token>

API Key access

Response Body

List of organizations

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/organizations'
[  {    "secretQuota": 5.637376656633329,    "sandboxCreateRateLimit": 2.027123023002322,    "sandboxLifecycleRateLimitTtlSeconds": 1.0246457001441578,    "createdAt": "2000-01-23T04:56:07.000+00:00",    "sandboxLimitedNetworkEgress": true,    "suspendedUntil": "2000-01-23T04:56:07.000+00:00",    "ssoEnabled": true,    "directorySyncStatusChangedAt": "2000-01-23T04:56:07.000+00:00",    "previewWarningEnabled": true,    "snapshotDeactivationTimeoutMinutes": 7.061401241503109,    "otelConfig": "",    "authenticatedRateLimitTtlSeconds": 7.386281948385884,    "id": "id",    "experimentalConfig": "{}",    "updatedAt": "2000-01-23T04:56:07.000+00:00",    "defaultRegionId": "defaultRegionId",    "sandboxCreateRateLimitTtlSeconds": 1.2315135367772556,    "suspensionReason": "suspensionReason",    "sandboxLifecycleRateLimit": 4.145608029883936,    "suspendedAt": "2000-01-23T04:56:07.000+00:00",    "personal": true,    "suspensionCleanupGracePeriodHours": 0.8008281904610115,    "maxSecretsPerSandbox": 2.3021358869347655,    "directorySyncStatus": "",    "authenticatedRateLimit": 3.616076749251911,    "suspended": true,    "defaultQueueTimeout": 9,    "maxCpuPerSandbox": 6.027456183070403,    "scimEnabled": true,    "maxDiskPerSandbox": 5.962133916683182,    "createdBy": "createdBy",    "workosOrgId": "workosOrgId",    "name": "name",    "maxMemoryPerSandbox": 1.4658129805029452,    "directorySyncTokenRevokedAt": "2000-01-23T04:56:07.000+00:00"  }]

Create organization

POST
/organizations

Authorization

headerAuthorizationBearer <token>

API Key access

Request Body

application/json
  1. body
name*string

The name of organization

defaultRegionId*string

The ID of the default region for the organization

Response Body

Organization created successfully

application/json
  1. response
id*string

Organization ID

name*string

Organization name

createdBy*string

User ID of the organization creator

personal*boolean

Personal organization flag

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
suspended*boolean

Suspended flag

suspendedAt*string

Suspended at

Formatdate-time
suspensionReason*string

Suspended reason

suspendedUntil*string

Suspended until

Formatdate-time
suspensionCleanupGracePeriodHours*number

Suspension cleanup grace period hours

maxCpuPerSandbox*number

Max CPU per sandbox

maxMemoryPerSandbox*number

Max memory per sandbox

maxDiskPerSandbox*number

Max disk per sandbox

secretQuota*number

Maximum number of secrets

maxSecretsPerSandbox*number

Maximum number of secrets that can be mounted to a single sandbox

snapshotDeactivationTimeoutMinutes*number

Time in minutes before an unused snapshot is deactivated

Default20160
defaultQueueTimeout*|

Default minutes to wait for runner assignment before cancelling sandbox creation. Applied when sandbox create omits queueTimeout. Null means no default.

sandboxLimitedNetworkEgress*boolean

Sandbox default network block all

previewWarningEnabled*boolean

Whether the proxy shows the preview URL warning page for this organization

ssoEnabled*boolean

Whether this organization may configure SSO identity providers

scimEnabled*boolean

Whether this organization may use SCIM directory sync

defaultRegionId?string

Default region ID

workosOrgId?string

ID of the WorkOS organization mirrored from this organization (absent for personal organizations, which are never mirrored)

directorySyncStatus?string

Connection state of the WorkOS SCIM directory, as last reported by WorkOS (absent when no directory has ever reported in)

Value in"active""inactive""deleted"
directorySyncStatusChangedAt?string

When the directory sync status last changed

Formatdate-time
directorySyncTokenRevokedAt?string

When the directory bearer token was revoked; absent while a valid token exists. A revoked token stops provisioning even if the directory is still active.

Formatdate-time
authenticatedRateLimit*|

Authenticated rate limit per minute

sandboxCreateRateLimit*|

Sandbox create rate limit per minute

sandboxLifecycleRateLimit*|

Sandbox lifecycle rate limit per minute

experimentalConfig*

Experimental configuration

otelConfig*|

OpenTelemetry collection configuration

authenticatedRateLimitTtlSeconds*|

Authenticated rate limit TTL in seconds

sandboxCreateRateLimitTtlSeconds*|

Sandbox create rate limit TTL in seconds

sandboxLifecycleRateLimitTtlSeconds*|

Sandbox lifecycle rate limit TTL in seconds

curl -X POST 'http://localhost:3000/organizations' \  -H 'Content-Type: application/json' \  -d '{  "defaultRegionId": "us",  "name": "My Organization"}'
{  "secretQuota": 5.637376656633329,  "sandboxCreateRateLimit": 2.027123023002322,  "sandboxLifecycleRateLimitTtlSeconds": 1.0246457001441578,  "createdAt": "2000-01-23T04:56:07.000+00:00",  "sandboxLimitedNetworkEgress": true,  "suspendedUntil": "2000-01-23T04:56:07.000+00:00",  "ssoEnabled": true,  "directorySyncStatusChangedAt": "2000-01-23T04:56:07.000+00:00",  "previewWarningEnabled": true,  "snapshotDeactivationTimeoutMinutes": 7.061401241503109,  "otelConfig": "",  "authenticatedRateLimitTtlSeconds": 7.386281948385884,  "id": "id",  "experimentalConfig": "{}",  "updatedAt": "2000-01-23T04:56:07.000+00:00",  "defaultRegionId": "defaultRegionId",  "sandboxCreateRateLimitTtlSeconds": 1.2315135367772556,  "suspensionReason": "suspensionReason",  "sandboxLifecycleRateLimit": 4.145608029883936,  "suspendedAt": "2000-01-23T04:56:07.000+00:00",  "personal": true,  "suspensionCleanupGracePeriodHours": 0.8008281904610115,  "maxSecretsPerSandbox": 2.3021358869347655,  "directorySyncStatus": "",  "authenticatedRateLimit": 3.616076749251911,  "suspended": true,  "defaultQueueTimeout": 9,  "maxCpuPerSandbox": 6.027456183070403,  "scimEnabled": true,  "maxDiskPerSandbox": 5.962133916683182,  "createdBy": "createdBy",  "workosOrgId": "workosOrgId",  "name": "name",  "maxMemoryPerSandbox": 1.4658129805029452,  "directorySyncTokenRevokedAt": "2000-01-23T04:56:07.000+00:00"}
PATCH
/organizations/{organizationId}/default-region

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

application/json
  1. body
defaultRegionId*string

The ID of the default region for the organization

Response Body

Default region set successfully

curl -X PATCH 'http://localhost:3000/organizations/string/default-region' \  -H 'Content-Type: application/json' \  -d '{  "defaultRegionId": "us"}'
Empty
PATCH
/organizations/{organizationId}/default-queue-timeout

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

application/json
  1. body
defaultQueueTimeout*|

Default minutes to wait for runner assignment before cancelling sandbox creation. Null disables the default. A number must be a positive integer.

Response Body

Default queue timeout updated successfully

curl -X PATCH 'http://localhost:3000/organizations/string/default-queue-timeout' \  -H 'Content-Type: application/json' \  -d '{  "defaultQueueTimeout": 5}'
Empty

Get organization by ID

GET
/organizations/{organizationId}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

Organization details

application/json
  1. response
id*string

Organization ID

name*string

Organization name

createdBy*string

User ID of the organization creator

personal*boolean

Personal organization flag

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
suspended*boolean

Suspended flag

suspendedAt*string

Suspended at

Formatdate-time
suspensionReason*string

Suspended reason

suspendedUntil*string

Suspended until

Formatdate-time
suspensionCleanupGracePeriodHours*number

Suspension cleanup grace period hours

maxCpuPerSandbox*number

Max CPU per sandbox

maxMemoryPerSandbox*number

Max memory per sandbox

maxDiskPerSandbox*number

Max disk per sandbox

secretQuota*number

Maximum number of secrets

maxSecretsPerSandbox*number

Maximum number of secrets that can be mounted to a single sandbox

snapshotDeactivationTimeoutMinutes*number

Time in minutes before an unused snapshot is deactivated

Default20160
defaultQueueTimeout*|

Default minutes to wait for runner assignment before cancelling sandbox creation. Applied when sandbox create omits queueTimeout. Null means no default.

sandboxLimitedNetworkEgress*boolean

Sandbox default network block all

previewWarningEnabled*boolean

Whether the proxy shows the preview URL warning page for this organization

ssoEnabled*boolean

Whether this organization may configure SSO identity providers

scimEnabled*boolean

Whether this organization may use SCIM directory sync

defaultRegionId?string

Default region ID

workosOrgId?string

ID of the WorkOS organization mirrored from this organization (absent for personal organizations, which are never mirrored)

directorySyncStatus?string

Connection state of the WorkOS SCIM directory, as last reported by WorkOS (absent when no directory has ever reported in)

Value in"active""inactive""deleted"
directorySyncStatusChangedAt?string

When the directory sync status last changed

Formatdate-time
directorySyncTokenRevokedAt?string

When the directory bearer token was revoked; absent while a valid token exists. A revoked token stops provisioning even if the directory is still active.

Formatdate-time
authenticatedRateLimit*|

Authenticated rate limit per minute

sandboxCreateRateLimit*|

Sandbox create rate limit per minute

sandboxLifecycleRateLimit*|

Sandbox lifecycle rate limit per minute

experimentalConfig*

Experimental configuration

otelConfig*|

OpenTelemetry collection configuration

authenticatedRateLimitTtlSeconds*|

Authenticated rate limit TTL in seconds

sandboxCreateRateLimitTtlSeconds*|

Sandbox create rate limit TTL in seconds

sandboxLifecycleRateLimitTtlSeconds*|

Sandbox lifecycle rate limit TTL in seconds

curl -X GET 'http://localhost:3000/organizations/string'
{  "secretQuota": 5.637376656633329,  "sandboxCreateRateLimit": 2.027123023002322,  "sandboxLifecycleRateLimitTtlSeconds": 1.0246457001441578,  "createdAt": "2000-01-23T04:56:07.000+00:00",  "sandboxLimitedNetworkEgress": true,  "suspendedUntil": "2000-01-23T04:56:07.000+00:00",  "ssoEnabled": true,  "directorySyncStatusChangedAt": "2000-01-23T04:56:07.000+00:00",  "previewWarningEnabled": true,  "snapshotDeactivationTimeoutMinutes": 7.061401241503109,  "otelConfig": "",  "authenticatedRateLimitTtlSeconds": 7.386281948385884,  "id": "id",  "experimentalConfig": "{}",  "updatedAt": "2000-01-23T04:56:07.000+00:00",  "defaultRegionId": "defaultRegionId",  "sandboxCreateRateLimitTtlSeconds": 1.2315135367772556,  "suspensionReason": "suspensionReason",  "sandboxLifecycleRateLimit": 4.145608029883936,  "suspendedAt": "2000-01-23T04:56:07.000+00:00",  "personal": true,  "suspensionCleanupGracePeriodHours": 0.8008281904610115,  "maxSecretsPerSandbox": 2.3021358869347655,  "directorySyncStatus": "",  "authenticatedRateLimit": 3.616076749251911,  "suspended": true,  "defaultQueueTimeout": 9,  "maxCpuPerSandbox": 6.027456183070403,  "scimEnabled": true,  "maxDiskPerSandbox": 5.962133916683182,  "createdBy": "createdBy",  "workosOrgId": "workosOrgId",  "name": "name",  "maxMemoryPerSandbox": 1.4658129805029452,  "directorySyncTokenRevokedAt": "2000-01-23T04:56:07.000+00:00"}

Delete organization

DELETE
/organizations/{organizationId}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

Organization deleted successfully

curl -X DELETE 'http://localhost:3000/organizations/string'
Empty
GET
/organizations/{organizationId}/usage

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

Current usage overview

application/json
  1. response
regionUsage*array<>
totalSnapshotQuota*number
currentSnapshotUsage*number
totalVolumeQuota*number
currentVolumeUsage*number
curl -X GET 'http://localhost:3000/organizations/string/usage'
{  "totalSnapshotQuota": 6.84685269835264,  "currentVolumeUsage": 4.965218492984954,  "totalVolumeQuota": 1.1730742509559433,  "currentSnapshotUsage": 7.457744773683766,  "regionUsage": [    {      "totalCpuQuota": 0.8008281904610115,      "currentGpuUsage": 9.301444243932576,      "allowedGpuTypes": [        "H100",        "H100"      ],      "totalGpuQuota": 7.061401241503109,      "maxMemoryPerGpu": 1.0246457001441578,      "maxCpuPerSandbox": 3.616076749251911,      "maxDiskPerSandbox": 4.145608029883936,      "maxDiskPerNonEphemeralSandbox": 7.386281948385884,      "regionId": "regionId",      "currentDiskUsage": 2.3021358869347655,      "maxCpuPerGpu": 1.2315135367772556,      "currentMemoryUsage": 5.962133916683182,      "currentCpuUsage": 6.027456183070403,      "maxMemoryPerSandbox": 2.027123023002322,      "maxDiskPerGpu": 1.4894159098541704,      "totalMemoryQuota": 1.4658129805029452,      "totalDiskQuota": 5.637376656633329,      "sandboxClass": ""    },    {      "totalCpuQuota": 0.8008281904610115,      "currentGpuUsage": 9.301444243932576,      "allowedGpuTypes": [        "H100",        "H100"      ],      "totalGpuQuota": 7.061401241503109,      "maxMemoryPerGpu": 1.0246457001441578,      "maxCpuPerSandbox": 3.616076749251911,      "maxDiskPerSandbox": 4.145608029883936,      "maxDiskPerNonEphemeralSandbox": 7.386281948385884,      "regionId": "regionId",      "currentDiskUsage": 2.3021358869347655,      "maxCpuPerGpu": 1.2315135367772556,      "currentMemoryUsage": 5.962133916683182,      "currentCpuUsage": 6.027456183070403,      "maxMemoryPerSandbox": 2.027123023002322,      "maxDiskPerGpu": 1.4894159098541704,      "totalMemoryQuota": 1.4658129805029452,      "totalDiskQuota": 5.637376656633329,      "sandboxClass": ""    }  ]}
GET
/organizations/{organizationId}/available-sandbox-classes

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

Available sandbox classes

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/organizations/string/available-sandbox-classes'
[  {    "gpuAvailable": true,    "regionId": "regionId",    "allowedGpuTypes": [      "H100",      "H100"    ],    "sandboxClass": ""  }]

Leave organization

POST
/organizations/{organizationId}/leave

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

Organization left successfully

curl -X POST 'http://localhost:3000/organizations/string/leave'
Empty
GET
/organizations/otel-config/by-sandbox-auth-token/{authToken}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

authToken*string

Sandbox Auth Token

Response Body

OTEL Config

application/json
  1. response
endpoint*string

Endpoint

headers?|

Headers

organizationId?string

Organization ID the config belongs to

curl -X GET 'http://localhost:3000/organizations/otel-config/by-sandbox-auth-token/string'
{  "organizationId": "organizationId",  "headers": {    "x-api-key": "my-api-key"  },  "endpoint": "endpoint"}
GET
/organizations/sandbox-identity/by-sandbox-auth-token/{authToken}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

authToken*string

Sandbox Auth Token

Response Body

Sandbox identity

application/json
  1. response
sandboxId*string

Sandbox ID

organizationId*string

Organization ID

curl -X GET 'http://localhost:3000/organizations/sandbox-identity/by-sandbox-auth-token/string'
{  "organizationId": "organizationId",  "sandboxId": "sandboxId"}
GET
/organizations/{organizationId}/otel-config

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

OTEL Config

application/json
  1. response
endpoint*string

Endpoint

headers?|

Headers

organizationId?string

Organization ID the config belongs to

curl -X GET 'http://localhost:3000/organizations/string/otel-config'
{  "organizationId": "organizationId",  "headers": {    "x-api-key": "my-api-key"  },  "endpoint": "endpoint"}
DELETE
/organizations/{organizationId}/otel-config

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

OpenTelemetry configuration deleted successfully

curl -X DELETE 'http://localhost:3000/organizations/string/otel-config'
Empty
PUT
/organizations/{organizationId}/otel-config

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

application/json
  1. body
endpoint*string

Endpoint

headers?|

Headers

organizationId?string

Organization ID the config belongs to

Response Body

OpenTelemetry configuration updated successfully

curl -X PUT 'http://localhost:3000/organizations/string/otel-config' \  -H 'Content-Type: application/json' \  -d '{  "organizationId": "organizationId",  "headers": {    "x-api-key": "my-api-key"  },  "endpoint": "endpoint"}'
Empty
PUT
/organizations/{organizationId}/experimental-config

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

Experimental configuration as a JSON object. Set to null to clear the configuration.

application/json
  1. body
[key: string]?any

Response Body

curl -X PUT 'http://localhost:3000/organizations/string/experimental-config' \  -H 'Content-Type: application/json' \  -d '{  "otel": {    "endpoint": "http://otel-collector:4317",    "headers": {      "api-key": "XXX"    }  }}'
Empty

List organization roles

GET
/organizations/{organizationId}/roles

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

List of organization roles

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/organizations/string/roles'
[  {    "createdAt": "2000-01-23T04:56:07.000+00:00",    "permissions": [      "write:registries",      "write:registries"    ],    "name": "name",    "isGlobal": true,    "description": "description",    "id": "id",    "updatedAt": "2000-01-23T04:56:07.000+00:00"  }]

Create organization role

POST
/organizations/{organizationId}/roles

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

application/json
  1. body
name*string

The name of the role

description*string

The description of the role

permissions*array<>

The list of permissions assigned to the role

Response Body

Organization role created successfully

application/json
  1. response
id*string

Role ID

name*string

Role name

description*string

Role description

permissions*array<>

Roles assigned to the user

isGlobal*boolean

Global role flag

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X POST 'http://localhost:3000/organizations/string/roles' \  -H 'Content-Type: application/json' \  -d '{  "permissions": [    "write:registries",    "write:registries"  ],  "name": "Maintainer",  "description": "Can manage all resources"}'
{  "createdAt": "2000-01-23T04:56:07.000+00:00",  "permissions": [    "write:registries",    "write:registries"  ],  "name": "name",  "isGlobal": true,  "description": "description",  "id": "id",  "updatedAt": "2000-01-23T04:56:07.000+00:00"}

Delete organization role

DELETE
/organizations/{organizationId}/roles/{roleId}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

roleId*string

Role ID

Response Body

Organization role deleted successfully

curl -X DELETE 'http://localhost:3000/organizations/string/roles/string'
Empty

Update organization role

PUT
/organizations/{organizationId}/roles/{roleId}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

roleId*string

Role ID

Request Body

application/json
  1. body
name*string

The name of the role

description*string

The description of the role

permissions*array<>

The list of permissions assigned to the role

Response Body

Role updated successfully

application/json
  1. response
id*string

Role ID

name*string

Role name

description*string

Role description

permissions*array<>

Roles assigned to the user

isGlobal*boolean

Global role flag

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X PUT 'http://localhost:3000/organizations/string/roles/string' \  -H 'Content-Type: application/json' \  -d '{  "permissions": [    "write:registries",    "write:registries"  ],  "name": "Maintainer",  "description": "Can manage all resources"}'
{  "createdAt": "2000-01-23T04:56:07.000+00:00",  "permissions": [    "write:registries",    "write:registries"  ],  "name": "name",  "isGlobal": true,  "description": "description",  "id": "id",  "updatedAt": "2000-01-23T04:56:07.000+00:00"}
GET
/organizations/{organizationId}/users

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

List of organization members

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/organizations/string/users'
[  {    "organizationId": "organizationId",    "createdAt": "2000-01-23T04:56:07.000+00:00",    "role": "owner",    "assignedRoles": [      {        "createdAt": "2000-01-23T04:56:07.000+00:00",        "permissions": [          "write:registries",          "write:registries"        ],        "name": "name",        "isGlobal": true,        "description": "description",        "id": "id",        "updatedAt": "2000-01-23T04:56:07.000+00:00"      },      {        "createdAt": "2000-01-23T04:56:07.000+00:00",        "permissions": [          "write:registries",          "write:registries"        ],        "name": "name",        "isGlobal": true,        "description": "description",        "id": "id",        "updatedAt": "2000-01-23T04:56:07.000+00:00"      }    ],    "name": "name",    "userId": "userId",    "email": "email",    "updatedAt": "2000-01-23T04:56:07.000+00:00"  }]
POST
/organizations/{organizationId}/users/{userId}/access

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

userId*string

User ID

Request Body

application/json
  1. body
role*string

Organization member role

Default"member"
Value in"owner""member"
assignedRoleIds*array<string>

Array of assigned role IDs

Default
[  "00000000-0000-0000-0000-000000000001"]

Response Body

Access updated successfully

application/json
  1. response
userId*string

User ID

organizationId*string

Organization ID

name*string

User name

email*string

User email

role*string

Member role

Value in"owner""member"
assignedRoles*array<>

Roles assigned to the user

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X POST 'http://localhost:3000/organizations/string/users/string/access' \  -H 'Content-Type: application/json' \  -d '{  "role": "member",  "assignedRoleIds": [    "assignedRoleIds",    "assignedRoleIds"  ]}'
{  "organizationId": "organizationId",  "createdAt": "2000-01-23T04:56:07.000+00:00",  "role": "owner",  "assignedRoles": [    {      "createdAt": "2000-01-23T04:56:07.000+00:00",      "permissions": [        "write:registries",        "write:registries"      ],      "name": "name",      "isGlobal": true,      "description": "description",      "id": "id",      "updatedAt": "2000-01-23T04:56:07.000+00:00"    },    {      "createdAt": "2000-01-23T04:56:07.000+00:00",      "permissions": [        "write:registries",        "write:registries"      ],      "name": "name",      "isGlobal": true,      "description": "description",      "id": "id",      "updatedAt": "2000-01-23T04:56:07.000+00:00"    }  ],  "name": "name",  "userId": "userId",  "email": "email",  "updatedAt": "2000-01-23T04:56:07.000+00:00"}
DELETE
/organizations/{organizationId}/users/{userId}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

userId*string

User ID

Response Body

User removed from organization successfully

curl -X DELETE 'http://localhost:3000/organizations/string/users/string'
Empty
GET
/organizations/{organizationId}/invitations

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

List of pending organization invitations

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/organizations/string/invitations'
[  {    "organizationId": "organizationId",    "createdAt": "2000-01-23T04:56:07.000+00:00",    "invitedBy": "invitedBy",    "role": "owner",    "organizationName": "organizationName",    "assignedRoles": [      {        "createdAt": "2000-01-23T04:56:07.000+00:00",        "permissions": [          "write:registries",          "write:registries"        ],        "name": "name",        "isGlobal": true,        "description": "description",        "id": "id",        "updatedAt": "2000-01-23T04:56:07.000+00:00"      },      {        "createdAt": "2000-01-23T04:56:07.000+00:00",        "permissions": [          "write:registries",          "write:registries"        ],        "name": "name",        "isGlobal": true,        "description": "description",        "id": "id",        "updatedAt": "2000-01-23T04:56:07.000+00:00"      }    ],    "id": "id",    "email": "email",    "expiresAt": "2000-01-23T04:56:07.000+00:00",    "status": "pending",    "updatedAt": "2000-01-23T04:56:07.000+00:00"  }]
POST
/organizations/{organizationId}/invitations

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

application/json
  1. body
email*string

Email address of the invitee

role*string

Organization member role for the invitee

Default"member"
Value in"owner""member"
assignedRoleIds*array<string>

Array of assigned role IDs for the invitee

Default
[  "00000000-0000-0000-0000-000000000001"]
expiresAt?string

Expiration date of the invitation

Formatdate-time

Response Body

Organization invitation created successfully

application/json
  1. response
id*string

Invitation ID

email*string

Email address of the invitee

invitedBy*string

Email address of the inviter

organizationId*string

Organization ID

organizationName*string

Organization name

expiresAt*string

Expiration date of the invitation

Formatdate-time
status*string

Invitation status

Value in"pending""accepted""declined""cancelled"
role*string

Member role

Value in"owner""member"
assignedRoles*array<>

Assigned roles

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X POST 'http://localhost:3000/organizations/string/invitations' \  -H 'Content-Type: application/json' \  -d '{  "role": "member",  "assignedRoleIds": [    "assignedRoleIds",    "assignedRoleIds"  ],  "email": "mail@example.com",  "expiresAt": "2021-12-31T23:59:59Z"}'
{  "organizationId": "organizationId",  "createdAt": "2000-01-23T04:56:07.000+00:00",  "invitedBy": "invitedBy",  "role": "owner",  "organizationName": "organizationName",  "assignedRoles": [    {      "createdAt": "2000-01-23T04:56:07.000+00:00",      "permissions": [        "write:registries",        "write:registries"      ],      "name": "name",      "isGlobal": true,      "description": "description",      "id": "id",      "updatedAt": "2000-01-23T04:56:07.000+00:00"    },    {      "createdAt": "2000-01-23T04:56:07.000+00:00",      "permissions": [        "write:registries",        "write:registries"      ],      "name": "name",      "isGlobal": true,      "description": "description",      "id": "id",      "updatedAt": "2000-01-23T04:56:07.000+00:00"    }  ],  "id": "id",  "email": "email",  "expiresAt": "2000-01-23T04:56:07.000+00:00",  "status": "pending",  "updatedAt": "2000-01-23T04:56:07.000+00:00"}
PUT
/organizations/{organizationId}/invitations/{invitationId}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

invitationId*string

Invitation ID

Request Body

application/json
  1. body
role*string

Organization member role

Value in"owner""member"
assignedRoleIds*array<string>

Array of role IDs

expiresAt?string

Expiration date of the invitation

Formatdate-time

Response Body

Organization invitation updated successfully

application/json
  1. response
id*string

Invitation ID

email*string

Email address of the invitee

invitedBy*string

Email address of the inviter

organizationId*string

Organization ID

organizationName*string

Organization name

expiresAt*string

Expiration date of the invitation

Formatdate-time
status*string

Invitation status

Value in"pending""accepted""declined""cancelled"
role*string

Member role

Value in"owner""member"
assignedRoles*array<>

Assigned roles

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X PUT 'http://localhost:3000/organizations/string/invitations/string' \  -H 'Content-Type: application/json' \  -d '{  "role": "owner",  "assignedRoleIds": [    "assignedRoleIds",    "assignedRoleIds"  ],  "expiresAt": "2021-12-31T23:59:59Z"}'
{  "organizationId": "organizationId",  "createdAt": "2000-01-23T04:56:07.000+00:00",  "invitedBy": "invitedBy",  "role": "owner",  "organizationName": "organizationName",  "assignedRoles": [    {      "createdAt": "2000-01-23T04:56:07.000+00:00",      "permissions": [        "write:registries",        "write:registries"      ],      "name": "name",      "isGlobal": true,      "description": "description",      "id": "id",      "updatedAt": "2000-01-23T04:56:07.000+00:00"    },    {      "createdAt": "2000-01-23T04:56:07.000+00:00",      "permissions": [        "write:registries",        "write:registries"      ],      "name": "name",      "isGlobal": true,      "description": "description",      "id": "id",      "updatedAt": "2000-01-23T04:56:07.000+00:00"    }  ],  "id": "id",  "email": "email",  "expiresAt": "2000-01-23T04:56:07.000+00:00",  "status": "pending",  "updatedAt": "2000-01-23T04:56:07.000+00:00"}
POST
/organizations/{organizationId}/invitations/{invitationId}/cancel

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

invitationId*string

Invitation ID

Response Body

Organization invitation cancelled successfully

curl -X POST 'http://localhost:3000/organizations/string/invitations/string/cancel'
Empty
GET
/regions

Authorization

headerAuthorizationBearer <token>

API Key access

Header Parameters

X-Daytona-Organization-ID?string

Use with JWT to specify the organization ID

Response Body

List of all available regions

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/regions'
[  {    "otelEndpoint": "https://otel-collector.example.com:4318",    "buildContextBucketRegion": "us-east-1",    "buildContextRoleArn": "arn:aws:iam::123456789012:role/daytona-build-context",    "proxyUrl": "https://proxy.example.com",    "sshGatewayUrl": "http://ssh-gateway.example.com",    "organizationId": "123e4567-e89b-12d3-a456-426614174000",    "createdAt": "2023-01-01T00:00:00.000Z",    "snapshotManagerUrl": "http://snapshot-manager.example.com",    "regionType": "shared",    "buildContextBucket": "my-org-daytona-region-us",    "name": "us-east-1",    "id": "123456789012",    "updatedAt": "2023-01-01T00:00:00.000Z"  }]

Create a new region

POST
/regions

Authorization

headerAuthorizationBearer <token>

API Key access

Header Parameters

X-Daytona-Organization-ID?string

Use with JWT to specify the organization ID

Request Body

application/json
  1. body
name*string

Region name

proxyUrl?|

Proxy URL for the region

sshGatewayUrl?|

SSH Gateway URL for the region

snapshotManagerUrl?|

Snapshot Manager URL for the region

otelEndpoint?|

OTel collector endpoint for sandboxes created in this region. When set, sandbox OTel data is sent to this endpoint instead of the Daytona-hosted collector and will not be available in the Daytona analytics API or dashboard.

buildContextBucket?|

S3 bucket in your AWS account that declarative-build context is uploaded to for this region. Requires buildContextBucketRegion and buildContextRoleArn.

buildContextBucketRegion?|

AWS region of buildContextBucket (standard aws partition only)

buildContextRoleArn?|

IAM role Daytona assumes (with your organization ID as ExternalId) to issue upload credentials for buildContextBucket

Response Body

The region has been successfully created.

application/json
  1. response
id*string

ID of the created region

proxyApiKey?|

Proxy API key for the region

sshGatewayApiKey?|

SSH Gateway API key for the region

snapshotManagerUsername?|

Snapshot Manager username for the region

snapshotManagerPassword?|

Snapshot Manager password for the region

curl -X POST 'http://localhost:3000/regions' \  -H 'Content-Type: application/json' \  -d '{  "otelEndpoint": "https://otel-collector.example.com:4318",  "snapshotManagerUrl": "https://snapshot-manager.example.com",  "buildContextBucketRegion": "us-east-1",  "buildContextRoleArn": "arn:aws:iam::123456789012:role/daytona-build-context",  "buildContextBucket": "my-org-daytona-region-us",  "proxyUrl": "https://proxy.example.com",  "name": "us-east-1",  "sshGatewayUrl": "ssh://ssh-gateway.example.com"}'
{  "proxyApiKey": "proxy-api-key-xyz",  "snapshotManagerUsername": "daytona",  "snapshotManagerPassword": "snapshotManagerPassword",  "id": "region_12345",  "sshGatewayApiKey": "ssh-gateway-api-key-abc"}

Get region by ID

GET
/regions/{id}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

id*string

Region ID

Header Parameters

X-Daytona-Organization-ID?string

Use with JWT to specify the organization ID

Response Body

application/json
  1. response
id*string

Region ID

name*string

Region name

organizationId?|

Organization ID

regionType*string

The type of the region

Value in"shared""dedicated""custom"
createdAt*string

Creation timestamp

updatedAt*string

Last update timestamp

proxyUrl?|

Proxy URL for the region

sshGatewayUrl?|

SSH Gateway URL for the region

snapshotManagerUrl?|

Snapshot Manager URL for the region

otelEndpoint?|

OTel collector endpoint for sandboxes created in this region. When set, sandbox OTel data is sent to this endpoint instead of the Daytona-hosted collector and will not be available in the Daytona analytics API or dashboard.

buildContextBucket?|

S3 bucket in your AWS account that declarative-build context is uploaded to for this region. Requires buildContextBucketRegion and buildContextRoleArn.

buildContextBucketRegion?|

AWS region of buildContextBucket (standard aws partition only)

buildContextRoleArn?|

IAM role Daytona assumes (with your organization ID as ExternalId) to issue upload credentials for buildContextBucket

curl -X GET 'http://localhost:3000/regions/string'
{  "otelEndpoint": "https://otel-collector.example.com:4318",  "buildContextBucketRegion": "us-east-1",  "buildContextRoleArn": "arn:aws:iam::123456789012:role/daytona-build-context",  "proxyUrl": "https://proxy.example.com",  "sshGatewayUrl": "http://ssh-gateway.example.com",  "organizationId": "123e4567-e89b-12d3-a456-426614174000",  "createdAt": "2023-01-01T00:00:00.000Z",  "snapshotManagerUrl": "http://snapshot-manager.example.com",  "regionType": "shared",  "buildContextBucket": "my-org-daytona-region-us",  "name": "us-east-1",  "id": "123456789012",  "updatedAt": "2023-01-01T00:00:00.000Z"}
PATCH
/regions/{id}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

id*string

Region ID

Header Parameters

X-Daytona-Organization-ID?string

Use with JWT to specify the organization ID

Request Body

application/json
  1. body
proxyUrl?|

Proxy URL for the region

sshGatewayUrl?|

SSH Gateway URL for the region

snapshotManagerUrl?|

Snapshot Manager URL for the region

otelEndpoint?|

OTel collector endpoint for sandboxes created in this region. When set, sandbox OTel data is sent to this endpoint instead of the Daytona-hosted collector and will not be available in the Daytona analytics API or dashboard.

buildContextBucket?|

S3 bucket in your AWS account that declarative-build context is uploaded to for this region. Requires buildContextBucketRegion and buildContextRoleArn.

buildContextBucketRegion?|

AWS region of buildContextBucket (standard aws partition only)

buildContextRoleArn?|

IAM role Daytona assumes (with your organization ID as ExternalId) to issue upload credentials for buildContextBucket

Response Body

curl -X PATCH 'http://localhost:3000/regions/string' \  -H 'Content-Type: application/json' \  -d '{  "otelEndpoint": "https://otel-collector.example.com:4318",  "snapshotManagerUrl": "https://snapshot-manager.example.com",  "buildContextBucketRegion": "us-east-1",  "buildContextRoleArn": "arn:aws:iam::123456789012:role/daytona-build-context",  "buildContextBucket": "my-org-daytona-region-us",  "proxyUrl": "https://proxy.example.com",  "sshGatewayUrl": "ssh://ssh-gateway.example.com"}'
Empty

Delete a region

DELETE
/regions/{id}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

id*string

Region ID

Header Parameters

X-Daytona-Organization-ID?string

Use with JWT to specify the organization ID

Response Body

The region has been successfully deleted.

curl -X DELETE 'http://localhost:3000/regions/string'
Empty
POST
/regions/{id}/regenerate-proxy-api-key

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

id*string

Region ID

Header Parameters

X-Daytona-Organization-ID?string

Use with JWT to specify the organization ID

Response Body

The proxy API key has been successfully regenerated.

application/json
  1. response
apiKey*string

The newly generated API key

curl -X POST 'http://localhost:3000/regions/string/regenerate-proxy-api-key'
{  "apiKey": "api-key-xyz123"}
POST
/regions/{id}/regenerate-ssh-gateway-api-key

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

id*string

Region ID

Header Parameters

X-Daytona-Organization-ID?string

Use with JWT to specify the organization ID

Response Body

The SSH gateway API key has been successfully regenerated.

application/json
  1. response
apiKey*string

The newly generated API key

curl -X POST 'http://localhost:3000/regions/string/regenerate-ssh-gateway-api-key'
{  "apiKey": "api-key-xyz123"}
POST
/regions/{id}/regenerate-snapshot-manager-credentials

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

id*string

Region ID

Header Parameters

X-Daytona-Organization-ID?string

Use with JWT to specify the organization ID

Response Body

The snapshot manager credentials have been successfully regenerated.

application/json
  1. response
username*string

Snapshot Manager username for the region

password*string

Snapshot Manager password for the region

curl -X POST 'http://localhost:3000/regions/string/regenerate-snapshot-manager-credentials'
{  "password": "password",  "username": "daytona"}
POST
/organizations/{organizationId}/identity-providers/workos-admin-portal-link

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

application/json
  1. body
intent*string

Which setup flow to open: sso for a single sign-on connection, dsync for SCIM directory sync

Value in"sso""dsync"

Response Body

Admin Portal link generated; it expires five minutes after issuance

application/json
  1. response
link*string

Single-purpose WorkOS Admin Portal URL. Expires five minutes after issuance; open it immediately.

curl -X POST 'http://localhost:3000/organizations/string/identity-providers/workos-admin-portal-link' \  -H 'Content-Type: application/json' \  -d '{  "intent": ""}'
{  "link": "link"}
GET
/organizations/{organizationId}/identity-providers/workos-sso-connections

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

SSO connections as configured in the WorkOS Admin Portal; empty when none exist

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/organizations/string/identity-providers/workos-sso-connections'
[  {    "createdAt": "2000-01-23T04:56:07.000+00:00",    "name": "name",    "domains": [      "domains",      "domains"    ],    "id": "id",    "state": "active",    "connectionType": "OktaSAML",    "updatedAt": "2000-01-23T04:56:07.000+00:00"  }]
GET
/organizations/{organizationId}/identity-providers

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

List of identity providers

application/json
  1. response
[index: integer]?
curl -X GET 'http://localhost:3000/organizations/string/identity-providers'
[  {    "organizationId": "123e4567-e89b-12d3-a456-426614174000",    "createdAt": "2025-01-01T00:00:00Z",    "trustEmailVerified": false,    "defaultAssignedRoleIds": [      "00000000-0000-0000-0000-000000000001"    ],    "oidcConfig": "",    "name": "Company Okta",    "emailDomains": [      "company.com",      "corp.company.com"    ],    "id": "123e4567-e89b-12d3-a456-426614174000",    "allowAnyDomain": false,    "enabled": true,    "updatedAt": "2025-01-01T00:00:00Z"  }]
POST
/organizations/{organizationId}/identity-providers

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

application/json
  1. body
name*string

Display name for the identity provider

oidcConfig*

OIDC configuration

emailDomains*array<string>

Email domains used for IdP discovery on the login form and to validate the user identity returned by the IdP. Required and must be non-empty unless allowAnyDomain is true.

Default[]
allowAnyDomain?boolean

When true, the IdP accepts any email domain returned by the external provider. Disables the post-callback domain check and allows emailDomains to be empty. Only enable for trusted IdPs that strictly control which users can authenticate.

Defaultfalse
trustEmailVerified?boolean

When true, skip the email_verified claim check on SSO logins through this identity provider. Only intended for providers that never emit the claim (e.g. Microsoft Entra ID). Risky: only enable if the IdP strictly controls its users' email addresses.

Defaultfalse
defaultAssignedRoleIds?array<string>

Organization role IDs assigned to users who join the organization via SSO through this identity provider. Roles must be global or belong to this organization. Empty (default) grants the lowest access: membership with no resource permissions.

Default[]
enabled?boolean

Whether the identity provider is enabled

Defaulttrue

Response Body

Identity provider created successfully

application/json
  1. response
id*string

Unique identifier

organizationId*string

Organization ID

name*string

Display name for the identity provider

oidcConfig*

OIDC configuration (secret redacted)

emailDomains*array<string>

Email domains used for IdP discovery on the login form. May be empty when allowAnyDomain is true.

allowAnyDomain*boolean

Whether the IdP accepts any email domain returned by the external provider

trustEmailVerified*boolean

Whether the email_verified claim check is skipped on SSO logins through this identity provider

defaultAssignedRoleIds*array<string>

Organization role IDs assigned to users who join via SSO through this identity provider

enabled*boolean

Whether the identity provider is enabled

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X POST 'http://localhost:3000/organizations/string/identity-providers' \  -H 'Content-Type: application/json' \  -d '{  "trustEmailVerified": false,  "defaultAssignedRoleIds": [    "00000000-0000-0000-0000-000000000001"  ],  "oidcConfig": "",  "name": "Company Okta",  "emailDomains": [    "company.com",    "corp.company.com"  ],  "allowAnyDomain": false,  "enabled": true}'
{  "organizationId": "123e4567-e89b-12d3-a456-426614174000",  "createdAt": "2025-01-01T00:00:00Z",  "trustEmailVerified": false,  "defaultAssignedRoleIds": [    "00000000-0000-0000-0000-000000000001"  ],  "oidcConfig": "",  "name": "Company Okta",  "emailDomains": [    "company.com",    "corp.company.com"  ],  "id": "123e4567-e89b-12d3-a456-426614174000",  "allowAnyDomain": false,  "enabled": true,  "updatedAt": "2025-01-01T00:00:00Z"}
GET
/organizations/{organizationId}/identity-providers/{id}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

id*string

Identity provider ID

Response Body

Identity provider details

application/json
  1. response
id*string

Unique identifier

organizationId*string

Organization ID

name*string

Display name for the identity provider

oidcConfig*

OIDC configuration (secret redacted)

emailDomains*array<string>

Email domains used for IdP discovery on the login form. May be empty when allowAnyDomain is true.

allowAnyDomain*boolean

Whether the IdP accepts any email domain returned by the external provider

trustEmailVerified*boolean

Whether the email_verified claim check is skipped on SSO logins through this identity provider

defaultAssignedRoleIds*array<string>

Organization role IDs assigned to users who join via SSO through this identity provider

enabled*boolean

Whether the identity provider is enabled

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X GET 'http://localhost:3000/organizations/string/identity-providers/string'
{  "organizationId": "123e4567-e89b-12d3-a456-426614174000",  "createdAt": "2025-01-01T00:00:00Z",  "trustEmailVerified": false,  "defaultAssignedRoleIds": [    "00000000-0000-0000-0000-000000000001"  ],  "oidcConfig": "",  "name": "Company Okta",  "emailDomains": [    "company.com",    "corp.company.com"  ],  "id": "123e4567-e89b-12d3-a456-426614174000",  "allowAnyDomain": false,  "enabled": true,  "updatedAt": "2025-01-01T00:00:00Z"}
PATCH
/organizations/{organizationId}/identity-providers/{id}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

id*string

Identity provider ID

Request Body

application/json
  1. body
name?string

Display name for the identity provider

oidcConfig?

OIDC configuration

emailDomains?array<string>

Email domains used for IdP discovery on the login form and to validate the user identity returned by the IdP. If provided and allowAnyDomain is not being set to true, must contain at least one domain. To clear domains in the same request, set allowAnyDomain: true and emailDomains: [].

allowAnyDomain?boolean

When true, the IdP accepts any email domain returned by the external provider. Disables the post-callback domain check and allows emailDomains to be empty. Only enable for trusted IdPs that strictly control which users can authenticate.

trustEmailVerified?boolean

When true, skip the email_verified claim check on SSO logins through this identity provider. Only intended for providers that never emit the claim (e.g. Microsoft Entra ID). Risky: only enable if the IdP strictly controls its users' email addresses.

defaultAssignedRoleIds?array<string>

Organization role IDs assigned to users who join the organization via SSO through this identity provider. Roles must be global or belong to this organization. Empty grants the lowest access: membership with no resource permissions.

enabled?boolean

Whether the identity provider is enabled

Response Body

Identity provider updated successfully

application/json
  1. response
id*string

Unique identifier

organizationId*string

Organization ID

name*string

Display name for the identity provider

oidcConfig*

OIDC configuration (secret redacted)

emailDomains*array<string>

Email domains used for IdP discovery on the login form. May be empty when allowAnyDomain is true.

allowAnyDomain*boolean

Whether the IdP accepts any email domain returned by the external provider

trustEmailVerified*boolean

Whether the email_verified claim check is skipped on SSO logins through this identity provider

defaultAssignedRoleIds*array<string>

Organization role IDs assigned to users who join via SSO through this identity provider

enabled*boolean

Whether the identity provider is enabled

createdAt*string

Creation timestamp

Formatdate-time
updatedAt*string

Last update timestamp

Formatdate-time
curl -X PATCH 'http://localhost:3000/organizations/string/identity-providers/string' \  -H 'Content-Type: application/json' \  -d '{  "trustEmailVerified": false,  "defaultAssignedRoleIds": [    "00000000-0000-0000-0000-000000000001"  ],  "oidcConfig": "",  "name": "Company Okta",  "emailDomains": [    "company.com",    "corp.company.com"  ],  "allowAnyDomain": false,  "enabled": true}'
{  "organizationId": "123e4567-e89b-12d3-a456-426614174000",  "createdAt": "2025-01-01T00:00:00Z",  "trustEmailVerified": false,  "defaultAssignedRoleIds": [    "00000000-0000-0000-0000-000000000001"  ],  "oidcConfig": "",  "name": "Company Okta",  "emailDomains": [    "company.com",    "corp.company.com"  ],  "id": "123e4567-e89b-12d3-a456-426614174000",  "allowAnyDomain": false,  "enabled": true,  "updatedAt": "2025-01-01T00:00:00Z"}
DELETE
/organizations/{organizationId}/identity-providers/{id}

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

id*string

Identity provider ID

Response Body

Identity provider deleted successfully

curl -X DELETE 'http://localhost:3000/organizations/string/identity-providers/string'
Empty
POST
/organizations/{organizationId}/identity-providers/test-connection

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Request Body

application/json
  1. body
issuerUrl*string

OIDC Issuer URL to test

Response Body

Connection test result

application/json
  1. response
success*boolean

Whether the connection test was successful

issuer?string

The discovered issuer from the OIDC configuration

error?string

Error message if the connection test failed

curl -X POST 'http://localhost:3000/organizations/string/identity-providers/test-connection' \  -H 'Content-Type: application/json' \  -d '{  "issuerUrl": "https://company.okta.com"}'
{  "success": true,  "error": "error",  "issuer": "https://company.okta.com"}

Get shared GPU capacity

GET
/organizations/{organizationId}/gpu-capacity

Returns a short-lived observation of the shared GPU fleet. Organization quotas and entitlements are not applied. Capacity can change immediately and sandbox creation remains authoritative.

Authorization

headerAuthorizationBearer <token>

API Key access

Path Parameters

organizationId*string

Organization ID

Response Body

Shared GPU capacity grouped by GPU type.

application/json
  1. response
observedAt*string

Time at which this capacity snapshot was calculated. Responses may be cached for up to five seconds.

Formatdate-time
capacity*array<>
curl -X GET 'http://localhost:3000/organizations/string/gpu-capacity'
{  "observedAt": "2000-01-23T04:56:07.000+00:00",  "capacity": [    {      "availableOnDemand": 0,      "gpuType": "H100",      "availableSpot": 0    },    {      "availableOnDemand": 0,      "gpuType": "H100",      "availableSpot": 0    }  ]}