Organizations
List the organizations the caller belongs to, including the caller's effective org permissions and assignable project-permission ceiling in each organization. Membership alone admits an organization onto this list; no additional organization permission is required. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
Organizations for the caller
application/json- response
organizations*array<>curl -X GET 'https://example.com/orgs'{ "organizations": [ { "assignable_project_permissions": [ "string" ], "budget_stop_grace_hours": 0, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "org_permissions": [ "string" ], "personal": true, "preview_warning_disabled": true, "role": "string", "roles": [ "string" ], "suspended": true, "suspended_reason": "string", "workos_linked": true, "workos_org_id": "string", "workos_sync_enabled": true } ]}Create a non-personal organization and seat the caller as its initial admin. No existing organization permission is required because this route creates the org context itself. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
application/json- body
name*stringCreated organization: the caller's membership row for it (id, name, personal, role, roles, permission sets). A fresh organization is never suspended, so the suspension fields of the list/get shape are omitted here.
application/json- response
assignable_project_permissions*array<string>id*stringuuidname*stringorg_permissions*array<string>personal*booleanrole*stringroles*array<string>curl -X POST 'https://example.com/orgs' \ -H 'Content-Type: application/json' \ -d '{ "name": "string"}'{ "assignable_project_permissions": [ "string" ], "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "org_permissions": [ "string" ], "personal": true, "role": "string", "roles": [ "string" ]}Read one organization. The caller must be a seated member holding read:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidOrganization details
application/json- response
assignable_project_permissions*array<string>budget_stop_grace_hours*integerThe organization's effective project budget grace period, in hours (PLAN-PROJECT-BUDGETS.md D5): how long after a project's budget hold starts its running persistent sandboxes are stopped and its running ephemeral sandboxes deleted (macOS sandboxes, which run on a prepaid Mac lease, keep running). The organization's own value when an operator set one, otherwise the deployment default.
int32id*stringuuidname*stringorg_permissions*array<string>personal*booleanpreview_warning_disabled*booleanWhether the organization has turned off the proxy's preview warning
page for its sandbox previews (PLAN-PREVIEW-WARNING-PAGE.md). false
by default: the page is shown. Set through
PATCH /orgs/{id}/preview-warning.
role*stringroles*array<string>suspended*booleansuspended_reason?string|nullworkos_linked*booleanWhether the organization is linked to a WorkOS organization — the one
it shares with Daytona v1, and the one the Single sign-on page's Admin
Portal configures (/orgs/{id}/identity-providers/*). Independent of
workos_sync_enabled: an organization whose sync an operator switched
off stays linked. Never true for a personal organization.
workos_org_id?|The id of the WorkOS organization the organization is linked to, set
exactly when workos_linked. The dashboard sends it as the
organization_id of GET /auth/session/login so the hosted login
lands in the organization the member last worked in instead of
showing WorkOS's organization picker.
workos_sync_enabled*booleanWhether the organization's memberships sync through WorkOS with the
Daytona v1 organization of the same id (PLAN-DAYTONA-USER-MIGRATION.md
D12, PLAN-IDENTITY-RECONCILER.md D17). When true, removing a member
also removes them from the Daytona v1 organization, and the admin
role reaches WorkOS as owner. Never true for a personal
organization, nor on a deployment that mirrors nothing to WorkOS.
curl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08'{ "assignable_project_permissions": [ "string" ], "budget_stop_grace_hours": 0, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "org_permissions": [ "string" ], "personal": true, "preview_warning_disabled": true, "role": "string", "roles": [ "string" ], "suspended": true, "suspended_reason": "string", "workos_linked": true, "workos_org_id": "string", "workos_sync_enabled": true}Rename one organization. The caller must be a seated member holding write:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not. The name is trimmed and validated (non-empty, no control characters, bounded length); the stored value is the trimmed one.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidapplication/json- body
name*stringRenamed organization
application/json- response
id*stringuuidname*stringcurl -X PATCH 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08' \ -H 'Content-Type: application/json' \ -d '{ "name": "string"}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string"}Delete one organization after the guarded project and resource checks pass. The caller must be a seated member holding delete:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidDeleted organization
application/json- response
deleted*stringuuidcurl -X DELETE 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08'{ "deleted": "c4017980-c97c-4b78-8ba2-7006e4f556cc"}The organization's entitlements as a full catalog map (every catalog key present, true when held) plus whether the platform enforces them at admission. The caller must be a seated member holding read:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidEntitlement map and enforcement switch
application/json- response
GET /orgs/{id}/entitlements — the handler returns this struct, so the
served JSON and the documented schema cannot drift apart.
enforced*booleanWhether entitlements are enforced at admission; while off, every key reads as entitled for gating purposes.
entitlements*Every catalog key, true when the organization holds it.
curl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/entitlements'{ "enforced": true, "entitlements": { "property1": true, "property2": true }}Return the fully evaluated feature-flag map for one organization. The caller must be a seated member holding read:organization, which every catalog role implies. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidEvaluated organization feature flags
application/json- response
flags*curl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/feature-flags'{ "flags": { "property1": true, "property2": true }}Mint a WorkOS Admin Portal link where the organization's IT admin configures single sign-on (intent: sso) or directory sync (intent: dsync). The link expires five minutes after issuance. The caller must be a seated member holding write:sso; the organization needs the sso entitlement (Enterprise plan) where entitlement enforcement is on. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidapplication/json- body
POST /orgs/:id/identity-providers/workos-admin-portal-link body.
intent*PortalIntentsso configures an SSO connection; dsync a directory (SCIM) sync.
"sso""dsync"The Admin Portal link
application/json- response
url*stringThe WorkOS Admin Portal URL. It expires five minutes after issuance.
curl -X POST 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/identity-providers/workos-admin-portal-link' \ -H 'Content-Type: application/json' \ -d '{ "intent": "sso"}'{ "url": "string"}List the SSO connections configured for the organization in the WorkOS Admin Portal. An organization not yet linked to WorkOS has none. The caller must be a seated member holding read:sso; the organization needs the sso entitlement (Enterprise plan) where entitlement enforcement is on. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidThe organization's SSO connections
application/json- response
connections*array<>curl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/identity-providers/workos-sso-connections'{ "connections": [ { "connection_type": "string", "created_at": "string", "domains": [ "string" ], "id": "string", "name": "string", "state": "string", "updated_at": "string" } ]}Effective sandbox limits for one organization with their source (assigned on the organization, the platform default, or unlimited) and current usage: global totals for the soft tier, and the reserved GPU and Windows counts for the strict tier. A limit refusal at admission is a 429 whose envelope code is LIMIT_EXCEEDED, with limit, current and max as extras. The caller must be a seated member holding read:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidEffective limits and usage
application/json- response
enforced*booleanWhether the platform enforces limits at admission; when false, the values are informational only.
members*The seat cap group (PLAN-PRICING-PLANS.md "Seat cap (api)"): the effective
max_members with its source, the seated members, and the undecided
invitations that also count at invitation time.
soft*strict*timeouts*The lifecycle-timeout pair (PLAN-LIFECYCLE-TIMEOUTS.md Decision 7), as two
plain numbers rather than the count limits' {effective, source} shape:
neither has a usage half, an unlimited state, or a per-value source a
client acts on, so the objects carried nothing (Decision 7 as amended,
2026-10-01).
usage*curl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/limits'{ "enforced": true, "members": { "current": 0, "max_members": { "effective": 0, "source": "org" }, "pending_invitations": 0 }, "soft": { "max_concurrent_builds": { "effective": 0, "source": "org" }, "max_concurrent_vms": { "effective": 0, "source": "org" }, "max_total_vms": { "effective": 0, "source": "org" } }, "strict": { "max_concurrent_gpu_vms": { "effective": 0, "source": "org" }, "max_concurrent_windows_vms": { "effective": 0, "source": "org" } }, "timeouts": { "default_timeout_secs": 0, "max_timeout_secs": 0 }, "usage": { "gpu_vms": 0, "totals": { "active_builds": 0, "concurrent_vms": 0, "total_vms": 0 }, "windows_vms": 0 }}Set or clear the organization's own max_timeout_secs, the one self-service limit: a number in 1..= the platform maximum to cap every sandbox timeout_secs under it, or null to inherit the platform maximum. A cap above the platform maximum is an operator assignment and is refused here. The caller must be a seated member holding write:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidapplication/json- body
Body of the member-facing PATCH /orgs/:id/limits
(PLAN-LIFECYCLE-TIMEOUTS.md Decision 7): the ONE self-service field. The
same double-Option tri-state as the internal assignment, so an absent
field (an empty {} body) is a loud 400 rather than a silent clear.
max_timeout_secs?|int64The refreshed timeout limits after the write
application/json- response
The refreshed timeouts group after the write, so the Limits page can
re-render from the response.
timeouts*The lifecycle-timeout pair (PLAN-LIFECYCLE-TIMEOUTS.md Decision 7), as two
plain numbers rather than the count limits' {effective, source} shape:
neither has a usage half, an unlimited state, or a per-value source a
client acts on, so the objects carried nothing (Decision 7 as amended,
2026-10-01).
curl -X PATCH 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/limits' \ -H 'Content-Type: application/json' \ -d '{}'{ "timeouts": { "default_timeout_secs": 0, "max_timeout_secs": 0 }}user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidOrganization macOS auto-reserve settings
application/json- response
organizations' macOS columns, as the GET/PATCH body renders them.
macos_auto_reserve*booleanAuto-reserve is on: a macOS create with no free slot on the org's leases buys a 24-hour lease (auto-renewing while a sandbox runs on it).
macos_auto_reserve_enabled_at?|When auto-reserve was last turned on; null while it is off.
date-timemacos_auto_reserve_enabled_by?|The admin who last turned it on; null while it is off.
uuidmacos_auto_reserve_max_leases*integerThe most live auto-created leases the org may hold at once.
int32curl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/macos-settings'{ "macos_auto_reserve": true, "macos_auto_reserve_enabled_at": "2019-08-24T14:15:22Z", "macos_auto_reserve_enabled_by": "dde570e4-a4fe-4a24-b79a-d1fdb0afb8f2", "macos_auto_reserve_max_leases": 0}user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidapplication/json- body
PATCH /orgs/:id/macos-settings body: any non-empty subset.
macos_auto_reserve?boolean|nullmacos_auto_reserve_max_leases?|int32Stored macOS auto-reserve settings
application/json- response
organizations' macOS columns, as the GET/PATCH body renders them.
macos_auto_reserve*booleanAuto-reserve is on: a macOS create with no free slot on the org's leases buys a 24-hour lease (auto-renewing while a sandbox runs on it).
macos_auto_reserve_enabled_at?|When auto-reserve was last turned on; null while it is off.
date-timemacos_auto_reserve_enabled_by?|The admin who last turned it on; null while it is off.
uuidmacos_auto_reserve_max_leases*integerThe most live auto-created leases the org may hold at once.
int32curl -X PATCH 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/macos-settings' \ -H 'Content-Type: application/json' \ -d '{}'{ "macos_auto_reserve": true, "macos_auto_reserve_enabled_at": "2019-08-24T14:15:22Z", "macos_auto_reserve_enabled_by": "dde570e4-a4fe-4a24-b79a-d1fdb0afb8f2", "macos_auto_reserve_max_leases": 0}The organization's OTEL forwarding config (PLAN-ORG-OTEL-CONFIG.md): the tenant's OTLP/HTTP endpoint and the NAMES of its request headers — header values are write-only and never returned. The caller must be a seated member holding read:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidThe organization's OTEL config
application/json- response
The config body every management success returns: the endpoint and the header names. No plane returns a header value.
created_at*stringdate-timeendpoint*stringThe tenant's OTLP/HTTP endpoint.
header_names*array<string>Names of the request headers configured; values are write-only and never returned.
updated_at*stringdate-timecurl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/otel-config'{ "created_at": "2019-08-24T14:15:22Z", "endpoint": "string", "header_names": [ "string" ], "updated_at": "2019-08-24T14:15:22Z"}Remove the organization's OTEL forwarding config; sandbox telemetry stops being forwarded. Idempotent. The caller must be a seated member holding write:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidConfig removed (or none was set)
curl -X DELETE 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/otel-config'Replace the organization's OTEL forwarding config: the OTLP/HTTP endpoint and the request headers to send (header values are write-only). The whole config is replaced; an unknown body field is a 400. The caller must be a seated member holding write:organization. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidapplication/json- body
PUT /orgs/:id/otel-config request body. headers defaults to empty;
an unknown field is a 400 (a misspelt header would otherwise replace
the config with one that has no headers and answer 200).
endpoint*stringOTLP/HTTP endpoint (https://…; plaintext http only where the deployment allows insecure endpoints).
headers?Request headers sent to the endpoint, name → value. Values are write-only: no read returns them.
The stored config (header names only)
application/json- response
The config body every management success returns: the endpoint and the header names. No plane returns a header value.
created_at*stringdate-timeendpoint*stringThe tenant's OTLP/HTTP endpoint.
header_names*array<string>Names of the request headers configured; values are write-only and never returned.
updated_at*stringdate-timecurl -X PUT 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/otel-config' \ -H 'Content-Type: application/json' \ -d '{ "endpoint": "string"}'{ "created_at": "2019-08-24T14:15:22Z", "endpoint": "string", "header_names": [ "string" ], "updated_at": "2019-08-24T14:15:22Z"}Turn the proxy's preview warning page off or on for every sandbox preview of the organization. The caller must be a seated member holding write:organization; turning the page off (disabled: true) additionally needs the preview_warning_opt_out entitlement (Team plan and above) where entitlement enforcement is on. Only an OIDC user JWT is admitted on this route; dtno_ organization API keys are not.
user_jwtAuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidapplication/json- body
PATCH /orgs/:id/preview-warning body. deny_unknown_fields: a typo'd
field from a client must be a 400, never a silent no-op.
disabled*booleantrue turns the preview warning page off for every sandbox preview of
the organization (needs the preview_warning_opt_out entitlement where
enforcement is on); false turns it back on.
The stored value after the write
application/json- response
PATCH /orgs/{id}/preview-warning response (PLAN-PREVIEW-WARNING-PAGE.md):
the stored value of organizations.preview_warning_disabled after the
write.
disabled*booleantrue when the organization has turned the preview warning page off.
curl -X PATCH 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/preview-warning' \ -H 'Content-Type: application/json' \ -d '{ "disabled": true}'{ "disabled": true}The caller's own resolved principal in one organization: its kind (user or org_key), identity and the canonical-order org permission strings it holds. No permission beyond membership (users) or key scoping (org keys) is required — it reveals only the caller's own grants. A non-member user, or an org key scoped to another organization, is a 404. This is one of the two management routes that admit a dtno_ organization API key.
AuthorizationBearer <token>OIDC access token of a signed-in user (the dashboard/CLI login) used on the management plane: /me, /orgs*, /projects*, /invitations*, /roles, billing, audit, API-key, and service-account routes. Every management operation documents the org/project permission the authenticated member must hold.
id*stringOrganization id
uuidThe caller's principal
application/json- response
The caller's resolved org principal (GET /orgs/{id}/principal).
key_id?|Present when kind is org_key.
uuidkind*stringuser (OIDC JWT) or org_key (dtno_ organization API key).
org_id*stringuuidpermissions*array<string>Canonical-order org permission strings the caller holds in this organization.
user_id?|Present when kind is user.
uuidcurl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/principal'{ "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", "kind": "string", "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b", "permissions": [ "string" ], "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"}