{"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"opaque","description":"op_u_ 전권 토큰 또는 opk_ 스코프 키","scheme":"bearer","type":"http"}}},"info":{"description":"onpod 공개 REST API.\n\n베이스 URL: `https://api.onpod.ai`\n\n**인증.** 모든 엔드포인트(version·manual·openapi.json 제외)는 `Authorization: Bearer \u003c토큰\u003e`가 필요합니다.\n- `op_u_…` — 계정/CLI 전권 토큰(`onpod login` 또는 콘솔에서 발급한 기본 키).\n- `opk_…` — 엔터프라이즈 스코프 키. 발급 시 지정한 스코프 안에서만 동작하고, 만료를 둘 수 있습니다.\n\n**스코프(opk_ 키 전용).** `resource:action` 형식입니다. resource ∈ {pods, databases, volumes, static, backups, billing, pod-templates, domains, sandboxes, buckets, registry, builds, partner, org}, action ∈ {read, write}. `resource:*`는 읽기+쓰기, `*`는 전권입니다. write 스코프는 같은 리소스의 read를 포함합니다. **인스턴스 한정**: `resource:action:{id|slug}`로 특정 팟/자산 하나만 허용할 수 있습니다(예: `pods:write:{pod_id}`, `static:write:{slug}`). 인스턴스 한정 키는 생성·bulk 엔드포인트가 403이고, 팟 목록(GET /v1/pods, /v1/pod-groups)은 허용된 인스턴스만 걸러서 반환합니다(이름 기반 CLI 흐름 유지). 자동 확장 앱의 그룹 ID는 멤버 팟까지, static 사이트 slug는 그 사이트의 deployment finalize까지 커버합니다(인스턴스 지정 가능 리소스: pods, databases, volumes, static, pod-templates, domains, sandboxes, buckets, registry, builds). 권한이 부족하면 `403 scope_insufficient`가 반환됩니다. 계정·키 관리(/me, /auth, /api-keys)는 스코프 키로 호출할 수 없습니다.\n\n**조직(기업 계정).** 계정 하나가 조직을 만들고(owner) 직원을 이메일로 초대해 역할(admin/member)·부서를 관리할 수 있습니다(`/v1/org/*`). 부서(조직도)는 CSV 일괄 업로드(`POST /v1/org/departments/csv`, 형식 `code,name,parent_code,approver_email` — 상위 부서가 먼저)와 REST 양쪽으로 관리합니다. 인사(HR) 시스템과 주기 동기화라면 JSON 동기화(`POST /v1/org/departments/sync`·`POST /v1/org/members/sync`)를 쓰세요 — 현재 전체 상태를 밀어 넣으면 차이만 반영하고 항목별 결과(insert|update|skip|delete)를 돌려주는 멱등 API 입니다(부서=code, 멤버=email 매칭 · 신규 멤버 합류는 초대로만). 조직 API 자동화에는 `org:*` 스코프 키를 쓰세요. **웍스AI(wrks.ai) 연동** — 웍스AI 기업 관리자가 콘솔에서 「웍스AI로 로그인」 하면 조직이 웍스 기업과 연동되고 기업 계정 설정 마법사(/org/setup)가 열립니다(관리자가 마법사를 마치기 전엔 직원 로그인이 보류 — 계정도 만들지 않습니다). 웍스AI 로그인 사용자는 회사 계정만 씁니다(개인 컨텍스트 자원 생성은 403 `org_only`). 그 회사 직원은 onpod 계정 없이 웍스AI 로그인만으로 합류하고 「조직 전체/부서만」 사이트를 볼 수 있습니다. 누구까지 자동 합류시킬지는 **직원 합류 정책**(`PUT /v1/org/wrks/join-policy` · all=우리 회사 웍스 계정이면 누구나 · departments=고른 웍스 부서(하위 포함)만 · invite=관리자가 이메일로 초대한 직원만)으로 정하며, 정책 밖 직원은 계정이 만들어지지 않고 로그인 화면 안내(`wrks_join_department` / `wrks_join_invite`)만 봅니다 — 관리자가 부서를 추가하거나 초대하면 다시 「웍스AI로 로그인」으로 합류됩니다(부서는 웍스 조직도를 로그인마다 자동 미러 · `POST /v1/org/wrks/sync-departments`로 즉시 동기화). 웍스AI 로그인이 개설한 조직은 **웍스AI 통합 청구**(`billing_mode=wrks`)로 시작합니다 — 회사 자산 사용액이 onpod 카드·충전 대신 멤버 각자의 웍스AI 계정에 합산 청구되므로(카테고리 `onpod-hosting`, 1 unit=1원) 잔액이 0 이어도 배포됩니다(`GET /v1/billing/balance`의 `wrks_billed:true`). 다만 웍스AI 로그인(토큰)이 없는 멤버·웍스 사용량을 다 쓴 멤버는 새 자원 생성이 402 `wrks_login_required` / `wrks_usage_exhausted`로 막힙니다 — 웍스AI로 다시 로그인하거나 웍스 관리자에게 한도 상향을 요청하세요. 실행 중인 앱은 기본적으로 그대로 돌지만, 조직이 「사용량 소진 시 회사 앱 정지」(`PUT /v1/org/wrks/billing {stop_on_exhausted:true}`)를 켰으면 그 멤버의 회사 앱은 일시정지·DB 는 정지되고 사용량이 돌아오면 앱은 자동으로 다시 켜집니다. 현황은 `GET /v1/org/wrks/billing`.\n\n**파트너(리셀러).** 외부 플랫폼이 자기 end-user 별로 격리된 onpod 신분과 스코프 토큰을 프로그래밍 방식으로 발급·폐기할 수 있습니다(`/v1/partner/*`). `partner:*` 스코프 키 + 파트너 계정이 필요하고, child 토큰은 항상 최소권한 `opk_`로 발급됩니다(전권·partner 스코프 불가). 파트너 활성화는 onpod에 요청하세요.\n\n**파트너 과금 — 후불 통합 청구.** 파트너 과금 모드는 두 가지이고 `GET /v1/partner`의 `billing_mode`로 확인합니다. ① `child_prepaid`(기본): 파트너가 `POST /v1/partner/users/{id}/credit`로 child에 크레딧을 이체하고 child는 그 잔액으로 씁니다 — 잔액이 없으면 유료(동적) 배포가 `402 insufficient_funds`로 거절됩니다. ② `partner_postpaid`: **child는 잔액 없이 배포하고, 사용액은 파트너 계정에 후불로 합산 청구됩니다.** 코딩 에이전트처럼 end-user를 즉석 발급하는 플랫폼에 맞는 모드입니다. 후불에서는 child 사용액이 5분마다 파트너 원장으로 정산되고, 월초에 전월 청구서 1장으로 확정됩니다(감액·환급이 있었다면 그만큼 빠진 최종 금액이고, 빠진 액수는 `adjustment_microusd`에 적혀 있습니다 — child 별 명세 합과 청구액이 다르면 그 차이입니다. `GET /v1/partner/invoices` · child 별 명세는 `GET /v1/partner/invoices/{id}` — 파트너가 자기 고객에게 종량제로 재청구하는 근거). 진행 중인 달의 child 별 사용액은 `GET /v1/partner/usage?period=YYYY-MM`로 언제든 받습니다. 후불에는 파트너 월 한도가 필수이고, 한도를 넘으면 신규 생성이 `402 partner_monthly_limit`로 막힙니다(이미 켜져 있는 앱은 계속 동작). 청구서 미납은 자동으로 막지 않고 onpod 운영자에게만 알립니다. 파트너가 child 1인당 월 상한을 두면 특정 end-user만 `402 partner_child_monthly_limit`로 막힙니다. 후불 전환·한도는 onpod에 요청하세요.\n\n**파트너 — 부서 통제와 배포물 접근 통제.** 고객사 조직도를 `PUT /v1/partner/departments`로 밀어 넣고(웍스 등 SSO의 부서 응답을 그대로 넣을 수 있는 code/parentCode 형식), `PUT /v1/partner/departments/{code}/policy`로 부서 단위 동시 실행 한도·배포 차단을 겁니다(집행은 앱을 켜는 순간 · 초과 시 `429 quota_exceeded`). **한도는 앱 종류를 가리지 않고 자동 확장에도 걸립니다(2026-08-03)** — `--shape autoscale`로 우회할 수 없고, 돌고 있는 앱도 부서가 한도에 닿으면 그 위로 더 늘지 않습니다(replica_min은 유지되니 이미 올린 것이 죽지는 않습니다). child의 소속은 `POST|PATCH /v1/partner/users`의 `department_code`·`tenant_ref`로 알려줍니다(조직도에 없는 코드는 `400 unknown_department`). 올라간 사이트는 `PUT /v1/partner/sites/{slug}/access`로 회사(tenant)·부서(department, 하위 부서 포함)·지정 인원(invited)만 보게 잠글 수 있습니다(🔴 **잠글 때는 `tenant_ref`가 반드시 있어야 합니다** — 지정 인원(invited)도 한 고객사 안에서만 유효하므로, child에 `tenant_ref`를 먼저 알려주지 않았고 이 요청에도 없으면 `400 tenant_required`로 거절합니다. 아무도 못 들어오는 사이트를 조용히 만들지 않습니다).\n\n방문자 신원은 파트너가 자기 SSO로 확인한 뒤 `POST /v1/partner/visitor-sessions`로 보증합니다(1회용 링크 → onpod이 방문자 쿠키를 심음 · 방문자는 onpod 계정이 필요 없음). 잠긴 사이트를 익명으로 열면 `PATCH /v1/partner`에 등록한 `visitor_login_url`로 302 됩니다.\n\n🔴 **사람 단위 식별자는 이메일이 아니라 불투명 `subject_ref`입니다.** 방문자 보증(`subject_ref`)과 초대 목록(`invited_refs`)에는 파트너가 만든 되돌릴 수 없는 식별자를 넣으세요 — 이메일의 HMAC 해시(키는 파트너만 보관)나 파트너 내부 유저 ID를 권합니다. 이메일·공백이 섞이면 `400`으로 거절합니다. onpod은 그 값이 누구인지 모른 채 대조만 하므로, **고객사 임직원 이메일 명부가 인프라에 쌓이지 않습니다.** 회사·부서 판정은 `tenant_ref`·`department_code` 만으로 하며 개인정보가 필요하지 않습니다. 🔴 **초대 목록은 고객사 단위로 갈립니다(2026-08-03).** 내부 유저 ID는 보통 고객사 안에서만 유일하니(사번 등) onpod은 (사이트, tenant_ref, subject_ref) 세 값을 대조합니다 — 고객사 A의 사번 1001을 초대해도 고객사 B의 같은 사번은 들어오지 못하고, 사이트의 고객사를 바꾸면 이전 고객사 명단도 그 사이트엔 더는 통하지 않습니다.\n\n**관리형 레지스트리.** `POST /v1/partner/users/{id}/registry`로 child 앱의 onpod-관리 ECR 네임스페이스(`onpod/\u003cpartner\u003e/\u003cchild\u003e/\u003capp\u003e`)를 만들고 단기 push 자격을 받습니다. 거기에 이미지를 push 하면, 그 child 토큰으로 해당 이미지를 자격증명 없이 그대로 배포할 수 있고(onpod이 내부에서 pull) GitHub PAT가 불필요합니다. 본인 네임스페이스의 이미지만 배포 가능합니다.","title":"onpod API","version":"1.0.0"},"openapi":"3.0.3","paths":{"/v1/api-keys":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"API 키 목록","tags":["api-keys"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"API 키 발급(스코프·만료 지정 가능)","tags":["api-keys"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/api-keys/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"API 키 회수","tags":["api-keys"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/apps/{slug}/domains":{"get":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"커스텀 도메인 목록","tags":["domains"],"x-onpod-scope":"domains:read"},"post":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"커스텀 도메인 추가","tags":["domains"],"x-onpod-scope":"domains:write"}},"/v1/apps/{slug}/domains/{id}":{"delete":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"커스텀 도메인 삭제","tags":["domains"],"x-onpod-scope":"domains:write"}},"/v1/apps/{slug}/domains/{id}/cf-autosetup":{"post":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"Cloudflare 자동 등록","tags":["domains"],"x-onpod-scope":"domains:write"}},"/v1/apps/{slug}/domains/{id}/dns-provider":{"get":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"DNS 공급자 감지","tags":["domains"],"x-onpod-scope":"domains:read"}},"/v1/apps/{slug}/domains/{id}/verify":{"post":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"도메인 DNS 검증","tags":["domains"],"x-onpod-scope":"domains:write"}},"/v1/backups":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"사용자 전체 백업 인덱스","tags":["backups"],"x-onpod-scope":"backups:read"}},"/v1/bill/summary":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"사용량/청구 요약","tags":["billing"],"x-onpod-scope":"billing:read"}},"/v1/billing/auto-recharge":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"자동 충전 설정 조회","tags":["billing"],"x-onpod-scope":"billing:read"},"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"자동 충전 설정","tags":["billing"],"x-onpod-scope":"billing:write"}},"/v1/billing/balance":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"잔액/버레이트","tags":["billing"],"x-onpod-scope":"billing:read"}},"/v1/billing/bank-transfer/config":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"계좌이체 충전 안내(입금 계좌·한도·저장된 사업자 정보)","tags":["billing"],"x-onpod-scope":"billing:read"}},"/v1/billing/bank-transfers":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"내 계좌이체 충전 신청 목록(대기·확인·취소·거절)","tags":["billing"],"x-onpod-scope":"billing:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"계좌이체 충전 신청 {amount_krw, depositor_name, receipt_type(none|tax_invoice), tax_invoice{사업자 정보}} — 운영자 확인 후 충전","tags":["billing"],"x-onpod-scope":"billing:write"}},"/v1/billing/bank-transfers/{id}/cancel":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"입금 전 신청 취소","tags":["billing"],"x-onpod-scope":"billing:write"}},"/v1/billing/bank-transfers/{id}/deposit-reported":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"입금 완료 알림(운영자 대조 요청) {depositor_name?}","tags":["billing"],"x-onpod-scope":"billing:write"}},"/v1/billing/cards":{"delete":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"카드 삭제","tags":["billing"],"x-onpod-scope":"billing:write"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"카드 저장","tags":["billing"],"x-onpod-scope":"billing:write"}},"/v1/billing/stripe/webhook":{"post":{"responses":{"200":{"description":"성공"}},"summary":"Stripe 웹훅(글로벌 USD 결제 · 서명 검증 · 이벤트 id 멱등 · 충전 확정·카드 저장·환불 반영)","tags":["meta"]}},"/v1/billing/topups":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"충전 요청 생성","tags":["billing"],"x-onpod-scope":"billing:write"}},"/v1/billing/topups/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"충전 상태 조회","tags":["billing"],"x-onpod-scope":"billing:read"}},"/v1/billing/topups/{id}/confirm":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"충전 확정","tags":["billing"],"x-onpod-scope":"billing:write"}},"/v1/billing/toss/webhook":{"post":{"responses":{"200":{"description":"성공"}},"summary":"Toss 결제 상태 웹훅(취소·환불 반영 · ?key= 비밀 + Toss 재조회)","tags":["meta"]}},"/v1/billing/transactions":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"거래 내역","tags":["billing"],"x-onpod-scope":"billing:read"}},"/v1/billing/usage-daily":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"일별 사용량","tags":["billing"],"x-onpod-scope":"billing:read"}},"/v1/buckets":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"파일 저장소(버킷) 목록","tags":["buckets"],"x-onpod-scope":"buckets:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"파일 저장소(버킷) 생성","tags":["buckets"],"x-onpod-scope":"buckets:write"}},"/v1/buckets/keys":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"액세스키 목록","tags":["buckets"],"x-onpod-scope":"buckets:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"액세스키 발급(S3 호환)","tags":["buckets"],"x-onpod-scope":"buckets:write"}},"/v1/buckets/keys/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"액세스키 폐기","tags":["buckets"],"x-onpod-scope":"buckets:write"}},"/v1/buckets/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"파일 저장소(버킷) 삭제","tags":["buckets"],"x-onpod-scope":"buckets:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"파일 저장소(버킷) 상세","tags":["buckets"],"x-onpod-scope":"buckets:read"}},"/v1/builds":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"빌드 잡 목록","tags":["builds"],"x-onpod-scope":"builds:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"이미지 빌드 잡 생성(소스 업로드 URL 반환)","tags":["builds"],"x-onpod-scope":"builds:write"}},"/v1/builds/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"빌드 상태·로그 조회","tags":["builds"],"x-onpod-scope":"builds:read"}},"/v1/builds/{id}/cancel":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"빌드 취소(선택 본문 {reason, phase, detail} = 취소 사유 기록)","tags":["builds"],"x-onpod-scope":"builds:write"}},"/v1/builds/{id}/events":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"클라이언트 쪽 빌드·배포 단계 기록({phase, level, message, detail} · 진단용)","tags":["builds"],"x-onpod-scope":"builds:write"}},"/v1/builds/{id}/start":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"소스 업로드 완료 후 빌드 시작","tags":["builds"],"x-onpod-scope":"builds:write"}},"/v1/cli/errors":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"}},"security":[{"bearerAuth":[]}],"summary":"CLI 오류 보고({reports:[{occurred_at, kind, cli_version, os, command, flags, status, code, cf_ray, edge, retries, message, api_host}]} · 최대 20건·64KB · 유저당 24시간 500건 · best-effort 204). onpod CLI 가 실패 시 자동으로 보냄(끄기 ONPOD_NO_ERROR_REPORT=1)","tags":["account"]}},"/v1/databases":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"데이터베이스 목록","tags":["databases"],"x-onpod-scope":"databases:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"데이터베이스 생성","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"데이터베이스 삭제","tags":["databases"],"x-onpod-scope":"databases:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"데이터베이스 상세","tags":["databases"],"x-onpod-scope":"databases:read"}},"/v1/databases/{id}/allowlist":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"접속 허용 IP 설정","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/attached-apps":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"연결된 앱 미리보기","tags":["databases"],"x-onpod-scope":"databases:read"}},"/v1/databases/{id}/authorize-clients":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"클라이언트 SG 인가","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/backup":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"백업 실행","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/compute":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"컴퓨트 오토스케일 설정","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/extensions":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"확장(extension) 켜기 — 기본 확장 보장 + 허용 목록 확장 추가 (body {names?:[]}) · 공유 DB 는 pg_stat_statements 불가","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/ha":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"HA 끄기","tags":["databases"],"x-onpod-scope":"databases:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"HA(대기 서버) 상태","tags":["databases"],"x-onpod-scope":"databases:read"},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"HA 켜기(대기 서버 복제 시작)","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/ha/rebuild":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"HA 대기 서버 다시 맞추기","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/ha/switchover":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"HA 전환(대기 서버를 주 서버로)","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/initial-credentials":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"초기 자격 1회 reveal","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/pool":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"연결 풀링 상태 조회","tags":["databases"],"x-onpod-scope":"databases:read"},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"연결 풀링(트랜잭션 모드) 켜기/끄기","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/rename":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"라벨 변경","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/resize":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"리사이즈","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/restore":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"복구","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/rotate-password":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"비밀번호 로테이트","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/start":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"시작","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/stop":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"정지","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/databases/{id}/storage":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"스토리지 오토스케일 설정","tags":["databases"],"x-onpod-scope":"databases:write"}},"/v1/deployments/{id}/metrics":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포 메트릭(레거시)","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/deployments/{id}/sample":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포 샘플(레거시)","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/domains":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"내 도메인 전체 (앱 생존 여부 포함)","tags":["domains"],"x-onpod-scope":"domains:read"}},"/v1/domains/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"도메인 등록 해제 (앱이 삭제돼도 가능 · ?orphan_only=1 이면 앱이 사라진 행만, 앱이 있으면 409 domain_in_use)","tags":["domains"],"x-onpod-scope":"domains:write"}},"/v1/edition":{"get":{"responses":{"200":{"description":"성공"}},"summary":"에디션(saas/onprem)·베이스 도메인·로그인 방식","tags":["meta"]}},"/v1/fleet/patch-report":{"post":{"responses":{"200":{"description":"성공"}},"summary":"플릿 호스트 보안 패치 자세 일일 보고(운영 전용 · Bearer ONPOD_PATCH_REPORT_TOKEN · 슬랙 다이제스트 입력)","tags":["meta"]}},"/v1/gpus":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"}},"security":[{"bearerAuth":[]}],"summary":"사용 가능한 GPU/CPU SKU와 가격","tags":["catalog"]}},"/v1/linked-apps":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"연동 서비스(BizCoder·웍스AI Desk)가 이 계정 이메일의 사용자 대신 배포한 앱 목록 — 읽기 전용(코드·환경변수·삭제는 그 서비스에서)","tags":["pods"],"x-onpod-scope":"linked-apps:read"}},"/v1/linked-apps/pods/{id}/logs":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"연동 서비스 배포 앱의 로그(?tail=N)","tags":["pods"],"x-onpod-scope":"linked-apps:write"}},"/v1/linked-apps/pods/{id}/restart":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"연동 서비스 배포 앱 다시 시작(running·failed 만)","tags":["pods"],"x-onpod-scope":"linked-apps:write"}},"/v1/manual":{"get":{"responses":{"200":{"description":"성공"}},"summary":"AI 에이전트용 매뉴얼(평문) · ?brief=1 퀵스타트 · ?lang=ko","tags":["meta"]}},"/v1/me":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"내 계정 정보","tags":["account"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"},"patch":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"계정 정보 수정(display_name · locale ko|en)","tags":["account"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/me/account-spend-cap":{"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"계정 월 총액 하드캡(원 · 모든 팟 지출 합산의 상한 — 도달 시 자동 확장·머신 키우기만 멈추고 서비스는 유지 · 0=플랫폼 기본값 복귀·무제한 아님)","tags":["account"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/me/app-spend-cap":{"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"계정 기본 앱 월 지출 한도(원)","tags":["account"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/me/audit":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"내 활동 기록","tags":["account"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/me/delete":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"계정 삭제","tags":["account"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/me/password":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"비밀번호 설정/변경","tags":["account"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/access":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"온프렘 도입 승인 상태(마이그 218) ?scope=me|org — approved·대기 중 문의·거절 메모","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/access/request":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"온프렘 도입 문의(승인 요청) {scope, company, contact, message} — 승인 전엔 다운로드·체험·구매 403 onprem_approval_required","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/latest":{"get":{"responses":{"200":{"description":"성공"}},"summary":"공개된 최신 온프렘 릴리스 목록(설치본 업데이트 확인용 · 공개)","tags":["onprem"]}},"/v1/onprem/licenses":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"내(그리고 내 조직의) 온프렘 라이선스 목록","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/licenses/trial":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"체험 라이선스 발급(소유자당 1회 · customer, scope=me|org)","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/licenses/{id}/file":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"라이선스 파일(license.json) 다운로드 · ?inline=1이면 JSON 본문","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/orders":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"라이선스 구매 주문 생성(hosts·months·customer·scope·renew_of) → 토스 결제 파라미터","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/orders/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"주문 상태 조회","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/orders/{id}/confirm":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"결제 확정 → 라이선스 발급(payment_key·order_id·amount_krw)","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/pricing":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"온프렘 라이선스 가격 정책(호스트·개월·체험 조건)","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/releases":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"다운로드할 수 있는 온프렘 설치 번들 목록(버전·아키텍처·크기·SHA256)","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/releases/{id}/download":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"번들 다운로드 주소 발급(1시간 유효 · 약관 동의 뒤)","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/terms":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"온프렘 소프트웨어 라이선스 약관 현재 버전·주소·내 동의 여부","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/onprem/terms/accept":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"약관 동의 기록(version) — 번들 다운로드·체험·구매 전 필수(미동의 412 terms_required)","tags":["onprem"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/openapi.json":{"get":{"responses":{"200":{"description":"성공"}},"summary":"이 OpenAPI 스펙","tags":["meta"]}},"/v1/org":{"delete":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"조직 삭제(소유자 전용·confirm=조직 이름) — 멤버 소속 해제·회사 자산은 각자 개인 자산 복귀. 스코프 키 불가","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"},"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"내 조직 프로필+역할","tags":["org"],"x-onpod-scope":"org:read"},"patch":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 설정(이름·기본 공개범위·공유 결재)","tags":["org"],"x-onpod-scope":"org:write"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직(기업 계정) 생성 — 만든 계정이 owner","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/api-keys":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"내 기업용 API 키 목록(이 조직 워크스페이스)","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"기업용 API 키 발급 — 이 키로 만드는 리소스는 전부 회사 자산·기업 감사 기록","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/org/api-keys/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"내 기업용 API 키 회수","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/org/approvals":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"내가 결재할 공유 요청 목록","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/approvals/{id}/approve":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"공유 요청 승인(공개범위 적용)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/approvals/{id}/reject":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"공유 요청 반려","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/assets":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"내 소유 리소스 중 회사 자산으로 지정된 것들","tags":["org"],"x-onpod-scope":"org:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"내 배포물을 회사 자산으로 지정({kind,id}) — 기업 화면에 표시·퇴사 시 조직 소유자에게 이관","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/assets/{kind}/{id}":{"delete":{"parameters":[{"in":"path","name":"kind","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"회사 자산 지정 해제(조직 관리자만)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/audit":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 감사로그(멤버 활동 전체·필터·페이지네이션)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/bank-transfer/config":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 계좌이체 충전 안내(관리자) — 입금 계좌·한도·저장된 사업자 정보","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/bank-transfers":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 지갑 계좌이체 충전 신청 목록(관리자)","tags":["org"],"x-onpod-scope":"org:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 지갑 계좌이체 충전 신청(관리자·선불/개인 결제 조직만) {amount_krw, depositor_name, receipt_type, tax_invoice}","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/bank-transfers/{id}/cancel":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 신청 입금 전 취소","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/bank-transfers/{id}/deposit-reported":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 신청 입금 완료 알림","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/billing/card":{"delete":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 카드 해제(소유자·미납 청구서 있으면 409)","tags":["org"],"x-onpod-scope":"org:write"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 카드 등록(소유자) — 등록 즉시 전면 종량제(월별 자동 결제)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/budgets":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"월예산 목록+이번 달 소진(전사/부서/개인)","tags":["org"],"x-onpod-scope":"org:read"},"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"월예산 설정(원화·warn 경고/block 생성 차단)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/budgets/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"월예산 삭제","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/departments":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"부서(조직도) 목록","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/departments/csv":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"부서 CSV 일괄 업로드(code,name,parent_code,approver_email)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/departments/sync":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"부서 동기화(JSON) — code 기준 추가/수정/삭제 일괄 반영, implicit_deletion·항목별 결과(insert|update|skip|delete). 외부 인사 시스템 연동용","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/departments/{code}":{"put":{"parameters":[{"in":"path","name":"code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"부서 생성/수정(코드 기준 upsert)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/departments/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"부서 삭제(소속 멤버는 무배정으로)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/departments/{id}/deploy-policy":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"부서 배포 금지 토글(새 배포·코드 업데이트) {deploy_blocked}(하위 부서 상속·관리자)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/deploy-control":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포 통제 — 정책(기본·상한 공개범위·배포 권한·결재)+부서 배포 금지+회사 멤버가 배포한 사이트 전부의 공개범위(관리자)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/deploy-control/apply":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"지금 있는 회사 사이트 전부에 공개범위 일괄 적용 {visibility, only_wider?}(관리자)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/deploy-rules":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 배포 규칙(가드레일 · 마이그 221) — 허용 형태·앱 최대 크기·GPU·DB·기능·이미지 접두어·한도·리전 + 에이전트용 요약문(text) + 프리셋","tags":["org"],"x-onpod-scope":"org:read"},"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 배포 규칙 저장(관리자) — 위반은 생성 경로에서 403 deploy_rule_violation","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/git-syncs":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"최근 GitLab 동기화 작업(소스 보관·GitOps) 목록 ?limit=(관리자)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/git-syncs/{id}/retry":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"실패한 GitLab 동기화 다시 큐에 넣기(관리자)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/hosts":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 소유 외부 호스트 목록(상태·GPU 슬롯·활성 팟 수)","tags":["org"],"x-onpod-scope":"org:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"외부 호스트 등록 — {name, region?} → pending 호스트 + 1회용 bootstrap 토큰 + 설치 명령(install.shell). 관리자 전용","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/hosts/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"외부 호스트 삭제(팟이 실행 중이면 409 host_in_use)","tags":["org"],"x-onpod-scope":"org:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"외부 호스트 단건","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/hosts/{id}/bootstrap":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"아직 등록 안 된(pending) 외부 호스트의 bootstrap 토큰 재발급. 등록된 호스트는 409","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/image-refreshes":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"베이스 이미지 새로고침(마이그 223) — 정책(off|notify|auto)·소스 보존 일수 + 제안·진행 기록 {policy, keep_days, builder, items[]}(관리자) · 정책 변경은 PATCH /v1/org {image_refresh_policy, image_refresh_keep_days}","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/image-refreshes/check":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"지금 확인 — 조직 앱들의 베이스 이미지 새 버전을 바로 조회해 제안을 만든다(auto 면 재빌드 시작) {created, checked}(관리자)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/image-refreshes/{id}/dismiss":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"제안 무시 — 같은 앱·같은 새 버전은 다시 제안하지 않음(관리자)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/image-refreshes/{id}/rebuild":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"제안된 새 버전으로 같은 소스를 다시 빌드하고 성공하면 앱 이미지를 교체(관리자) → 202 {build_id, tag}","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/integrations/gitlab":{"delete":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"GitLab 연동 해제(설정·토큰 삭제 · 동기화 기록은 유지)(관리자)","tags":["org"],"x-onpod-scope":"org:write"},"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"GitLab 연동 설정(마이그 220) — 주소·그룹·토큰 유무(마스킹)·소스 보관·GitOps 내보내기 토글(관리자)","tags":["org"],"x-onpod-scope":"org:read"},"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"GitLab 연동 저장 {base_url, group_path, token?, archive_enabled, gitops_enabled, gitops_repo, gitops_namespace, gitops_host_pattern, gitops_auto_sync} — token 생략 시 유지(관리자)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/integrations/gitlab/test":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"GitLab 연결 확인 — 저장된 토큰 또는 본문 값으로 버전·그룹 조회 {ok, gitlab_version, group_name, group_web_url, error}(관리자)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/invites":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"대기 중 초대 목록","tags":["org"],"x-onpod-scope":"org:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"이메일 초대 발송(복수 가능·7일 만료). 스코프 키 불가(role=admin 초대는 영구 권한 부여라 계정 관리급)","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/org/invites/accept":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"초대 수락 — 초대받은 이메일 계정으로. leave_current=true 면 지금 조직에서 나가며 수락(소유자는 409). 스코프 키 불가","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/org/invites/preview":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"초대 토큰 미리보기(수락 화면용)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/invites/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"초대 철회","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/invoices":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"월별 청구서 목록(카드·결제 상태 포함)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/invoices/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"청구서 상세 + 해당 월 사용 내역(멤버·종류별)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/leave":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"조직 나가기(owner 불가). 스코프 키 불가","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/org/members":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"멤버 목록(역할·부서 포함)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/members/csv":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"멤버 부서/역할 CSV 일괄 반영(email,department_code,role). 스코프 키 불가","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/org/members/sync":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"멤버 동기화(JSON) — email 기준 부서/역할 반영·내보내기, implicit_deletion·항목별 결과. 신규 합류는 초대로만(member_not_found는 무시 가능). 스코프 키 불가","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/org/members/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"멤버 내보내기(회사 자산은 조직 소유자에게 이관, 나머지는 개인 유지). 스코프 키 불가","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"},"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"멤버 역할/부서 변경. 스코프 키 불가(2026-09-04)","tags":["org"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/org/resources":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"회사 자산 목록(회사로 옮긴 배포물만 — 팟·사이트·DB·디스크·버킷)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/sites/{slug}/access":{"get":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포물 공개범위 조회(초대 목록·대기 결재 포함)","tags":["org"],"x-onpod-scope":"org:read"},"put":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포물 공개범위 설정(넓히면 결재 정책에 따라 202 대기)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/sites/{slug}/access/grants":{"post":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포물에 조직 멤버 초대(이메일)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/sites/{slug}/access/grants/{uid}":{"delete":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포물 초대 회수","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/stats/sites":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"회사 방문 통계 — 멤버 전원 배포물의 일별 요청·오류·응답·전송량 ?days=7|30|90(관리자)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/stats/sites/{slug}":{"get":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"회사 배포물 한 개의 일별 방문 통계(관리자)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/stats/visits":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"회사 직원별 방문 기록 — 접근제어가 걸린 배포물에 로그인해서 들어온 직원의 방문 횟수·사용일수·체류시간(관리자) ?from\u0026to|days ?slug ?user_id ?view=summary|daily ?format=json|csv","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/transactions":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 지갑 원장(충전·정산 내역)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/usage/daily":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 사용액 일별 시계열(멤버/부서 필터)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/usage/summary":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직 사용액 월 요약(멤버·부서별 분해)","tags":["org"],"x-onpod-scope":"org:read"}},"/v1/org/wrks":{"delete":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"웍스AI 연동 해제(소유자만 · 자동 합류 중단, 기존 멤버 유지)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/wrks/billing":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"웍스AI 통합 청구 현황 — 이번 달 회사 자산 사용액·웍스AI로 보낸 금액·미전송 금액·멤버별 웍스 로그인 상태·최근 청구 50건","tags":["org"],"x-onpod-scope":"org:read"},"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"웍스AI 통합 청구 켜기/끄기 {enabled} (소유자만 · 웍스AI 연동 조직만 · 카드/크레딧 모드가 켜져 있으면 409 billing_mode_conflict) · {stop_on_exhausted} 사용량 소진 시 회사 앱 정지 옵션(소유자·관리자)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/wrks/join-policy":{"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"웍스AI 로그인 직원 합류 정책(owner|admin): policy=all(누구나)|departments(지정 부서·하위 포함, departments=[웍스 부서 코드])|invite(초대한 직원만)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/wrks/setup/complete":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"웍스AI 개설 조직의 기업 계정 설정 마법사 완료 표시(owner|admin · 멱등). 완료 전엔 직원의 웍스AI 로그인이 보류돼요","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/org/wrks/sync-departments":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"웍스AI 조직도 지금 동기화(웍스AI로 로그인한 관리자 세션 필요 · 쿨다운 무시)","tags":["org"],"x-onpod-scope":"org:write"}},"/v1/partner":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"파트너 프로필/child 수","tags":["partner"],"x-onpod-scope":"partner:read"},"patch":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"파트너 설정(방문자 로그인 주소)","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/departments":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"파트너 조직도(부서)+부서별 정책·현황","tags":["partner"],"x-onpod-scope":"partner:read"},"put":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"조직도 동기화(flat code/parentCode · prune 옵션)","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/departments/{code}/policy":{"put":{"parameters":[{"in":"path","name":"code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"부서 전체 동시 실행 한도·배포 차단","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/invoices":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"월 이용료 청구서 목록(후불 통합 청구)","tags":["partner"],"x-onpod-scope":"partner:read"}},"/v1/partner/invoices/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"청구서 1건 + child 별 명세","tags":["partner"],"x-onpod-scope":"partner:read"}},"/v1/partner/sites/{slug}/access":{"get":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포물 공개 범위 조회(누가 볼 수 있나)","tags":["partner"],"x-onpod-scope":"partner:read"},"put":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포물 공개 범위(public·tenant·department·invited · 지정 인원은 invited_refs 불투명 식별자)","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/usage":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 별 사용액+잔액 롤업(?period=YYYY-MM · 후불 재청구 근거)","tags":["partner"],"x-onpod-scope":"partner:read"}},"/v1/partner/users":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 목록","tags":["partner"],"x-onpod-scope":"partner:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 신분 생성(멱등·max_active_pods 팟 쿼터·department_code 부서 지정 가능)","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/users/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 비활성+토큰 전량 폐기","tags":["partner"],"x-onpod-scope":"partner:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 상세","tags":["partner"],"x-onpod-scope":"partner:read"},"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 활성/비활성·팟 쿼터(max_active_pods)·부서(department_code)·계정 월 총액 하드캡(spend_cap_krw · 0=플랫폼 기본 복귀) 조정","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/users/{id}/credit":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 크레딧 이체","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/users/{id}/registry":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 앱 레지스트리 네임스페이스+push 자격","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/users/{id}/tokens":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 토큰 목록","tags":["partner"],"x-onpod-scope":"partner:read"},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 스코프 토큰 발급(opk_)","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/users/{id}/tokens/{tid}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"tid","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"child 토큰 폐기","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/partner/visitor-sessions":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"방문자 신원 보증(subject_ref 불투명 식별자·이메일 금지) → 1회용 접속 링크 발급","tags":["partner"],"x-onpod-scope":"partner:write"}},"/v1/plans":{"get":{"responses":{"200":{"description":"성공"}},"summary":"공개 가격표 — 앱 요금제·관리형 Postgres 월 비용(원 근사)","tags":["meta"]}},"/v1/pod-groups":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 그룹 목록","tags":["pods"],"x-onpod-scope":"pods:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 그룹 생성","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pod-groups/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 그룹 삭제","tags":["pods"],"x-onpod-scope":"pods:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 그룹 상세","tags":["pods"],"x-onpod-scope":"pods:read"},"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 그룹 수정","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pod-groups/{id}/env":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"환경변수 목록(자동 확장)","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pod-groups/{id}/env-merge":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"환경변수 병합(자동 확장)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pod-groups/{id}/restart":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"자동 확장 앱 다시 시작(스펙 변경 없이 멤버를 순차 in-place 교체)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pod-groups/{id}/rollback":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"자동 확장 앱 직전 이미지로 되돌리기(이미지-only · env 유지)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pod-groups/{id}/scale":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"런타임 replica·머신 크기 조정(replica_min/replica_max/desired_replicas·큐-깊이 오토스케일·replica_min=0 = scale-to-zero: 유휴 시 0대, 접속 오면 자동 시작 — fleet 한정, deployment는 wake 경로가 없어 min=0 거부 · plan=hobby|standard|pro|business로 머신 크기 무중단 점진 교체, fleet 한정)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pod-groups/{id}/slug":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"자동 확장 앱 공개 주소(slug) 변경","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pod-groups/{id}/spend-cap":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"자동 확장 앱 월 지출 한도 설정(원)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pod-templates":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"템플릿 목록","tags":["pod-templates"],"x-onpod-scope":"pod-templates:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"템플릿 생성","tags":["pod-templates"],"x-onpod-scope":"pod-templates:write"}},"/v1/pod-templates/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"템플릿 삭제","tags":["pod-templates"],"x-onpod-scope":"pod-templates:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"템플릿 상세","tags":["pod-templates"],"x-onpod-scope":"pod-templates:read"},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"템플릿 수정","tags":["pod-templates"],"x-onpod-scope":"pod-templates:write"}},"/v1/pods":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 목록 — 응답은 팟 객체의 JSON 배열 [...] (봉투 객체 없음 · 다른 엔드포인트의 {\"pod\":…} 와 다름)","tags":["pods"],"x-onpod-scope":"pods:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 생성","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/bulk-remove":{"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 일괄 삭제","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/metrics":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"전체 팟 메트릭","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 삭제","tags":["pods"],"x-onpod-scope":"pods:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 상세","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/ai-ready":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"AI-Ready(llms/sitemap/robots·JSON-LD) 토글","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/backups":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 백업 목록","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/backups/{file_id}/download":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"file_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 백업 다운로드","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/egress":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"고정 Egress IP 끄기","tags":["pods"],"x-onpod-scope":"pods:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"고정 Egress IP 상태·등급·가격","tags":["pods"],"x-onpod-scope":"pods:read"},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"고정 Egress IP 켜기(공유/전용)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/env":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"환경변수 키 목록(값은 ***)","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/env-merge":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"환경변수 병합","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/exec":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 안에서 명령 실행 (async·detach 지원)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/exec/{cmd_id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"cmd_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"비동기 exec 결과 폴링","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/failure-logs":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"실패한 팟의 종료 직전 로그","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/firewall":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"아웃바운드 방화벽 끄기","tags":["pods"],"x-onpod-scope":"pods:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"아웃바운드 방화벽(목적지 allowlist) 상태","tags":["pods"],"x-onpod-scope":"pods:read"},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"아웃바운드 방화벽 켜기/목록 교체(default-deny)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/free-tier":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"무료 티어(scale-to-zero) 토글","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/logs":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 로그(?tail=N · ?previous=1 이면 교체·정지 직전 컨테이너의 마지막 로그)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/metrics":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 메트릭","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/metrics/history":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 메트릭 이력","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/migrate":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 이전","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/pause":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"일시정지 — 컨테이너를 멈추고(과금 중단·디스크 보존) 다시 켤 때까지 공개 주소로 접속이 와도 깨우지 않는다(무료 티어의 자동 절전과 다름 · pods.held)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/policy":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 정책(eviction 등)","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/rename":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"팟 라벨 변경","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/response-timeout":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"응답 대기 한도(TTFB, 초) 설정 — 직결 주소에서 최대 600s","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/restart":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"앱 다시 시작 — 켜져 있으면 스펙 변경 없이 무중단 in-place 교체, 멈춰 있으면(stopped/failed/evicted) 같은 호스트에 데이터 보존한 채 다시 켜기","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/restart-policy":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"자동 재시작 정책 설정","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/resume":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"다시 켜기 — 일시정지·절전 중인 앱을 같은 호스트에서 재개(일시정지 표식 해제)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/rollback":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"이전 배포로 롤백","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/slug":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"공개 주소(slug) 교체(재배포 없이 URL만)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/spend-cap":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"앱 월 지출 한도 설정(원·자동 확장 hard ceiling)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/ssh":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"인터랙티브 셸·SSH 터널 (WebSocket)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/swap-image":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"이미지 교체(데이터 보존)","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/upgrade":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"앱을 다음 플랜으로 무중단 업그레이드","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/pods/{id}/upgrade-options":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"이 앱이 올릴 수 있는 플랜·가격","tags":["pods"],"x-onpod-scope":"pods:read"}},"/v1/pods/{id}/webhook-buffer":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"웹훅 보관함(잠든 동안 웹훅 대신 받아 재전달) 토글","tags":["pods"],"x-onpod-scope":"pods:write"}},"/v1/registry-credentials":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"등록한 레지스트리 자격 목록(비밀 제외)","tags":["registry"],"x-onpod-scope":"registry:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"프라이빗 레지스트리 자격 등록(static/ecr)","tags":["registry"],"x-onpod-scope":"registry:write"}},"/v1/registry-credentials/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"레지스트리 자격 삭제","tags":["registry"],"x-onpod-scope":"registry:write"}},"/v1/s3-relay":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"presigned S3 URL을 CP 경유로 스트리밍 다운로드 (url 쿼리 파라미터 · S3 호스트 전용 · Range/HEAD 지원 · 계정 토큰 또는 전체 권한 키 필요)","tags":["pods"],"x-onpod-scope":"s3-relay:read"}},"/v1/sandboxes":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"코드 샌드박스 목록","tags":["sandboxes"],"x-onpod-scope":"sandboxes:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"코드 샌드박스 생성(임시·TTL)","tags":["sandboxes"],"x-onpod-scope":"sandboxes:write"}},"/v1/sandboxes/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"코드 샌드박스 teardown","tags":["sandboxes"],"x-onpod-scope":"sandboxes:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"코드 샌드박스 상세","tags":["sandboxes"],"x-onpod-scope":"sandboxes:read"}},"/v1/sandboxes/{id}/exec":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"샌드박스 안에서 명령 실행","tags":["sandboxes"],"x-onpod-scope":"sandboxes:write"}},"/v1/sandboxes/{id}/exec-stream":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"샌드박스 명령 스트리밍 실행 (WebSocket)","tags":["sandboxes"],"x-onpod-scope":"sandboxes:write"}},"/v1/sandboxes/{id}/files":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"샌드박스에서 파일 읽기","tags":["sandboxes"],"x-onpod-scope":"sandboxes:read"},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"샌드박스에 파일 쓰기","tags":["sandboxes"],"x-onpod-scope":"sandboxes:write"}},"/v1/static/deployments/{id}/finalize":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"정적 배포 확정(원자적 스왑)","tags":["static"],"x-onpod-scope":"static:write"}},"/v1/static/sites":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"정적 사이트 목록","tags":["static"],"x-onpod-scope":"static:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"정적 사이트 생성","tags":["static"],"x-onpod-scope":"static:write"}},"/v1/static/sites/{slug}":{"delete":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"정적 사이트 삭제","tags":["static"],"x-onpod-scope":"static:write"},"get":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"정적 사이트 상세","tags":["static"],"x-onpod-scope":"static:read"}},"/v1/static/sites/{slug}/deployments":{"post":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"정적 배포 시작(업로드 URL)","tags":["static"],"x-onpod-scope":"static:write"}},"/v1/stats/sites":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"내 배포물(팟·앱·웹사이트) 방문 통계 — 일별 요청·오류·응답 속도·전송량 ?days=7|30|90","tags":["stats"],"x-onpod-scope":"stats:read"}},"/v1/stats/sites/{slug}":{"get":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"배포물 한 개의 일별 방문 통계","tags":["stats"],"x-onpod-scope":"stats:read"}},"/v1/transfers":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"이관 요청 목록 — incoming(받은)·outgoing(보낸) · 조직 관리자는 회사 자산 건 포함. 스코프 키 불가","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"이관 요청 {to:{email}|{email, their_org:true}|{org_id}, items:[{kind,id}], message?} — 소유자(회사 자산이면 조직 관리자만)가 보냄 · 받는 쪽 수락 시 소유자·요금·slug·도메인·접근제어 이전 · 보낸 사람이 곧 받을 자격이면 즉시 수락(200) · 7일 만료","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/transfers/count":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"받은 대기 요청 수","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/transfers/related":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"함께 옮기기 제안 ?kind=\u0026id= → 팟·앱이 붙여 쓰는 내 공유 디스크","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/transfers/resolve":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"받는 쪽 조회 ?email= → {can_send, personal, org, same_org} 불리언만(이름·조직 정보 없음 · 미가입 404) · 회사로 보낼 땐 POST 에 to:{email, their_org:true}","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/transfers/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"이관 요청 1건(양쪽 당사자만)","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/transfers/{id}/accept":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"수락(받는 개인 본인 또는 받는 조직 owner/admin) → 소유권 이전 실행 · result{moved,renamed,warnings}","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/transfers/{id}/cancel":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"취소(보낸 사람 또는 보낸 조직 관리자)","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/transfers/{id}/decline":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 키로는 호출 불가"}},"security":[{"bearerAuth":[]}],"summary":"거절(받는 쪽)","tags":["transfers"],"x-onpod-scope":"account (opk_ 스코프 키 불가)"}},"/v1/version":{"get":{"responses":{"200":{"description":"성공"}},"summary":"API 버전","tags":["meta"]}},"/v1/volumes":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함 목록","tags":["volumes"],"x-onpod-scope":"volumes:read"},"post":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함 생성","tags":["volumes"],"x-onpod-scope":"volumes:write"}},"/v1/volumes/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함 삭제","tags":["volumes"],"x-onpod-scope":"volumes:write"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함 상세","tags":["volumes"],"x-onpod-scope":"volumes:read"}},"/v1/volumes/{id}/move":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함 옮기기 진행 상태","tags":["volumes"],"x-onpod-scope":"volumes:read"},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함을 다른 호스트로 옮기기 (gpu \"모델:장수\" 로 빈 GPU 가 있는 호스트 자동 선택 · 참조 팟 없어야 함)","tags":["volumes"],"x-onpod-scope":"volumes:write"}},"/v1/volumes/{id}/protection":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함 보호 설정 — 자동 스냅샷·오프-사이트 백업 켜기/끄기 {snapshots_enabled?, backup_enabled?} (모델 캐시처럼 다시 받을 수 있는 데이터용)","tags":["volumes"],"x-onpod-scope":"volumes:write"}},"/v1/volumes/{id}/rename":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함 이름 변경","tags":["volumes"],"x-onpod-scope":"volumes:write"}},"/v1/volumes/{id}/resize":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"},"403":{"description":"스코프 부족(scope_insufficient)"}},"security":[{"bearerAuth":[]}],"summary":"보관함 용량 키우기 (grow 전용)","tags":["volumes"],"x-onpod-scope":"volumes:write"}},"/v1/whoami":{"get":{"responses":{"200":{"description":"성공"},"401":{"description":"인증 실패(토큰 없음/무효)"}},"security":[{"bearerAuth":[]}],"summary":"현재 토큰의 사용자 식별","tags":["account"]}}},"security":[{"bearerAuth":[]}],"servers":[{"description":"production","url":"https://api.onpod.ai"}],"tags":[{"name":"account"},{"name":"api-keys"},{"name":"backups"},{"name":"billing"},{"name":"buckets"},{"name":"builds"},{"name":"catalog"},{"name":"databases"},{"name":"domains"},{"name":"meta"},{"name":"onprem"},{"name":"org"},{"name":"partner"},{"name":"pod-templates"},{"name":"pods"},{"name":"registry"},{"name":"sandboxes"},{"name":"static"},{"name":"stats"},{"name":"transfers"},{"name":"volumes"}]}
