Organizations
Manage your organizations and their resources.
Daytona provides organizations as a way to group resources and enable collaboration. Users can work individually in their personal organization or together in a collaborative organization.
Manage your organizations in the Daytona Dashboard ↗ or through the API.
Personal vs Collaborative
Every Daytona user starts with a personal organization for solo use and experimentation. Collaborative organizations are created manually for teams, with shared access and controls.
| Feature | Personal organization | Collaborative organization |
|---|---|---|
| Creation | Automatic on signup | Manually by a user |
| Members | Single user only | Multiple users (invite-based) |
| Access Control | No roles or permissions | Roles with fixed permission sets |
| Billing | Tied to individual user | Shared across team members |
| Use Case | Personal testing, small projects | Company/team development and production |
| Quota Scope | Per user | Shared across all members |
| Deletable | No | Yes (by admins) |
Switch between personal and collaborative organizations with the dropdown in the Daytona Dashboard ↗ sidebar. Each organization has its own sandboxes, API keys, and resource quotas.
Create organization
Create organizations in the Daytona Dashboard ↗ or with the API.
- Go to Daytona Dashboard ↗
- Expand the dropdown at the top-left corner of the sidebar to view your organizations
- Click Create Organization
- Enter the organization name
- Select a region
- Click Create
daytona org create 'My Organization'Operations
List organizations
List all organizations the authenticated user belongs to.
daytona org listSelect organization
Select the organization that following CLI commands run against. The CLI also restores the project you last used in that organization, or its default project. Pass an ID or an unambiguous name; with no argument, the CLI shows a picker at a terminal.
daytona org use ORGANIZATION_IDGet by ID
Get an organization by ID.
daytona org get ORGANIZATION_IDCurrent user
# The signed-in user, the credential in use, and the selected organization and project
daytona whoamiCurrent principal
Get the caller's resolved principal in one organization: whether it is a user or an organization API key, its identity, and its organization permissions. The response reveals only the caller's own grants, so no permission beyond membership is required. The route accepts organization API keys and user tokens.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/principal' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'{
"kind": "user",
"org_id": "ORGANIZATION_ID",
"user_id": "USER_ID",
"key_id": null,
"permissions": ["read:organization", "write:organization", "read:members"]
}Rename organization
Rename an organization. The new name follows the same rules as on create: it is trimmed, and must be 1 to 100 characters with no control characters.
daytona org update ORGANIZATION_ID --name 'New Organization Name'Leave organization
Leave an organization.
- Go to Daytona Dashboard ↗
- Expand the dropdown at the top-left corner of the sidebar to view your organizations
- Select the organization you want to leave
- Click Settings in the sidebar
- Click Leave Organization
- Confirm by clicking Leave
daytona org leave ORGANIZATION_IDDelete organization
Delete an organization.
- Go to Daytona Dashboard ↗
- Expand the dropdown at the top-left corner of the sidebar to view your organizations
- Select the organization you want to delete
- Click Settings in the sidebar
- Click Delete Organization
- Confirm the deletion by typing the organization name and clicking Delete
daytona org delete ORGANIZATION_IDLimits
Get the effective organization limits and the current usage they are checked against. Each limit reports its effective value and where that value comes from: the organization, the platform default, or no limit. The response also carries the seat cap with the seated members and pending invitations that count against it, and whether the limits are enforced.
# The argument is optional; omit it to use the selected organization
daytona org limits ORGANIZATION_IDSet the timeout cap
Set or clear the organization's maximum sandbox timeout. It is the one organization limit that members can change themselves. The cap can be any value up to the platform maximum, which is 86400 seconds by default; clearing it inherits the platform maximum. A cap above the platform maximum can only be assigned by a platform operator.
# Cap every sandbox timeout in the organization at 1 hour
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/limits' \
--request PATCH \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--data '{ "max_timeout_secs": 3600 }'
# Clear the cap and inherit the platform maximum
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/limits' \
--request PATCH \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--data '{ "max_timeout_secs": null }'| Field | Type | Description |
|---|---|---|
max_timeout_secs | integer | Required. Sets the cap in seconds, from 1 up to the platform maximum. A value of null clears the cap. A value of 0 or less, or a value above the platform maximum, returns 400. |
Entitlements and feature flags
Entitlements are the capabilities an organization's plan grants; feature flags are platform switches evaluated per organization. Both are read-only and return every catalog key, so a client never has to guess at an absent key. Requires read:organization, which every role includes.
Entitlements
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/entitlements' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'{
"enforced": true,
"entitlements": {
"preview_warning_opt_out": false
}
}Feature flags
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/feature-flags' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'Preview warning
Turn the preview warning page off or on. It applies to every sandbox preview in the organization and decides whether a visitor sees the warning page first.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/preview-warning' \
--request PATCH \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--header 'Content-Type: application/json' \
--data '{ "disabled": true }'| Field | Type | Description |
|---|---|---|
disabled | boolean | Turns the preview warning off when true and on when false. |
Telemetry forwarding
Get the configuration
Get the telemetry forwarding configuration. Daytona forwards the organization's sandbox logs, traces, and metrics to the OTLP/HTTP endpoint in this configuration. The response lists the names of the configured request headers; header values are write-only and never returned.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/otel-config' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'{
"endpoint": "https://otel.example.com",
"header_names": ["Authorization"],
"created_at": "2026-09-10T12:00:00Z",
"updated_at": "2026-09-10T12:00:00Z"
}Set the configuration
Set telemetry forwarding. Each write replaces the whole configuration, including headers.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/otel-config' \
--request PUT \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"endpoint": "https://otel.example.com",
"headers": { "Authorization": "Bearer YOUR_COLLECTOR_TOKEN" }
}'| Field | Type | Description |
|---|---|---|
endpoint | string | Required. Must use https, be at most 2048 bytes, and resolve only to public IP addresses; localhost and local host names are refused. The collector appends /v1/logs, /v1/traces, or /v1/metrics to the endpoint for each signal. |
headers | object | Holds at most 16 entries and at most 16 KiB of names and values in total. Header names are 1 to 128 bytes and unique regardless of case. Header values are 1 to 4096 bytes of visible ASCII, space, or tab. You cannot set transport headers such as Host, Content-Type, and Content-Length. You also cannot set User-Agent or any Proxy-* header. To keep a stored header value without resending the value, pass ******** as the value. |
Delete the configuration
Delete the telemetry forwarding configuration. Sandbox telemetry stops being forwarded.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/otel-config' \
--request DELETE \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'macOS settings
The macOS settings control auto-reserve for macOS sandboxes. With auto-reserve on, a macOS create that finds no free slot on the organization's Mac reservations buys a 24-hour reservation that renews while a sandbox runs on it. Auto-reserve is off by default, and the organization caps how many auto-reserved reservations it holds at once.
Get the settings
Get the organization's macOS settings.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/macos-settings' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'{
"macos_auto_reserve": true,
"macos_auto_reserve_max_leases": 2,
"macos_auto_reserve_enabled_at": "2026-09-10T12:00:00Z",
"macos_auto_reserve_enabled_by": "USER_ID"
}The response has the following fields:
| Field | Description |
|---|---|
macos_auto_reserve_enabled_at | Records when auto-reserve was last turned on. The value is null while auto-reserve is off. |
macos_auto_reserve_enabled_by | Records who last turned auto-reserve on. The value is null while auto-reserve is off. |
Set the settings
Turn auto-reserve on or off, or change the cap on auto-reserved reservations. Fields left out of the request keep their stored values.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/macos-settings' \
--request PATCH \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--header 'Content-Type: application/json' \
--data '{ "macos_auto_reserve": true, "macos_auto_reserve_max_leases": 4 }'| Field | Type | Description |
|---|---|---|
macos_auto_reserve | boolean | Turns auto-reserve on or off. If omitted, the stored value stays unchanged. Turning auto-reserve on while it is already on keeps the original macos_auto_reserve_enabled_at and macos_auto_reserve_enabled_by. Turning auto-reserve off clears both fields. |
macos_auto_reserve_max_leases | integer | Sets the most auto-reserved reservations the organization holds at once. If omitted, the stored value stays unchanged. The value must be at least 1. A cap below 1 returns 400. |
Roles
Each member of an organization holds one or more roles. A role is a fixed set of permissions, and a member's permissions are the union of the permissions of all roles they hold. The admin role is protected: the organization must always keep at least one admin, and only an admin can grant or remove it. An invitation that names no roles grants the developer role.
| Role | Description |
|---|---|
admin | Full control of the organization, its members, and everything in it |
maintainer | Full control of everything inside the organization's projects, with no authority over the organization itself |
developer | Run and manage sandboxes, invoke functions, and view everything a sandbox can use |
read-only | View every project resource, and change none of them |
member | Sign in and see the organization, with no access to any resource |
auditor | Read the organization's audit log, without the ability to turn it off |
billing | See what the organization spends and manage how it pays |
spending-viewer | See what the organization spends, and nothing about how it pays |
sso-admin | Configure single sign-on for the organization |
infrastructure-admin | Manage the organization's own regions and runners |
sandboxes-manager | Create, change, and delete sandboxes |
snapshots-manager | Create, change, and delete snapshots and images |
volumes-manager | Create, change, and delete volumes |
registries-manager | Create, change, and delete private container registries |
secrets-manager | Create, change, and delete project secrets |
functions-manager | Deploy, invoke, change, and delete serverless functions |
List roles
List all roles in an organization.
# The fixed role catalog and the permission each role grants
daytona role listMembers
Daytona provides methods to manage members in an organization.
List members
List all members in an organization.
daytona member list --org ORGANIZATION_IDInvite members
Invite a new user to an organization.
- Go to Daytona Dashboard ↗
- Click Invite Member
- Enter the email address of the user you want to invite
- Select one or more roles for the new user under Roles
daytona invite create mail@example.com --org ORGANIZATION_ID --role developer| Flag | Type | Description |
|---|---|---|
--role | string | A comma-separated list of role slugs. |
Remove members
Remove a user from an organization.
- Go to Daytona Dashboard ↗
- Click Remove next to the user you want to remove
- Confirm the removal by clicking Remove
# Preview what the member loses before removing them
daytona member remove USER_ID --org ORGANIZATION_ID --preview
daytona member remove USER_ID --org ORGANIZATION_IDUpdate access
Update the access of a member in an organization.
- Go to Daytona Dashboard ↗
- Click the three-dot menu on the member row
- Click Edit roles
- Select the member's roles and click Save
# Replace the member's role set
daytona member update USER_ID --org ORGANIZATION_ID --role maintainer,billing
# Rehearse the change without applying it
daytona member update USER_ID --org ORGANIZATION_ID --role read-only --dry-runInvitations
View an organization invitation from the link or token in the invitation email.
- Open the link in the invitation email; it opens Daytona Dashboard ↗
- Review the organization, inviter, roles, and expiry of the invitation
# Show the invitation behind the dtni_ token or the link from the invitation email
daytona invite show INVITATION_TOKENAccept invitation
Accept a pending organization invitation.
- Open the link in the invitation email; it opens Daytona Dashboard ↗
- Sign in if prompted
- Review the organization, inviter, roles, and expiry of the invitation
- Click Accept
daytona invite accept INVITATION_TOKENOnce a user accepts an invitation to join an organization, they get access to the organization's resource quotas and can create an API key and sandboxes.
Decline invitation
Decline a pending organization invitation.
- Open the link in the invitation email; it opens Daytona Dashboard ↗
- Sign in if prompted
- Review the organization, inviter, roles, and expiry of the invitation
- Click Decline
- Confirm by clicking Decline
daytona invite decline INVITATION_TOKENList pending
List pending invitations for an organization.
daytona invite list --org ORGANIZATION_IDCancel invitation
Cancel an invitation for an organization.
- Go to Daytona Dashboard ↗
- Scroll to the Invitations table
- Click the three-dot menu on the invitation row
- Click Cancel
- Confirm by clicking Confirm
daytona invite revoke INVITATION_ID --org ORGANIZATION_ID