Station 만들기
const url = 'https://dev.api.endueos.com/api/v1/stations';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"name":"lab","description":"실험용 Station"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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
요청 본문필수
섹션 제목: “요청 본문필수”object
이 프로젝트에 만든다. 없으면 가장 오래된 프로젝트 — 프로젝트가 하나도 없으면 “기본 프로젝트” 를 만들어 넣는다. 관리형이면 쓰지 않는다.
관리형 Station 의 주인 (ENDUE-1105). 부른 사람이 STATION_MANAGERS 에 있을 때만 받는다 — 아니면 403 FORBIDDEN.
주인의 개인 조직 안 「endue AI 에이전트」 프로젝트에 만들고, 주인의 Station 상한이 아니라 관리형 상한(MAX_MANAGED_STATIONS_PER_USER)으로 센다.
관리형 Station 의 정체. owner_id 와 함께 준다. 같은 관리자·같은 agent_id 면 이미 있는 Station 을 돌려준다.
object
예시
{ "name": "lab", "description": "실험용 Station"}201
섹션 제목: “201”만들었다.
object
object
Station 이 속한 프로젝트.
프로젝트의 조직 (D-60). 비용을 내는 지갑의 조직이다 (ENDUE-1105 부터 공개).
만든 사람. v0.2.0 에서 Station 안(기기·명령)은 아직 이 사용자만 다룬다. 관리형 Station 이면 관리자가 지정한 주인이다.
Station 에 정확히 하나 딸린 OS. 따로 만들거나 지울 수 없다.
object
이 OS 를 만든 endue OS 릴리스.
object
Station 에 등록할 수 있는 Device 수 (actual·virtual 합계). 1~500, 기본 50.
명령에 timeout_ms 가 없을 때 쓰는 값. 1000~120000, 기본 12000.
허용하는 Device 종류. 기본은 다섯 가지 전부. actual·virtual 모두에 적용된다.
Station 에 만들 수 있는 virtual Device 수. 0~50, 기본 10. 0 이면 virtual Device 를 만들 수 없다.
Station 의 virtual Device 영구 볼륨(Storage) 크기 합계 상한 (GB). 0~2000, 기본 100.
object
서버 처리 시간(ms).
예시
{ "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" ] } } }}400
섹션 제목: “400”요청 형식이 틀렸다 — VALIDATION_ERROR(details.errors[]) 또는 BAD_REQUEST. 본문은 오류 봉투.
401
섹션 제목: “401”인증이 없거나 무효다 — UNAUTHORIZED. 본문은 오류 봉투.
403
섹션 제목: “403”이 인증 수단으로는 못 하는 일이다 — FORBIDDEN (예: API 키로 클라우드 기기 만들기). 본문은 오류 봉투.
404
섹션 제목: “404”없거나 내 것이 아니다 — *_NOT_FOUND. 본문은 오류 봉투.
409
섹션 제목: “409”지금 상태와 충돌한다 — 코드는 위 설명을 본다. 본문은 오류 봉투.
429
섹션 제목: “429”한도를 넘었다 — Retry-After 초 뒤에 다시. 본문은 오류 봉투.
500
섹션 제목: “500”서버 오류 — INTERNAL_ERROR. 본문은 오류 봉투.
503
섹션 제목: “503”의존 서비스에 닿지 못했다 — 잠시 뒤 다시. 본문은 오류 봉투.