AOX Platform API

The REST API behind AOX, ADRO's aerodynamic optimization platform. A Django REST Framework backend serving a public, machine-readable OpenAPI 3.0.3 document (drf-spectacular) with 231 operations across 207 paths: accounts and team management, projects, jobs, LES runs, sketch sessions, geometry patches, artifacts, an asset marketplace, STL conversion and repair, credits and credit bundles, plans, subscriptions and payments. Nineteen operations are explicitly unauthenticated (login, signup, social login, token refresh, plans, credit bundles, board announcements, health, tenant existence, email verification); the remainder require an authenticated session.

Operations 231

POST /accounts/login/ #
POST /accounts/logout/ #
GET /accounts/me/ #
DELETE /accounts/me/ #
POST /accounts/me/force-password-change/ #
PUT /accounts/me/password-change/ #
POST /accounts/me/password-verify/ #
GET /accounts/me/usage/ #
POST /accounts/password-reset/ #
POST /accounts/password-reset-confirm/ #
PUT /accounts/password_change/ #
POST /accounts/password_verify/ #
GET /accounts/search/ #
POST /accounts/signup/ #
POST /accounts/social-login/ #
POST /accounts/social-register/ #
POST /accounts/team-switch/ #
GET /accounts/teams/ #
POST /accounts/token/refresh/ #
POST /ai/projects/{project_uid}/chat/ #
POST /ai/projects/{project_uid}/diagnose/ #
POST /ai/projects/{project_uid}/recommend/ #
GET /ai/usage/ #
GET /announcements/ #
GET /artifacts/ #
POST /artifacts/ #
GET /artifacts/{artifact_id}/download/ #
GET /artifacts/{id}/ #
PUT /artifacts/{id}/ #
PATCH /artifacts/{id}/ #
DELETE /artifacts/{id}/ #
POST /artifacts/{id}/copy/ #
GET /artifacts/{id}/download_url/ #
POST /asset-notifications/{notification_id}/read/ #
GET /assets/ #
GET /assets/{asset_uid}/ #
POST /assets/{asset_uid}/acquire/ #
POST /assets/{asset_uid}/approval/ #
POST /assets/{asset_uid}/projects/ #
POST /assets/{asset_uid}/retry-copy/ #
POST /assets/{asset_uid}/save/ #
DELETE /assets/{asset_uid}/save/ #
POST /assets/{asset_uid}/stop-sale/ #
GET /assets/mine/ #
GET /assets/transactions/ #
POST /billing-keys/ 빌링키 등록 (프론트가 SDK 콜백에서 받은 billingKey 를 팀에 묶어 저장) #
GET /billing-keys/bypass-hint/ 빌링키 발급 SDK 호출에 필요한 PG 별 bypass 페이로드 + channel_key. PG 별 추가 파라미터가 필요한 경우 프론트가 SDK 호출 전에 가져간다. #
GET /billing-keys/current/ 현재 활성(ISSUED) 결제수단 1건 조회. 결제 PG사 + 카드 표시 메타만 반환 (raw billing_key 는 보안상 미노출). 한 팀 = 활성 빌링키 1개 정책이라 단일 객체로 응답하며, 없으면 null. #
POST /billing-keys/payletter/register-and-charge/ PayLetter requestIssueBillingKeyAndPay 콜백 처리 (빌링키 발급 + 첫결제 동시). 프론트가 SDK 콜백에서 받은 billingKey + paymentId 전달. #
POST /billing-keys/swap/ PG 인증 성공 뒤, 서버 트랜잭션에서 청구 프로필과 새 빌링키를 함께 등록한다. 진행 중 구독은 현재 결제주기를 유지하고 다음 갱신부터 새 키를 사용한다. #
GET /board/ #
GET /board/{id}/ #
POST /book_demo/ 데모 예약 신청 #
GET /credits/buckets/ bucket 목록 (active 우선) #
GET /credits/bundles/ 크레딧 번들 목록 #
GET /credits/bundles/{bundle_id}/ 크레딧 번들 단건 조회 #
POST /credits/bundles/{bundle_id}/purchase/ 번들 구매 시작 (단건결제 paymentId 채번) #
GET /credits/estimate/ 예상 소모 크레딧 계산 #
GET /credits/operations/ 크레딧 operation 목록 (idempotency 단위, 최신순) #
GET /credits/purchases/ 번들 구매 이력 #
GET /credits/transactions/ 크레딧 거래 내역 (bucket 단위 row, 최신순) #
GET /credits/usage/jobs/ 팀 Job 목록 + 크레딧 소모 요약 (SQS 실시간 차감 검증용) #
GET /credits/usage/jobs/{job_uid}/ Job 단건 크레딧 소모 상세 — attempt 요약 + 최근 UsageEvent 스트림 #
GET /credits/wallet/ 팀 크레딧 지갑 — balance (active buckets 합) + source 별 breakdown #
GET /deletion-executions/{execution_uid}/ 영구 삭제 실행 상태 조회 #
POST /error-feedback/ #
GET /feature-feedback/ #
PUT /feature-feedback/{feature_key}/ #
GET /health/ #
POST /improvement-requests/ Submit an improvement request #
GET /job-notifications/ #
POST /job-notifications/{notification_id}/read/ #
POST /job-notifications/read-all/ #
GET /job/{id}/ Job 상세 조회 #
POST /job/{id}/cancel/ Job 취소 #
POST /job/{id}/delete/ Job 삭제 (소프트) #
GET /job/{id}/deletion-preview/ Job 삭제 예정일 미리보기 #
GET /job/{id}/execution-logs/ Result Viewer — 실행 console 로그 #
GET /job/{id}/export-step/ #
GET /job/{id}/flowfield/ #
GET /job/{id}/history/ Result Viewer — 최적화 history CSV #
GET /job/{id}/monitor/ Job 모니터링 (대기화면용) #
GET /job/{id}/optimized-stl/ Optimized STL presigned URL(s) — seed a new project #
GET /job/{id}/parameters/ Job view parameters #
POST /job/{id}/purge-now/ Job 즉시 영구 삭제 접수 #
POST /job/{id}/rename/ Run(Job) 이름 변경 #
POST /job/{id}/restart/ G2 Job 단계 재시작 (restart) #
GET /job/{id}/restart-options/ G2 Job restart 단계 옵션 #
POST /job/{id}/restore/ 삭제 예정 Job 복구 #
GET /job/{id}/result-mesh/ Result Viewer — DSN별 mesh presigned URL #
GET /job/{id}/streamlines/ Result Viewer — DSN별 flow streamlines presigned URL #
GET /job/{id}/usage/ Job 실시간 소모 크레딧 #
GET /job/{id}/valid-dsns/ Result Viewer — 유효 DSN 목록 #
GET /job/by-uid/{uid}/ Job UID 상세 조회 #
POST /job/unified/ #
GET /jobs/{job_uid}/asset-publish-candidate/ #
POST /jobs/{job_uid}/asset-submissions/ #
POST /les/autoconfig/ #
GET /les/autoconfig/{uid}/ #
POST /les/autoconfig/{uid}/upload/abort/ #
POST /les/autoconfig/{uid}/upload/complete/ #
POST /les/autoconfig/upload/init/ #
GET /les/runs/ #
POST /les/runs/ #
GET /les/runs/{uid}/ #
POST /les/runs/{uid}/cancel/ #
POST /les/runs/{uid}/delete/ #
GET /les/runs/{uid}/deletion-preview/ #
GET /les/runs/{uid}/figures/{name}/ #
GET /les/runs/{uid}/files/{kind}/ #
GET /les/runs/{uid}/flow-visualization/ #
POST /les/runs/{uid}/flow-visualization/ #
GET /les/runs/{uid}/flow-visualization/image/ #
GET /les/runs/{uid}/flow-visualization/image/{view_id}/ #
POST /les/runs/{uid}/purge-now/ #
POST /les/runs/{uid}/restore/ #
GET /les/runs/{uid}/viewer/ #
POST /les/uploads/{uid}/abort/ #
POST /les/uploads/{uid}/complete/ #
POST /les/uploads/init/ #
PUT /patches/{id}/ Patch 수정 #
DELETE /patches/{id}/ Patch 삭제 #
GET /patches/{id}/artifact-download-url/ Patch artifact download URL 발급 #
POST /patches/{id}/atlas-key/ Atlas sidecar key 저장 #
POST /patches/{id}/proxy-artifacts/ Proxy worker 산출물 메타데이터 갱신 #
POST /patches/{id}/proxy-artifacts/presign/ Source proxy artifact upload URL 발급 #
POST /patches/{id}/proxy-layout-key/ Proxy layout sidecar key 저장 #
POST /patches/{id}/proxy-mask/finalize/ Proxy mask upload completion #
POST /patches/{id}/proxy-mesh-key/ Proxy mesh sidecar key 저장 #
POST /patches/{id}/source-artifacts/ Source proxy artifact set finalize #
POST /patches/{id}/unmerge/ Source patch 병합 해제 #
POST /patches/merge/ Source patch 병합 #
GET /payments/ #
GET /payments/{payment_id}/ #
POST /payments/{payment_id}/checkout-cancel/ 결제창 취소/실패 마킹. FE SDK 의 취소·실패 콜백에서 호출. READY/PAY_PENDING → FAILED(CHECKOUT_CANCELED). 환불(cancel) 과 다른 액션. #
POST /payments/{payment_id}/verify/ 결제 검증 (포트원 GET /payments 로 재조회 후 동기화) #
GET /payments/billing-profile/ Read or update the Team billing profile. #
PUT /payments/billing-profile/ Read or update the Team billing profile. #
GET /payments/checkout-options/ Team checkout options derived from a saved or temporary billing country. #
POST /payments/prepare/ 단건결제 준비 (paymentId 채번). 팀 단위 결제. #
GET /plans/ 플랜 목록 #
GET /plans/{code}/ 플랜 단건 조회 #
POST /plans/{code}/downgrade/ 플랜 다운그레이드 예약 — 사이클 종료 시 적용 #
POST /plans/{code}/subscribe/ 구독 시작 — 빌링키 첫 결제 후 ACTIVE 전환 + SUBSCRIPTION credit 발급 #
POST /plans/{code}/upgrade/ 플랜 업그레이드 — 즉시 권한 + 차액 결제 + 실제 청구 견적 반환 #
GET /plans/{code}/upgrade-quote/ 플랜 업그레이드 사전 견적 — 백엔드 일할 계산/부가세/청구액 SOT #
POST /presigned_url/ 미리 서명된 URL 발급 #
GET /presigned_url/download/ 다운로드용 미리 서명된 URL 발급 #
GET /projects/ 프로젝트 목록 조회 #
POST /projects/ #
GET /projects/{id}/ #
PUT /projects/{id}/ #
DELETE /projects/{id}/ #
POST /projects/{id}/activate/ Activate draft project #
DELETE /projects/{id}/artifacts/{artifact_id}/ #
GET /projects/{id}/deletion-preview/ 프로젝트 삭제 영향 미리보기 #
POST /projects/{id}/geometry-rotation/ 저장된 group transform의 proxy mesh geometry 계산 #
GET /projects/{id}/jobs/ 프로젝트의 Job 목록 조회 #
GET /projects/{id}/mesh-predict/ 프로젝트 mesh cell 예측 #
POST /projects/{id}/patches/ref/ Create ref patch #
POST /projects/{id}/purge-now/ 프로젝트 즉시 영구 삭제 접수 #
POST /projects/{id}/restore/ 삭제 예정 프로젝트 복구 #
POST /projects/{id}/thumbnail/ Register project thumbnail #
GET /projects/{id}/workbench-runtime/ 프로젝트 워크벤치 runtime 조회 #
GET /projects/{id}/workbench-state/ 프로젝트 워크벤치 state 조회/저장 #
PUT /projects/{id}/workbench-state/ 프로젝트 워크벤치 state 조회/저장 #
POST /projects/{project_id}/register-stl/ STL Artifact 등록 #
POST /projects/{project_id}/source-uploads/abort/ #
POST /projects/{project_id}/source-uploads/complete/ #
POST /projects/{project_id}/source-uploads/init/ #
GET /projects/{project_uid}/download-quota/ 프로젝트 공유 다운로드 잔여 횟수 #
POST /projects/{project_uid}/downloads/ 프로젝트 결과 다운로드 ticket 발급 #
GET /projects/by-uid/{uid}/ 프로젝트 UID 상세 조회 #
POST /racing/executions/{execution_uid}/ #
GET /racing/jobs/ #
POST /racing/sessions/ #
GET /racing/sessions/{session_uid}/ #
POST /racing/sessions/{session_uid}/feedback/ #
POST /racing/sessions/{session_uid}/laps/ #
GET /sample-stls/ Sample STL 목록 조회 #
GET /sample-stls/{sample_id}/download/ Sample STL 다운로드 URL 발급 #
POST /sketch/projects/ Create an editable Sketch 2D project #
GET /sketch/projects/{project_uid}/sessions/ List Sketch 2D sessions for a project #
GET /sketch/projects/{project_uid}/state/ #
PUT /sketch/projects/{project_uid}/state/ #
POST /sketch/renderings/ #
POST /sketch/sessions/ Create a Sketch 2D session #
GET /sketch/sessions/{job_uid}/ Get a Sketch 2D session #
POST /sketch/sessions/{job_uid}/cancel/ #
POST /sketch/sessions/{job_uid}/conditions/ Create a new Sketch Job from a source Job with changed conditions #
GET /sketch/sessions/{job_uid}/events/ Stream Sketch 2D frames as SSE #
POST /sketch/sessions/{job_uid}/finish/ #
POST /sketch/sessions/{job_uid}/geometry/ Create a new Sketch Job from a source Job with changed geometry #
POST /sketch/sessions/{job_uid}/heartbeat/ #
POST /sketch/sessions/{job_uid}/stream-ticket/ #
POST /stl/convert/ STEP -> STL conversion — curvature-adaptive tessellation, returns STL + metrics #
POST /stl/convert-async/ 비동기 STEP -> STL 변환 시작 (S3 in → S3 out) #
GET /stl/convert-async/{task_uid}/ 비동기 STEP 변환 상태 조회 #
POST /stl/repair/ STL watertight repair — weld/fill/pymeshfix, returns repaired STL + metrics #
GET /subscriptions/ 팀 구독 조회 — 활성/예약/만료 분리해 반환 #
POST /subscriptions/cancel/ 구독 해지 예약 — 사이클 종료 시 EXPIRED #
GET /subscriptions/cycles/ 팀의 구독 사이클 이력 #
GET /subscriptions/plan-gate/ 팀의 실행 가능 플랜 여부 #
POST /subscriptions/resume/ 구독 해지 예약 취소 — CANCELLED → ACTIVE #
GET /subscriptions/solver-access/ 팀의 현재 Solver 권한 (실시간 조회) #
GET /subscriptions/storage-addon/ 팀 스토리지 애드온 조회 #
POST /subscriptions/storage-addon/change/ 팀 스토리지 애드온 감량 또는 해지 예약 (다음 결제 주기 적용) #
POST /subscriptions/storage-addon/purchase/ 팀 스토리지 애드온 즉시 구매 (현재 구독 주기 종료일까지 일할 청구) #
GET /subscriptions/storage-addon/quote/ 팀 스토리지 애드온 일할 견적 #
GET /teams/ #
POST /teams/ #
PATCH /teams/{team_id}/ #
DELETE /teams/{team_id}/ #
GET /teams/{team_id}/invitations/ #
POST /teams/{team_id}/invitations/ #
DELETE /teams/{team_id}/invitations/{id}/ #
GET /teams/{team_id}/members/ #
POST /teams/{team_id}/members/ #
PATCH /teams/{team_id}/members/{id}/ #
DELETE /teams/{team_id}/members/{id}/ #
GET /teams/{team_uid}/retained-results/ 구독 종료 팀의 결과 다운로드 목록 #
POST /teams/{team_uid}/retained-results/{artifact_uid}/download-url/ 구독 종료 팀의 승인된 결과 Artifact 다운로드 URL #
POST /tenants/exists/ #
GET /uploads/ #
POST /uploads/ #
GET /uploads/{id}/ #
PUT /uploads/{id}/ #
PATCH /uploads/{id}/ #
DELETE /uploads/{id}/ #
POST /verifier/email_verifier/ #
POST /verifier/email_verifier/confirm/ #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/aox-platform-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

