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 organization API key
Get the organization API key that authenticates the request, with the organization permissions it holds now. The response never contains the token.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/api-keys/current' \
--header 'Authorization: Bearer YOUR_ORG_API_KEY'{
"id": "KEY_ID",
"org_id": "ORGANIZATION_ID",
"name": "my-org-key",
"key_prefix": "dtno_...",
"org_permissions": ["read:audit"],
"created_at": "2026-09-10T12:00:00Z",
"expires_at": null,
"last_used_at": "2026-09-11T08:30:00Z",
"revoked_at": null
}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_IDRoles
Each member of an organization holds one or more roles. A role is a set of permissions, and a member's permissions are the union of the permissions of all roles they hold. Daytona provides the built-in roles below, and an organization on the Enterprise plan can also define custom roles from its own choice of permissions. 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 |
budget-manager | Set and remove monthly budgets on the projects the member can access |
sso-admin | Configure single sign-on for the organization |
infrastructure-admin | Read-only access to the organization. A reserved role kept so existing assignments continue to work |
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 built-in roles, then the organization's custom roles by name.
# The built-in roles and the permissions each role grants
daytona role listGet role
Get one role of an organization, built-in or custom, with the permissions it grants.
# ROLE_ID is the identifier of a built-in role, such as developer, or the UUID of a custom role
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/roles/ROLE_ID' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'The response has the fields of a role in list roles.
Create custom role
Define a role from your own choice of permissions. A custom role can grant only permissions you hold. Every role includes the organization read permission, and a role that grants any project permission also includes the permissions to read projects and to create project API keys. Custom roles are assigned like built-in roles, to members, service accounts, and invitations.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/roles' \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--data '{
"name": "Sandbox operator",
"description": "Runs and manages sandboxes",
"project_permissions": ["read:sandboxes", "write:sandboxes"],
"organization_permissions": ["read:organization", "read:projects", "write:project_api_keys"]
}'| Field | Type | Description |
|---|---|---|
name | string | Sets the role name, unique in the organization ignoring case and different from the name of every built-in role. Leading and trailing whitespace is removed, and runs of whitespace inside become one space. The result must be from 1 to 64 characters. This field is required. |
description | string | Sets the purpose of the role, at most 256 characters. |
project_permissions | string[] | Sets the project permissions the role grants. This field is required. |
organization_permissions | string[] | Sets the organization permissions the role grants. It must include read:organization, and also read:projects and write:project_api_keys when project_permissions is not empty. This field is required. |
The response has the fields of a role in list roles.
Update custom role
Change the name, description, or permissions of a custom role. A permission list in the request replaces the role's list. Narrowing a role revokes the API keys of its holders that exceed their new permissions. A preview reports what the same update would change without applying it. Built-in roles cannot be changed.
# Report what the update would change, without applying it
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/roles/ROLE_ID/update-preview' \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--data '{
"project_permissions": ["read:sandboxes"]
}'
# Apply the update
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/roles/ROLE_ID' \
--request PATCH \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--data '{
"project_permissions": ["read:sandboxes"]
}'| Field | Type | Description |
|---|---|---|
name | string | Sets the new role name. Whitespace is normalized as on create, and the result must be from 1 to 64 characters. |
description | string | Sets the new purpose of the role, at most 256 characters. |
project_permissions | string[] | Replaces the project permissions the role grants. |
organization_permissions | string[] | Replaces the organization permissions the role grants. |
The preview response has the following fields:
| Field | Description |
|---|---|
revoked_api_keys | The number of API keys the update would revoke. |
affected_members | The number of members who hold the role. |
affected_service_accounts | The number of active service accounts that hold the role. |
pending_invitations | The number of pending invitations that grant the role. |
The update response has the following fields:
| Field | Description |
|---|---|
role | The updated role, with the fields of a role in list roles. |
revoked_api_keys | The number of API keys the update revoked. |
Delete custom role
Delete a custom role. A role that a member, a service account, or a pending invitation holds cannot be deleted; remove it from them first. Built-in roles cannot be deleted.
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/roles/ROLE_ID' \
--request DELETE \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'List permissions
List the permissions that roles and API keys grant. Each permission has an identifier, a display name, and a display category. Project permissions apply to the resources inside a project, and organization permissions apply to the organization itself.
# Every permission; scope=project or scope=organization restricts the list to one scope
curl 'https://api.daytona.com/permissions?scope=project' \
--header 'Authorization: Bearer YOUR_API_KEY'| Parameter | Type | Description |
|---|---|---|
scope | string | Restricts the list to project or organization permissions. Any other value returns 400. Omit it to list both. |
Members
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 | Sets the roles, as 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 --dry-run
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 get 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_IDLimits
Get the effective organization limits and the current usage they are checked against. Each limit reports its effective cap and the usage counted against it. The member limit also counts the pending invitations that reserve a seat. A read with an API key returns the limits of the API key's organization and leaves out the member limit.
from daytona import Daytona
daytona = Daytona()
limits = daytona.v2.get_limits()
concurrent = limits.sandboxes.concurrent
print(f"Concurrent sandboxes: {concurrent.usage} of {concurrent.limit}")Set the timeout cap
Set or clear the organization's maximum sandbox timeout. Daytona validates every sandbox timeout against this cap. The cap can be any value up to the platform maximum, and clearing it inherits the platform maximum.
# Cap every sandbox timeout in the organization at 1 hour
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID' \
--request PATCH \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--data '{ "max_sandbox_timeout_seconds": 3600 }'
# Clear the cap and inherit the platform maximum
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID' \
--request PATCH \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN' \
--data '{ "max_sandbox_timeout_seconds": null }'| Field | Type | Description |
|---|---|---|
max_sandbox_timeout_seconds | integer | Sets the cap in seconds, up to the platform maximum, which is 86400 by default. A value of null clears the cap. 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.
Entitlements
curl 'https://api.daytona.com/orgs/ORGANIZATION_ID/entitlements' \
--header 'Authorization: Bearer YOUR_OIDC_TOKEN'{
"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. |
OpenTelemetry configuration
Forward the logs, traces, and metrics of every sandbox in the organization to your OpenTelemetry collector. The forwarding configuration holds the OTLP/HTTP endpoint and the request headers to send. Getting the configuration requires the read:organization permission, and setting or deleting it requires the write:organization permission. For the requests and their fields, see forward sandbox telemetry.
Permissions
Organization settings and membership are governed by organization permissions, which you can grant through an organization role.
Every role includes the organization read permission, and leaving an organization requires only that permission. The audit logs record organization changes, invitations, and member changes.
| Permission | Grants |
|---|---|
read:organization | Get the organization, its limits, entitlements, feature flags, and telemetry configuration |
write:organization | Rename the organization and change its timeout cap, preview warning, and telemetry configuration |
delete:organization | Delete the organization |
read:members | List members and pending invitations |
write:members | Invite members, change their access, and cancel invitations |
delete:members | Remove members |
write:roles | Create and update custom roles |
delete:roles | Delete custom roles |