콘텐츠로 이동

Station 만들기

POST
/api/v1/stations
curl --request POST \
--url https://dev.api.endueos.com/api/v1/stations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "name": "lab", "description": "실험용 Station" }'

Station 을 만든다. OS 가 함께 생긴다. API 키로는 만들 수 없다 (403 FORBIDDEN). project_id 를 주면 그 프로젝트에 (없거나 남의 것이면 404 PROJECT_NOT_FOUND), 없으면 가장 오래된 프로젝트에 만든다 — 프로젝트가 하나도 없으면 “기본 프로젝트” 를 만들어 넣는다. ENDUE-1105 관리형: owner_id·managed 는 STATION_MANAGERS 에 있는 호출자만 (아니면 403 FORBIDDEN). X-Idempotency-Key 또는 같은 관리자·같은 agent_id 면 이미 있는 Station 을 돌려준다. 관리형 상한을 넘으면 409 STATION_LIMIT_REACHED.

가이드 — Station 과 OS

Media typeapplication/json
object
name
필수
string
>= 1 characters <= 100 characters
description
string
<= 500 characters
project_id

이 프로젝트에 만든다. 없으면 가장 오래된 프로젝트 — 프로젝트가 하나도 없으면 “기본 프로젝트” 를 만들어 넣는다. 관리형이면 쓰지 않는다.

string
/^prj_[0-9A-HJKMNP-TV-Z]{26}$/
owner_id

관리형 Station 의 주인 (ENDUE-1105). 부른 사람이 STATION_MANAGERS 에 있을 때만 받는다 — 아니면 403 FORBIDDEN. 주인의 개인 조직 안 「endue AI 에이전트」 프로젝트에 만들고, 주인의 Station 상한이 아니라 관리형 상한(MAX_MANAGED_STATIONS_PER_USER)으로 센다.

string
/^usr_.+$/
managed

관리형 Station 의 정체. owner_id 와 함께 준다. 같은 관리자·같은 agent_id 면 이미 있는 Station 을 돌려준다.

object
agent_id
필수
string
>= 1 characters <= 100 characters
agent_name
필수
string
>= 1 characters <= 100 characters
예시
{
"name": "lab",
"description": "실험용 Station"
}

만들었다.

Media typeapplication/json
object
data
필수
object
station_id
필수
string
/^stn_[0-9A-HJKMNP-TV-Z]{26}$/
project_id
필수

Station 이 속한 프로젝트.

string
/^prj_[0-9A-HJKMNP-TV-Z]{26}$/
org_id
필수

프로젝트의 조직 (D-60). 비용을 내는 지갑의 조직이다 (ENDUE-1105 부터 공개).

string
/^org_[0-9A-HJKMNP-TV-Z]{26}$/
owner_id
필수

만든 사람. v0.2.0 에서 Station 안(기기·명령)은 아직 이 사용자만 다룬다. 관리형 Station 이면 관리자가 지정한 주인이다.

string
/^usr_.+$/
name
필수
string
description
필수
Any of:
string
status
필수
string
허용 값: active
os
필수

Station 에 정확히 하나 딸린 OS. 따로 만들거나 지울 수 없다.

object
os_id
필수
string
/^osi_[0-9A-HJKMNP-TV-Z]{26}$/
station_id
필수
string
/^stn_[0-9A-HJKMNP-TV-Z]{26}$/
version
필수

이 OS 를 만든 endue OS 릴리스.

string
status
필수
string
허용 값: running halted
settings
필수
object
max_resources
필수

Station 에 등록할 수 있는 Device 수 (actual·virtual 합계). 1~500, 기본 50.

integer format: int32
>= 1 <= 500
default_command_timeout_ms
필수

명령에 timeout_ms 가 없을 때 쓰는 값. 1000~120000, 기본 12000.

integer format: int32
>= 1000 <= 120000
allowed_kinds
필수

허용하는 Device 종류. 기본은 다섯 가지 전부. actual·virtual 모두에 적용된다.

Array<string>
허용 값: chrome mac android linux windows
max_virtual_devices
필수

Station 에 만들 수 있는 virtual Device 수. 0~50, 기본 10. 0 이면 virtual Device 를 만들 수 없다.

integer format: int32
<= 50
max_volume_gb
필수

Station 의 virtual Device 영구 볼륨(Storage) 크기 합계 상한 (GB). 0~2000, 기본 100.

integer format: int32
<= 2000
booted_at
필수
Any of:
string format: date-time
halted_at
필수
Any of:
string format: date-time
created_at
필수
string format: date-time
updated_at
필수
string format: date-time
managed_by
필수
Any of:

usr_{Keycloak sub} — ULID 가 아니다.

string
/^usr_.+$/
managed
필수
Any of:

관리형 Station 이 누구의 것인지 — endue AI 에이전트 한 명에 Station 하나.

object
agent_id
필수
string
>= 1 characters <= 100 characters
agent_name
필수
string
>= 1 characters <= 100 characters
created_at
필수
string format: date-time
updated_at
필수
string format: date-time
meta
필수
object
request_id
필수
string
timestamp
필수
string format: date-time
duration

서버 처리 시간(ms).

integer format: int32
예시
{
"data": {
"station_id": "stn_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"project_id": "prj_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"org_id": "org_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"status": "active",
"os": {
"os_id": "osi_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"station_id": "stn_01J9ZK3Q8M4XW7D2N5R6T0V1BC",
"status": "running",
"settings": {
"allowed_kinds": [
"chrome"
]
}
}
}
}

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

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

이 인증 수단으로는 못 하는 일이다 — FORBIDDEN (예: API 키로 클라우드 기기 만들기). 본문은 오류 봉투.

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

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

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

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

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