Sign Up

Organizations

GET /orgs

GET
/orgs

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Response Body

Organizations for the caller

application/json
  1. 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    }  ]}

POST /orgs

POST
/orgs

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Request Body

application/json
  1. body
name*string

Response Body

Created 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
  1. response
assignable_project_permissions*array<string>
id*string
Formatuuid
name*string
org_permissions*array<string>
personal*boolean
role*string
roles*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"  ]}

GET /orgs/{id}

GET
/orgs/{id}

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

Organization details

application/json
  1. response
assignable_project_permissions*array<string>
budget_stop_grace_hours*integer

The 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.

Formatint32
id*string
Formatuuid
name*string
org_permissions*array<string>
personal*boolean
preview_warning_disabled*boolean

Whether 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*string
roles*array<string>
suspended*boolean
suspended_reason?string|null
workos_linked*boolean

Whether 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*boolean

Whether 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}
PATCH
/orgs/{id}

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Request Body

application/json
  1. body
name*string

Response Body

Renamed organization

application/json
  1. response
id*string
Formatuuid
name*string
curl -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
/orgs/{id}

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

Deleted organization

application/json
  1. response
deleted*string
Formatuuid
curl -X DELETE 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08'
{  "deleted": "c4017980-c97c-4b78-8ba2-7006e4f556cc"}
GET
/orgs/{id}/entitlements

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

Entitlement map and enforcement switch

application/json
  1. response

GET /orgs/{id}/entitlements — the handler returns this struct, so the served JSON and the documented schema cannot drift apart.

enforced*boolean

Whether 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  }}
GET
/orgs/{id}/feature-flags

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

Evaluated organization feature flags

application/json
  1. response
flags*
curl -X GET 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/feature-flags'
{  "flags": {    "property1": true,    "property2": true  }}
POST
/orgs/{id}/identity-providers/workos-admin-portal-link

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Request Body

application/json
  1. body

POST /orgs/:id/identity-providers/workos-admin-portal-link body.

intent*PortalIntent

sso configures an SSO connection; dsync a directory (SCIM) sync.

Value in"sso""dsync"

Response Body

The Admin Portal link

application/json
  1. response
url*string

The 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"}
GET
/orgs/{id}/identity-providers/workos-sso-connections

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

The organization's SSO connections

application/json
  1. 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"    }  ]}
GET
/orgs/{id}/limits

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

Effective limits and usage

application/json
  1. response
enforced*boolean

Whether 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  }}
PATCH
/orgs/{id}/limits

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Request Body

application/json
  1. 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?|
Formatint64

Response Body

The refreshed timeout limits after the write

application/json
  1. 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  }}
GET
/orgs/{id}/macos-settings

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

Organization macOS auto-reserve settings

application/json
  1. response

organizations' macOS columns, as the GET/PATCH body renders them.

macos_auto_reserve*boolean

Auto-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.

Formatdate-time
macos_auto_reserve_enabled_by?|

The admin who last turned it on; null while it is off.

Formatuuid
macos_auto_reserve_max_leases*integer

The most live auto-created leases the org may hold at once.

Formatint32
curl -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}
PATCH
/orgs/{id}/macos-settings

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Request Body

application/json
  1. body

PATCH /orgs/:id/macos-settings body: any non-empty subset.

macos_auto_reserve?boolean|null
macos_auto_reserve_max_leases?|
Formatint32

Response Body

Stored macOS auto-reserve settings

application/json
  1. response

organizations' macOS columns, as the GET/PATCH body renders them.

macos_auto_reserve*boolean

Auto-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.

Formatdate-time
macos_auto_reserve_enabled_by?|

The admin who last turned it on; null while it is off.

Formatuuid
macos_auto_reserve_max_leases*integer

The most live auto-created leases the org may hold at once.

Formatint32
curl -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}
GET
/orgs/{id}/otel-config

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

The organization's OTEL config

application/json
  1. response

The config body every management success returns: the endpoint and the header names. No plane returns a header value.

created_at*string
Formatdate-time
endpoint*string

The tenant's OTLP/HTTP endpoint.

header_names*array<string>

Names of the request headers configured; values are write-only and never returned.

updated_at*string
Formatdate-time
curl -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"}
DELETE
/orgs/{id}/otel-config

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

Config removed (or none was set)

curl -X DELETE 'https://example.com/orgs/497f6eca-6276-4993-bfeb-53cbbbba6f08/otel-config'
Empty
PUT
/orgs/{id}/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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Request Body

application/json
  1. 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*string

OTLP/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.

Response Body

The stored config (header names only)

application/json
  1. response

The config body every management success returns: the endpoint and the header names. No plane returns a header value.

created_at*string
Formatdate-time
endpoint*string

The tenant's OTLP/HTTP endpoint.

header_names*array<string>

Names of the request headers configured; values are write-only and never returned.

updated_at*string
Formatdate-time
curl -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"}
PATCH
/orgs/{id}/preview-warning

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.

Authorization

user_jwt
headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Request Body

application/json
  1. 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*boolean

true 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.

Response Body

The stored value after the write

application/json
  1. response

PATCH /orgs/{id}/preview-warning response (PLAN-PREVIEW-WARNING-PAGE.md): the stored value of organizations.preview_warning_disabled after the write.

disabled*boolean

true 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}
GET
/orgs/{id}/principal

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.

Authorization

headerAuthorizationBearer <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.

Path Parameters

id*string

Organization id

Formatuuid

Response Body

The caller's principal

application/json
  1. response

The caller's resolved org principal (GET /orgs/{id}/principal).

key_id?|

Present when kind is org_key.

Formatuuid
kind*string

user (OIDC JWT) or org_key (dtno_ organization API key).

org_id*string
Formatuuid
permissions*array<string>

Canonical-order org permission strings the caller holds in this organization.

user_id?|

Present when kind is user.

Formatuuid
curl -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"}