adro1b33-aox-openapi.yaml Raw ↑
openapi: 3.0.3
info:
  title: aox-django-backend API
  version: 1.0.0
paths:
  /accounts/login/:
    post:
      operationId: accounts_login_create
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/LoginRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/LoginRequest'
        required: true
      security:
      - {}
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
          description: ''
  /accounts/logout/:
    post:
      operationId: accounts_logout_create
      tags:
      - accounts
      security:
      - {}
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
          description: ''
  /accounts/me/:
    get:
      operationId: accounts_me_retrieve
      tags:
      - accounts
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeResponse'
          description: ''
    delete:
      operationId: accounts_me_destroy
      tags:
      - accounts
      responses:
        '204':
          description: No response body
  /accounts/me/force-password-change/:
    post:
      operationId: accounts_me_force_password_change_create
      description: |-
        must_change_password=True 계정 전용 강제 비밀번호 변경.

        old-password 검증을 생략하는 대신, must_change_password 플래그가 켜진 계정만
        허용하는 것으로 보안을 대체한다.
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserForcePasswordChange'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserForcePasswordChange'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserForcePasswordChange'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
          description: ''
  /accounts/me/password-change/:
    put:
      operationId: accounts_me_password_change_update
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPasswordChange'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserPasswordChange'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserPasswordChange'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
          description: ''
  /accounts/me/password-verify/:
    post:
      operationId: accounts_me_password_verify_create
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPasswordVerify'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserPasswordVerify'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserPasswordVerify'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPasswordVerify'
          description: ''
  /accounts/me/usage/:
    get:
      operationId: accounts_me_usage_retrieve
      parameters:
      - in: query
        name: team_id
        schema:
          type: integer
      tags:
      - accounts
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserMeUsage'
          description: ''
  /accounts/password-reset/:
    post:
      operationId: accounts_password_reset_create
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPasswordReset'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserPasswordReset'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserPasswordReset'
        required: true
      security:
      - {}
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
          description: ''
  /accounts/password-reset-confirm/:
    post:
      operationId: accounts_password_reset_confirm_create
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPasswordResetConfirm'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserPasswordResetConfirm'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserPasswordResetConfirm'
        required: true
      security:
      - {}
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
          description: ''
  /accounts/password_change/:
    put:
      operationId: accounts_password_change_update
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPasswordChange'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserPasswordChange'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserPasswordChange'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
          description: ''
  /accounts/password_verify/:
    post:
      operationId: accounts_password_verify_create
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPasswordVerify'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserPasswordVerify'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserPasswordVerify'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPasswordVerify'
          description: ''
  /accounts/search/:
    get:
      operationId: accounts_search_list
      tags:
      - accounts
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserSearchResult'
          description: ''
  /accounts/signup/:
    post:
      operationId: accounts_signup_create
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Signup'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Signup'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Signup'
        required: true
      security:
      - {}
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignupResponse'
          description: ''
  /accounts/social-login/:
    post:
      operationId: accounts_social_login_create
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserSocialLogin'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserSocialLogin'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserSocialLogin'
        required: true
      security:
      - {}
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserSocialLogin'
          description: ''
  /accounts/social-register/:
    post:
      operationId: accounts_social_register_create
      description: 소셜 신규 가입 — register_token 으로 계정 생성 후 쿠키 세팅.
      tags:
      - accounts
      security:
      - {}
      responses:
        '200':
          description: No response body
  /accounts/team-switch/:
    post:
      operationId: accounts_team_switch_create
      tags:
      - accounts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TeamSwitchRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TeamSwitchRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/TeamSwitchRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
          description: ''
  /accounts/teams/:
    get:
      operationId: accounts_teams_retrieve
      tags:
      - accounts
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TeamsResponse'
          description: ''
  /accounts/token/refresh/:
    post:
      operationId: accounts_token_refresh_create
      tags:
      - accounts
      security:
      - {}
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
          description: ''
  /ai/projects/{project_uid}/chat/:
    post:
      operationId: ai_projects_chat_create
      parameters:
      - in: path
        name: project_uid
        schema:
          type: string
        required: true
      tags:
      - Ai
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiChatRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AiChatRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AiChatRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiChatResponse'
          description: ''
  /ai/projects/{project_uid}/diagnose/:
    post:
      operationId: ai_projects_diagnose_create
      parameters:
      - in: path
        name: project_uid
        schema:
          type: string
        required: true
      tags:
      - Ai
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiagnoseRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/DiagnoseRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/DiagnoseRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiDiagnosisResponse'
          description: ''
  /ai/projects/{project_uid}/recommend/:
    post:
      operationId: ai_projects_recommend_create
      parameters:
      - in: path
        name: project_uid
        schema:
          type: string
        required: true
      tags:
      - Ai
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiAssistRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AiAssistRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AiAssistRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiRecommendationResponse'
          description: ''
  /ai/usage/:
    get:
      operationId: ai_usage_retrieve
      description: 현재 창의 AI Assist 사용량 — 패널이 열릴 때 표시용으로 읽는다.
      tags:
      - Ai
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiUsageResponse'
          description: ''
  /announcements/:
    get:
      operationId: announcements_retrieve
      tags:
      - announcements
      responses:
        '200':
          description: No response body
  /artifacts/:
    get:
      operationId: artifacts_list
      parameters:
      - name: limit
        required: false
        in: query
        description: 페이지당 반환할 결과 수.
        schema:
          type: integer
      - name: offset
        required: false
        in: query
        description: 결과를 반환할 초기 인덱스.
        schema:
          type: integer
      tags:
      - artifacts
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedArtifactListList'
          description: ''
    post:
      operationId: artifacts_create
      tags:
      - artifacts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ArtifactCreate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ArtifactCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ArtifactCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArtifactCreate'
          description: ''
  /artifacts/{artifact_id}/download/:
    get:
      operationId: artifacts_download_retrieve
      parameters:
      - in: path
        name: artifact_id
        schema:
          type: integer
        required: true
      tags:
      - artifacts
      responses:
        '200':
          description: No response body
  /artifacts/{id}/:
    get:
      operationId: artifacts_retrieve
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 아티팩트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - artifacts
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Artifact'
          description: ''
    put:
      operationId: artifacts_update
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 아티팩트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - artifacts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Artifact'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Artifact'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Artifact'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Artifact'
          description: ''
    patch:
      operationId: artifacts_partial_update
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 아티팩트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - artifacts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedArtifact'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedArtifact'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedArtifact'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Artifact'
          description: ''
    delete:
      operationId: artifacts_destroy
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 아티팩트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - artifacts
      responses:
        '204':
          description: No response body
  /artifacts/{id}/copy/:
    post:
      operationId: artifacts_copy_create
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 아티팩트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - artifacts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Artifact'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Artifact'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Artifact'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Artifact'
          description: ''
  /artifacts/{id}/download_url/:
    get:
      operationId: artifacts_download_url_retrieve
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 아티팩트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - artifacts
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Artifact'
          description: ''
  /asset-notifications/{notification_id}/read/:
    post:
      operationId: asset_notifications_read_create
      parameters:
      - in: path
        name: notification_id
        schema:
          type: integer
        required: true
      tags:
      - asset-notifications
      responses:
        '200':
          description: No response body
  /assets/:
    get:
      operationId: assets_retrieve
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /assets/{asset_uid}/:
    get:
      operationId: assets_retrieve_2
      parameters:
      - in: path
        name: asset_uid
        schema:
          type: string
        required: true
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /assets/{asset_uid}/acquire/:
    post:
      operationId: assets_acquire_create
      parameters:
      - in: path
        name: asset_uid
        schema:
          type: string
        required: true
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /assets/{asset_uid}/approval/:
    post:
      operationId: assets_approval_create
      parameters:
      - in: path
        name: asset_uid
        schema:
          type: string
        required: true
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /assets/{asset_uid}/projects/:
    post:
      operationId: assets_projects_create
      parameters:
      - in: path
        name: asset_uid
        schema:
          type: string
        required: true
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /assets/{asset_uid}/retry-copy/:
    post:
      operationId: assets_retry_copy_create
      parameters:
      - in: path
        name: asset_uid
        schema:
          type: string
        required: true
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /assets/{asset_uid}/save/:
    post:
      operationId: assets_save_create
      parameters:
      - in: path
        name: asset_uid
        schema:
          type: string
        required: true
      tags:
      - assets
      responses:
        '200':
          description: No response body
    delete:
      operationId: assets_save_destroy
      parameters:
      - in: path
        name: asset_uid
        schema:
          type: string
        required: true
      tags:
      - assets
      responses:
        '204':
          description: No response body
  /assets/{asset_uid}/stop-sale/:
    post:
      operationId: assets_stop_sale_create
      parameters:
      - in: path
        name: asset_uid
        schema:
          type: string
        required: true
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /assets/mine/:
    get:
      operationId: assets_mine_retrieve
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /assets/transactions/:
    get:
      operationId: assets_transactions_retrieve
      tags:
      - assets
      responses:
        '200':
          description: No response body
  /billing-keys/:
    post:
      operationId: billing_keys_create
      summary: 빌링키 등록 (프론트가 SDK 콜백에서 받은 billingKey 를 팀에 묶어 저장)
      tags:
      - payments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BillingKeyRegisterRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BillingKeyRegisterRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BillingKeyRegisterRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingKey'
          description: ''
  /billing-keys/bypass-hint/:
    get:
      operationId: billing_keys_bypass_hint_retrieve
      summary: 빌링키 발급 SDK 호출에 필요한 PG 별 bypass 페이로드 + channel_key. PG 별 추가 파라미터가 필요한
        경우 프론트가 SDK 호출 전에 가져간다.
      parameters:
      - in: query
        name: provider
        schema:
          type: string
          enum:
          - galaxia
          - payletter
          - paypal
        description: '결제 PG provider. 예: paypal, payletter, galaxia'
        required: true
      tags:
      - payments
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingKeyBypassResponse'
          description: ''
  /billing-keys/current/:
    get:
      operationId: billing_keys_current_retrieve
      description: |-
        팀의 현재 활성 결제수단 1건 (표시용 메타만).

        list/ 는 배열 + DELETED 이력 + billing_key 까지 포함하는 관리/디버그 용도.
        운영 FE 의 "현재 등록된 결제수단" 표시·구독 버튼 분기에는 본 엔드포인트가 적합.
        ISSUED 상태 중 최신 1건만 반환 (정책상 최대 1건). 없으면 200 + null.

        보안: raw billing_key 는 결제 호출용 credential 이라 응답에 포함하지 않는다.
        구독/결제/교체는 서버가 팀의 활성 빌링키를 직접 resolve 하므로 FE 는 불필요.
      summary: 현재 활성(ISSUED) 결제수단 1건 조회. 결제 PG사 + 카드 표시 메타만 반환 (raw billing_key 는
        보안상 미노출). 한 팀 = 활성 빌링키 1개 정책이라 단일 객체로 응답하며, 없으면 null.
      parameters:
      - in: query
        name: team_id
        schema:
          type: integer
      tags:
      - payments
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CurrentBillingMethod'
          description: ''
  /billing-keys/payletter/register-and-charge/:
    post:
      operationId: billing_keys_payletter_register_and_charge_create
      summary: PayLetter requestIssueBillingKeyAndPay 콜백 처리 (빌링키 발급 + 첫결제 동시). 프론트가
        SDK 콜백에서 받은 billingKey + paymentId 전달.
      tags:
      - payments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BillingKeyRegisterAndChargePayletterRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BillingKeyRegisterAndChargePayletterRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BillingKeyRegisterAndChargePayletterRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingKey'
          description: ''
  /billing-keys/swap/:
    post:
      operationId: billing_keys_swap_create
      summary: PG 인증 성공 뒤, 서버 트랜잭션에서 청구 프로필과 새 빌링키를 함께 등록한다. 진행 중 구독은 현재 결제주기를 유지하고
        다음 갱신부터 새 키를 사용한다.
      tags:
      - payments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BillingKeySwapRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BillingKeySwapRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BillingKeySwapRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingMethodSwap'
          description: ''
  /board/:
    get:
      operationId: board_retrieve
      tags:
      - board
      security:
      - {}
      responses:
        '200':
          description: No response body
  /board/{id}/:
    get:
      operationId: board_retrieve_2
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        required: true
      tags:
      - board
      security:
      - {}
      responses:
        '200':
          description: No response body
  /book_demo/:
    post:
      operationId: book_demo_create
      summary: 데모 예약 신청
      tags:
      - book_demo
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookDemoCreate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BookDemoCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BookDemoCreate'
        required: true
      security:
      - {}
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookDemoCreate'
          description: ''
  /credits/buckets/:
    get:
      operationId: credits_buckets_list
      summary: bucket 목록 (active 우선)
      parameters:
      - in: query
        name: include_inactive
        schema:
          type: boolean
      - in: query
        name: team_id
        schema:
          type: integer
        required: true
      tags:
      - credits
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CreditBucket'
          description: ''
  /credits/bundles/:
    get:
      operationId: credits_bundles_list
      summary: 크레딧 번들 목록
      parameters:
      - in: query
        name: currency
        schema:
          type: string
      - in: query
        name: include_inactive
        schema:
          type: boolean
        description: true 면 비활성 번들도 함께 (admin 화면용)
      tags:
      - credits
      security:
      - {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CreditBundle'
          description: ''
  /credits/bundles/{bundle_id}/:
    get:
      operationId: credits_bundles_retrieve
      summary: 크레딧 번들 단건 조회
      parameters:
      - in: path
        name: bundle_id
        schema:
          type: integer
        required: true
      - in: query
        name: currency
        schema:
          type: string
      tags:
      - credits
      security:
      - {}
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditBundle'
          description: ''
  /credits/bundles/{bundle_id}/purchase/:
    post:
      operationId: credits_bundles_purchase_create
      summary: 번들 구매 시작 (단건결제 paymentId 채번)
      parameters:
      - in: path
        name: bundle_id
        schema:
          type: integer
        required: true
      tags:
      - credits
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BundlePurchaseStartRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BundlePurchaseStartRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BundlePurchaseStartRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OneTimePrepareResponse'
          description: ''
  /credits/estimate/:
    get:
      operationId: credits_estimate_retrieve
      summary: 예상 소모 크레딧 계산
      parameters:
      - in: query
        name: project_id
        schema:
          type: integer
        required: true
      tags:
      - credits
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditEstimateResponse'
          description: ''
  /credits/operations/:
    get:
      operationId: credits_operations_list
      summary: 크레딧 operation 목록 (idempotency 단위, 최신순)
      parameters:
      - in: query
        name: limit
        schema:
          type: integer
      - in: query
        name: team_id
        schema:
          type: integer
        required: true
      tags:
      - credits
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CreditOperation'
          description: ''
  /credits/purchases/:
    get:
      operationId: credits_purchases_list
      summary: 번들 구매 이력
      parameters:
      - in: query
        name: limit
        schema:
          type: integer
      - in: query
        name: team_id
        schema:
          type: integer
        required: true
      tags:
      - credits
      responses:
        '200':
          content:


# --- truncated at 32 KB (319 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/adro1b33/refs/heads/main/openapi/adro1b33-aox-openapi.yaml