콘텐츠로 이동

createWorkspace

POST
/api/v1/stations/{station_id}/workspaces
curl --request POST \
--url https://dev.api.endueos.com/api/v1/stations/stn_01J9ZK3Q8M4XW7D2N5R6T0V1BC/workspaces \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "quote_token": "example", "storage_bindings": [ { "storage_id": "wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC", "mount_path": "example" } ], "default_storage_id": "wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC", "storage_id": "wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC", "snapshot_id": "wsnp_01J9ZK3Q8M4XW7D2N5R6T0V1BC", "name": "example", "environment": "linux", "provider": "fly", "resources": { "minimum": { "cpus": 1, "memory_mb": 1 }, "maximum": { "cpus": 1, "memory_mb": 1 } }, "storage_gb": 1, "idle_timeout_seconds": 1, "start": true, "secrets": {} }'

Creates a persistent isolated workspace and a 1:1 runtime device. macOS/Android are unavailable on Fly. local runs on the user’s device (linux, macos, chrome). Idempotency key reuses the same identity.

station_id
필수
string
/^stn_[0-9A-HJKMNP-TV-Z]{26}$/
예시
stn_01J9ZK3Q8M4XW7D2N5R6T0V1BC
X-Idempotency-Key
string
/^[A-Za-z0-9._:-]{1,200}$/
Media typeapplication/json

local takes only name, environment and provider; compute settings are rejected with 400.

object
quote_token
string
storage_bindings
Array<object>
object
storage_id
필수
string
/^wst_[0-9A-HJKMNP-TV-Z]{26}$/
예시
wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC
mount_path
필수
string
>= 1 characters <= 4096 characters
default_storage_id
string
/^wst_[0-9A-HJKMNP-TV-Z]{26}$/
예시
wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC
storage_id

Mutually exclusive with storage_bindings; preserves the legacy whole-root layout.

string
/^wst_[0-9A-HJKMNP-TV-Z]{26}$/
예시
wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC
snapshot_id
string
/^wsnp_[0-9A-HJKMNP-TV-Z]{26}$/
예시
wsnp_01J9ZK3Q8M4XW7D2N5R6T0V1BC
name
필수
string
>= 1 characters <= 100 characters
environment
필수
string
허용 값: linux chrome macos android
provider

Where the workspace runs. fly = Linux/Chrome cloud; aws = Android on Graviton with Redroid and the bundled Endue Android agent (compute and a dedicated EBS disk). local = the user’s own device with an installed agent; endue OS provisions nothing.

string
허용 값: fly aws local
resources
object
minimum
필수
object
cpus
필수
integer format: int32
>= 1 <= 16
memory_mb
필수
integer format: int32
>= 256 <= 32768
maximum
필수
object
cpus
필수
integer format: int32
>= 1 <= 16
memory_mb
필수
integer format: int32
>= 256 <= 32768
storage_gb
integer format: int32
>= 1 <= 100
idle_timeout_seconds
integer format: int32
>= 60 <= 86400
start
boolean
secrets

Environment name (^[A-Z][A-Z0-9_]{0,63}$) -> secret in the same station. Delivered as one-time tokens when the secret grants this workspace use.

object

만들었다.

Media typeapplication/json
object
data
필수

local: status comes from the installed agent — pending (never connected), running (connected), stopped (offline). resources, storage and idle_timeout_seconds are null because the device decides them.

object
workspace_id
필수
string
/^wsp_[0-9A-HJKMNP-TV-Z]{26}$/
station_id
필수
string
/^stn_[0-9A-HJKMNP-TV-Z]{26}$/
name
필수
string
environment
필수
string
허용 값: linux chrome macos android
provider
필수

Where the workspace runs. fly = Linux/Chrome cloud; aws = Android on Graviton with Redroid and the bundled Endue Android agent (compute and a dedicated EBS disk). local = the user’s own device with an installed agent; endue OS provisions nothing.

