Sign Up

Migration

GET
/migration/v1/sandboxes

Authorization

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

Query Parameters

limit?integer

Max rows to return. Clamped to [1, MAX_PAGE_SIZE]; default DEFAULT_PAGE_SIZE.

Formatint64
cursor?string

Opaque continuation token from a previous page's next_cursor. Absent = first page.

Response Body

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
  1. 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"}
POST
/migration/v1/sandboxes/{v1_id}/import

Authorization

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

Path Parameters

v1_id*string

The sandbox's id on Daytona v1

Request Body

Optional; an empty body imports with the defaults

application/json
  1. body

Response 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
  1. response

POST /migration/v1/sandboxes/{v1_id}/import response.

existing*boolean

True when this call returned an earlier import instead of creating a sandbox.

image_id*string

The 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*string

The 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*string

The sandbox's status. A fresh import is queued while its image is imported from the v1 backup registry.

v1_labeled*boolean

Whether 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"  ]}
GET
/migration/v1/summary

Authorization

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

Response Body

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
  1. response

Response of GET /migration/v1/summary.

api_keys*integer

Live API keys of the organization's default project. Keys synced from v1 work on both platforms unchanged.

Formatint64
from_v1*boolean

The organization was imported from Daytona v1 (it carries the v1 organization id it came from). Personal organizations included.

images_converted*integer

Named images registered from v1 snapshots that are at the current image format.

Formatint64
images_to_convert*integer

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

Formatint64
personal*boolean

The organization is a personal organization.

registries*integer

Container registries of the default project.

Formatint64
sandboxes_imported*integer

Archived v1 sandboxes imported into the default project.

Formatint64
curl -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}