Migration
AuthorizationBearer <token>Project API key (dtn_…) as a Bearer token. Mint via the management API (POST /projects/:id/api-keys) or this deployment's key-mint CLI. Every key carries an explicit set of verb:resource project permissions chosen at mint time (PLAN-API-KEY-PERMISSIONS.md); each operation lists the project permission it requires in its security requirement, and a key lacking it is answered 403 missing required project permission: <project-permission>. Some operations require an additional permission depending on the request body, stated in the operation's description. Holding a mutating verb (write:/delete:/invoke:) implies the resource's read: permission. Operations whose api_key project-permission list is empty need no specific project permission — any live project key works (the global catalogs and the artifact-cache read).
Scope: read:sandboxes
limit?integerMax rows to return. Clamped to [1, MAX_PAGE_SIZE]; default
DEFAULT_PAGE_SIZE.
int64cursor?stringOpaque continuation token from a previous page's next_cursor. Absent =
first page.
One page of the organization's Daytona v1 sandboxes (newest first), read from v1 now; next_cursor continues the walk until it is null. An organization v1 does not know answers an empty page.
application/json- response
GET /migration/v1/sandboxes response: one page.
items*array<>next_cursor?|Opaque token for the next page — pass it as ?cursor=; null on the
last page. A page can be shorter than limit without being the last:
only a null ends the walk.
curl -X GET 'https://example.com/migration/v1/sandboxes'{ "items": [ { "class": "string", "cpu": 0, "disk_gib": 0, "importable": true, "imported_sandbox_id": "string", "labels": { "property1": "string", "property2": "string" }, "last_backup_at": "2019-08-24T14:15:22Z", "memory_gib": 0, "name": "string", "reason": "string", "state": "string", "v1_id": "string" } ], "next_cursor": "string"}AuthorizationBearer <token>Project API key (dtn_…) as a Bearer token. Mint via the management API (POST /projects/:id/api-keys) or this deployment's key-mint CLI. Every key carries an explicit set of verb:resource project permissions chosen at mint time (PLAN-API-KEY-PERMISSIONS.md); each operation lists the project permission it requires in its security requirement, and a key lacking it is answered 403 missing required project permission: <project-permission>. Some operations require an additional permission depending on the request body, stated in the operation's description. Holding a mutating verb (write:/delete:/invoke:) implies the resource's read: permission. Operations whose api_key project-permission list is empty need no specific project permission — any live project key works (the global catalogs and the artifact-cache read).
Scope: write:sandboxes
v1_id*stringThe sandbox's id on Daytona v1
Optional; an empty body imports with the defaults
application/json- body
The persistent rlp sandbox the v1 sandbox was imported into: a new one, or the existing import (existing: true) unless force is set
application/json- response
POST /migration/v1/sandboxes/{v1_id}/import response.
existing*booleanTrue when this call returned an earlier import instead of creating a sandbox.
image_id*stringThe image it boots from (img_…): an anonymous format-version-1
image registered from the v1 backup; the import starts its conversion
to the current format and the sandbox's create joins it.
sandbox_id*stringThe persistent rlp sandbox (external id).
secret_env_vars*array<string>Env variable names whose value on v1 is a sandbox secret. v1 never hands the value over, so the imported sandbox starts without them: set them on it. Empty when the call returned an existing import.
status*stringThe sandbox's status. A fresh import is queued while its image is
imported from the v1 backup registry.
v1_labeled*booleanWhether v1 confirmed the daytona.io/migrated-to label on the v1
sandbox. False means the label could not be set now; the import itself
succeeded, and repeating the call retries the label.
warnings*array<string>What the import could not carry over: env vars and labels rlp refuses, env vars v1 keeps as sandbox secrets, and v1 settings with no rlp equivalent (auto-archive, auto-delete).
curl -X POST 'https://example.com/migration/v1/sandboxes/string/import'{ "existing": true, "image_id": "string", "sandbox_id": "string", "secret_env_vars": [ "string" ], "status": "string", "v1_labeled": true, "warnings": [ "string" ]}AuthorizationBearer <token>Project API key (dtn_…) as a Bearer token. Mint via the management API (POST /projects/:id/api-keys) or this deployment's key-mint CLI. Every key carries an explicit set of verb:resource project permissions chosen at mint time (PLAN-API-KEY-PERMISSIONS.md); each operation lists the project permission it requires in its security requirement, and a key lacking it is answered 403 missing required project permission: <project-permission>. Some operations require an additional permission depending on the request body, stated in the operation's description. Holding a mutating verb (write:/delete:/invoke:) implies the resource's read: permission. Operations whose api_key project-permission list is empty need no specific project permission — any live project key works (the global catalogs and the artifact-cache read).
Scope: read:sandboxes
Whether the caller's organization arrived from Daytona v1, and the counts of what came over into its default project (the only project synced with v1).
application/json- response
Response of GET /migration/v1/summary.
api_keys*integerLive API keys of the organization's default project. Keys synced from
v1 work on both platforms unchanged.
int64from_v1*booleanThe organization was imported from Daytona v1 (it carries the v1 organization id it came from). Personal organizations included.
images_converted*integerNamed images registered from v1 snapshots that are at the current image format.
int64images_to_convert*integerNamed images registered from v1 snapshots that are still below the
current image format (format_outdated): not converted yet,
converting, or a failed conversion (retried on the next use). Each
converts on its first Linux sandbox create, or ahead of time with
POST /images/{id}/convert.
int64personal*booleanThe organization is a personal organization.
registries*integerContainer registries of the default project.
int64sandboxes_imported*integerArchived v1 sandboxes imported into the default project.
int64curl -X GET 'https://example.com/migration/v1/summary'{ "api_keys": 0, "from_v1": true, "images_converted": 0, "images_to_convert": 0, "personal": true, "registries": 0, "sandboxes_imported": 0}