string
허용 값: fly aws local
status
필수
string
허용 값: pending starting running stopping stopped failed deleting deleted
status_reason
필수
Any of:
string
storage_bindings
필수
Array<object>
object
storage_id
필수
string
/^wst_[0-9A-HJKMNP-TV-Z]{26}$/
mount_path
필수
string
>= 1 characters <= 4096 characters
workspace_id
필수
string
/^wsp_[0-9A-HJKMNP-TV-Z]{26}$/
generation
필수
integer format: int64
<= 9007199254740991
revision
필수
integer format: int64
<= 9007199254740991
state
필수
string
허용 값: attaching attached detaching blocked
last_checkpoint_at
필수
Any of:
string format: date-time
bindings_version
필수
integer format: int64
<= 9007199254740991
default_storage_id
필수
Any of:
string
/^wst_[0-9A-HJKMNP-TV-Z]{26}$/
storage_id
필수
Any of:
string
/^wst_[0-9A-HJKMNP-TV-Z]{26}$/
snapshot_id
필수
Any of:
string
/^wsnp_[0-9A-HJKMNP-TV-Z]{26}$/
resources
필수
Any of:
object
minimum
필수
object
cpus
필수
integer format: int32
>= 1 <= 16
memory_mb
필수
integer format: int32
>= 256 <= 32768
maximum
필수
object
cpus
필수
integer format: int32
>= 1 <= 16
memory_mb
필수
integer format: int32
>= 256 <= 32768
allocated
필수
object
cpus
필수
integer format: int32
>= 1 <= 16
memory_mb
필수
integer format: int32
>= 256 <= 32768
storage
필수
Any of:
object
volume_id
필수
string
/^vol_[0-9A-HJKMNP-TV-Z]{26}$/
size_gb
필수
integer format: int32
mount_path
필수
string
status
필수
string
허용 값: pending ready
device
필수
object
device_id
필수

Device 의 id — Resource 와 같은 res_ 다 (v0.1.0 이 이미 냈다).

string
/^res_[0-9A-HJKMNP-TV-Z]{26}$/
agent_id
필수
Any of:
string
/^agnt_[0-9A-HJKMNP-TV-Z]{26}$/
connected
필수
boolean
os
필수
Any of:
string
arch
필수
Any of:
string
agent_version
필수
Any of:
string
last_connected_at
필수
Any of:
string format: date-time
idle_timeout_seconds
필수
Any of:
integer format: int32
last_used_at
필수
string format: date-time
created_at
필수
string format: date-time
updated_at
필수
string format: date-time
secrets
필수
object
meta
필수
object
request_id
필수
string
timestamp
필수
string format: date-time
duration

서버 처리 시간(ms).

integer format: int32
예시
{
"data": {
"workspace_id": "wsp_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"station_id": "stn_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"environment": "linux",
"provider": "fly",
"status": "pending",
"storage_bindings": [
{
"storage_id": "wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"workspace_id": "wsp_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"state": "attaching"
}
],
"default_storage_id": "wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"storage_id": "wst_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"snapshot_id": "wsnp_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"storage": {
"volume_id": "vol_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"status": "pending"
},
"device": {
"device_id": "res_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"agent_id": "agnt_01J9ZK3Q8M4XW7D2N5R6T0V1BC"
}
}
}

요청 형식이 틀렸다 — VALIDATION_ERROR(details.errors[]) 또는 BAD_REQUEST. 본문은 오류 봉투.

인증이 없거나 무효다 — UNAUTHORIZED. 본문은 오류 봉투.

크레딧이 없다 — INSUFFICIENT_CREDITS (충전하면 다시 된다). 본문은 오류 봉투.

없거나 내 것이 아니다 — *_NOT_FOUND. 본문은 오류 봉투.

지금 상태와 충돌한다 — 코드는 위 설명을 본다. 본문은 오류 봉투.

형식은 맞지만 할 수 없다 — 코드는 위 설명을 본다. 본문은 오류 봉투.

한도를 넘었다 — Retry-After 초 뒤에 다시. 본문은 오류 봉투.

서버 오류 — INTERNAL_ERROR. 본문은 오류 봉투.

의존 서비스에 닿지 못했다 — 잠시 뒤 다시. 본문은 오류 봉투.