ADRO Projects API

The projects API from ADRO — 21 operation(s) for projects.

Operations 25

GET /projects/ 프로젝트 목록 조회 #
POST /projects/ Projects create #
GET /projects/{id}/ Projects retrieve #
PUT /projects/{id}/ Projects update #
DELETE /projects/{id}/ Projects destroy #
POST /projects/{id}/activate/ Activate draft project #
DELETE /projects/{id}/artifacts/{artifact_id}/ Projects artifacts destroy #
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/ Projects source uploads abort create #
POST /projects/{project_id}/source-uploads/complete/ Projects source uploads complete create #
POST /projects/{project_id}/source-uploads/init/ Projects source uploads init create #
GET /projects/{project_uid}/download-quota/ 프로젝트 공유 다운로드 잔여 횟수 #
POST /projects/{project_uid}/downloads/ 프로젝트 결과 다운로드 ticket 발급 #
GET /projects/by-uid/{uid}/ 프로젝트 UID 상세 조회 #

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/adro1b33-projects-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-projects-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: aox-django-backend Projects API
  version: 1.0.0
tags:
- name: Projects
paths:
  /projects/:
    get:
      operationId: projects_list
      description: 프로젝트 목록을 조회합니다. mode(G1/G2), include_archived 필터를 지원합니다.
      summary: 프로젝트 목록 조회
      parameters:
      - in: query
        name: cursor
        schema:
          type: string
        description: Cursor for pagination
      - in: query
        name: include_archived
        schema:
          type: boolean
        description: '아카이브된 프로젝트 포함 여부 (default: false)'
      - in: query
        name: mode
        schema:
          type: string
          enum:
          - G1
          - G2
          - G3
          - G4
          - S2
        description: Project mode filter (G1 또는 G2)
      - name: page_size
        required: false
        in: query
        description: 페이지당 반환할 결과 수.
        schema:
          type: integer
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedProjectListList'
          description: ''
    post:
      operationId: projects_create
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectCreate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ProjectCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ProjectCreate'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectCreate'
          description: ''
      summary: Projects create
      x-summary-source: derived
  /projects/{id}/:
    get:
      operationId: projects_retrieve
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
          description: ''
      summary: Projects retrieve
      x-summary-source: derived
    put:
      operationId: projects_update
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Project'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Project'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
          description: ''
      summary: Projects update
      x-summary-source: derived
    delete:
      operationId: projects_destroy
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      responses:
        '204':
          description: No response body
      summary: Projects destroy
      x-summary-source: derived
  /projects/{id}/activate/:
    post:
      operationId: projects_activate_create
      description: Uploads create projects as draft. This endpoint stores source files and promotes the project to active.
      summary: Activate draft project
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Project'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Project'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
          description: ''
  /projects/{id}/artifacts/{artifact_id}/:
    delete:
      operationId: projects_artifacts_destroy
      parameters:
      - in: path
        name: artifact_id
        schema:
          type: string
        required: true
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      responses:
        '204':
          description: No response body
      summary: Projects artifacts destroy
      x-summary-source: derived
  /projects/{id}/deletion-preview/:
    get:
      operationId: projects_deletion_preview_retrieve
      summary: 프로젝트 삭제 영향 미리보기
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
          description: ''
  /projects/{id}/geometry-rotation/:
    post:
      operationId: projects_geometry_rotation_create
      description: 저장된 unified_config.geometry.transform을 전체 source-patch group에 한 번 적용해 proxy mesh 기반 patch bbox, union bbox, viewer translate를 반환합니다.
      summary: 저장된 group transform의 proxy mesh geometry 계산
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Project'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Project'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GeometryRotationResponse'
          description: ''
  /projects/{id}/jobs/:
    get:
      operationId: projects_jobs_list
      description: 특정 프로젝트의 Job 목록을 조회합니다. Pagination과 filtering을 지원합니다.
      summary: 프로젝트의 Job 목록 조회
      parameters:
      - in: query
        name: cursor
        schema:
          type: string
        description: Cursor for pagination
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      - in: query
        name: mode
        schema:
          type: string
          x-spec-enum-id: b6373ee318bc60a4
          enum:
          - G1
          - G2
          - G3
          - G4
          - S2
        description: '* `G1` - G1

          * `G2` - G2

          * `G3` - G3

          * `G4` - G4

          * `S2` - Sketch 2D'
      - name: page_size
        required: false
        in: query
        description: 페이지당 반환할 결과 수.
        schema:
          type: integer
      - in: query
        name: project_mode
        schema:
          type: string
          enum:
          - G1
          - G2
          - G3
          - G4
          - S2
        description: Project mode filter
      - in: query
        name: status
        schema:
          type: string
          enum:
          - aborted
          - cancellation_failed
          - cancelled
          - cancelling
          - failed
          - queued
          - running
          - succeeded
        description: Job status filter
      - in: query
        name: view
        schema:
          type: string
          enum:
          - sidebar
        description: Compact response shape for the RUNS sidebar
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedJobListList'
          description: ''
  /projects/{id}/mesh-predict/:
    get:
      operationId: projects_mesh_predict_retrieve
      description: Source Patch metadata와 solver mesh settings를 사용해 최종 mesh cell 수를 예측합니다.
      summary: 프로젝트 mesh cell 예측
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeshPredictResponse'
          description: ''
  /projects/{id}/patches/ref/:
    post:
      operationId: projects_patches_ref_create
      description: 'Creates a ref patch for a source patch. The server assigns its immutable-at-creation label as `Patch #N` from the project''s monotonic ref-patch label sequence. `label` is not part of the request schema and is ignored for older clients.'
      summary: Create ref patch
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchCreate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Patch'
          description: ''
  /projects/{id}/purge-now/:
    post:
      operationId: projects_purge_now_create
      summary: 프로젝트 즉시 영구 삭제 접수
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Project'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Project'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
          description: ''
  /projects/{id}/restore/:
    post:
      operationId: projects_restore_create
      summary: 삭제 예정 프로젝트 복구
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Project'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Project'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
          description: ''
  /projects/{id}/thumbnail/:
    post:
      operationId: projects_thumbnail_create
      description: Registers an uploaded WebP thumbnail S3 object as a PROJECT_THUMBNAIL_IMAGE artifact.
      summary: Register project thumbnail
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectThumbnailRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ProjectThumbnailRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ProjectThumbnailRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectThumbnail'
          description: ''
  /projects/{id}/workbench-runtime/:
    get:
      operationId: projects_workbench_runtime_retrieve
      description: Patch DB 상태에서 계산한 geometry, scene unit scale, processing state를 반환합니다.
      summary: 프로젝트 워크벤치 runtime 조회
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkbenchRuntime'
          description: ''
  /projects/{id}/workbench-state/:
    get:
      operationId: projects_workbench_state_retrieve
      description: GET은 저장된 unified config와 revision을 반환합니다. PUT은 expected_revision이 현재 revision과 일치할 때만 unified_config를 덮어씁니다.
      summary: 프로젝트 워크벤치 state 조회/저장
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkbenchState'
          description: ''
    put:
      operationId: projects_workbench_state_update
      description: GET은 저장된 unified config와 revision을 반환합니다. PUT은 expected_revision이 현재 revision과 일치할 때만 unified_config를 덮어씁니다.
      summary: 프로젝트 워크벤치 state 조회/저장
      parameters:
      - in: path
        name: id
        schema:
          type: integer
        description: 프로젝트을 식별하는 고유한 정수 값.
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkbenchStateUpdate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/WorkbenchStateUpdate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/WorkbenchStateUpdate'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkbenchState'
          description: ''
  /projects/{project_id}/register-stl/:
    post:
      operationId: projects_register_stl_create
      description: S3에 이미 업로드된 STL 파일을 Artifact로 등록합니다.
      summary: STL Artifact 등록
      parameters:
      - in: path
        name: project_id
        schema:
          type: integer
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/STLArtifactRegister'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/STLArtifactRegister'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/STLArtifactRegister'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Artifact'
          description: ''
        '400':
          content:
            application/json:
              schema:
                type: object
                additionalProperties: {}
          description: ''
        '404':
          content:
            application/json:
              schema:
                type: object
                additionalProperties: {}
          description: ''
  /projects/{project_id}/source-uploads/abort/:
    post:
      operationId: projects_source_uploads_abort_create
      parameters:
      - in: path
        name: project_id
        schema:
          type: integer
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SourceUploadAbort'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/SourceUploadAbort'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/SourceUploadAbort'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                additionalProperties: {}
          description: ''
      summary: Projects source uploads abort create
      x-summary-source: derived
  /projects/{project_id}/source-uploads/complete/:
    post:
      operationId: projects_source_uploads_complete_create
      parameters:
      - in: path
        name: project_id
        schema:
          type: integer
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SourceUploadComplete'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/SourceUploadComplete'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/SourceUploadComplete'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                type: object
                additionalProperties: {}
          description: ''
      summary: Projects source uploads complete create
      x-summary-source: derived
  /projects/{project_id}/source-uploads/init/:
    post:
      operationId: projects_source_uploads_init_create
      parameters:
      - in: path
        name: project_id
        schema:
          type: integer
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SourceUploadInit'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/SourceUploadInit'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/SourceUploadInit'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                type: object
                additionalProperties: {}
          description: ''
      summary: Projects source uploads init create
      x-summary-source: derived
  /projects/{project_uid}/download-quota/:
    get:
      operationId: projects_download_quota_retrieve
      summary: 프로젝트 공유 다운로드 잔여 횟수
      parameters:
      - in: path
        name: project_uid
        schema:
          type: string
        required: true
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadQuota'
          description: ''
  /projects/{project_uid}/downloads/:
    post:
      operationId: projects_downloads_create
      summary: 프로젝트 결과 다운로드 ticket 발급
      parameters:
      - in: path
        name: project_uid
        schema:
          type: string
        required: true
      tags:
      - Projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectDownloadTicketRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ProjectDownloadTicketRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ProjectDownloadTicketRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectDownloadTicket'
          description: ''
  /projects/by-uid/{uid}/:
    get:
      operationId: projects_by_uid_retrieve
      summary: 프로젝트 UID 상세 조회
      parameters:
      - in: path
        name: uid
        schema:
          type: string
        required: true
      tags:
      - Projects
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
          description: ''
components:
  schemas:
    Patch:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        uid:
          type: string
          readOnly: true
        patchType:
          enum:
          - source
          - ref
          type: string
          description: '* `source` - Source

            * `ref` - Ref'
          x-spec-enum-id: 946c46f06a235611
          readOnly: true
        label:
          type: string
          maxLength: 255
        category:
          enum:
          - optimization
          - constant
          - wing
          - wheel_front
          - wheel_rear
          - optimization_target
          - constant_target
          - front_wheel
          - rear_wheel
          type: string
          description: '* `optimization` - Optimization

            * `constant` - Constant

            * `wing` - Wing

            * `wheel_front` - Wheel Front

            * `wheel_rear` - Wheel Rear

            * `optimization_target` - Optimization Target

            * `constant_target` - Constant Target

            * `front_wheel` - Front Wheel

            * `rear_wheel` - Rear Wheel'
          x-spec-enum-id: 5dd1d70043ac53a5
        artifactId:
          type:
          - integer
          - 'null'
          description: Associated artifact for source patch
          readOnly: true
        triangleCount:
          type:
          - integer
          - 'null'
          maximum: 2147483647
          minimum: -2147483648
          description: source patch original STL triangle count
        surfaceArea:
          type:
          - number
          - 'null'
          format: double
          description: source/ref patch surface area
        selectedProxyTriangleCount:
          type:
          - integer
          - 'null'
          maximum: 2147483647
          minimum: -2147483648
          description: ref patch only
        boundingBox:
          description: source/ref 공용 bbox payload {min:[x,y,z], max:[x,y,z], ffd_degree?:[i,j,k]}
        ffdDegree:
          type:
          - array
          - 'null'
          items:
            type: integer
          writeOnly: true
        proxyMaskSizeBytes:
          type: integer
          minimum: 1
          writeOnly: true
        normalDisplacementInward:
          type:
          - number
          - 'null'
          format: double
          title: (constraint) normal displacement inward
        normalDisplacementOutward:
          type:
          - number
          - 'null'
          format: double
          title: (constraint) normal displacement outward
        planeLimitXMin:
          type:
          - number
          - 'null'
          format: double
          title: (constraint) plane limit x min
        planeLimitXMax:
          type:
          - number
          - 'null'
          format: double
          title: (constraint) plane limit x max
        planeLimitYMin:
          type:
          - number
          - 'null'
          format: double
          title: (constraint) plane limit y min
        planeLimitYMax:
          type:
          - number
          - 'null'
          format: double
          title: (constraint) plane limit y max
        planeLimitZMin:
          type:
          - number
          - 'null'
          format: double
          title: (constraint) plane limit z min
        planeLimitZMax:
          type:
          - number
          - 'null'
          format: double
          title: (constraint) plane limit z max
        inputPreviewPointsKey:
          type: string
          description: source patch point preview only
          maxLength: 1024
        inputPreviewPoints:
          description: source patch point preview metadata
        inputPreviewVoxelsKey:
          type: string
          description: source patch voxel preview only
          maxLength: 1024
        inputPreviewVoxels:
          description: source patch voxel preview metadata
        proxyCacheKey:
          type: string
          description: source patch only
          maxLength: 255
        proxyMeshKey:
          type: string
          description: source patch only
          maxLength: 1024
        proxyLayoutKey:
          type: string
          description: source patch only
          maxLength: 1024
        atlasKey:
          type: string
          description: source patch only
          maxLength: 1024
        proxyWorkerRevision:
          type: string
          description: source patch only
          maxLength: 64
        proxyArtifactSignature:
          type: string
          description: source patch only
          maxLength: 128
        proxyTriangleCount:
          type:
          - integer
          - 'null'
          maximum: 2147483647
          minimum: -2147483648
          description: source patch only
        hasRefs:
          type: boolean
          readOnly: true
        isMergeOutput:
          type: boolean
          readOnly: true
        isMergePending:
          type: boolean
          readOnly: true
        mergedSourcePatches:
          type: array
          items:
            $ref: '#/components/schemas/MergedSourcePatch'
          readOnly: true
        isInitialSourceUpload:
          type: boolean
          readOnly: true
          description: source patch only - uploaded while project was draft
        sourcePatchId:
          type:
          - integer
          - 'null'
          readOnly: true
        mergedIntoPatchId:
          type:
          - integer
          - 'null'
          readOnly: true
        proxyMeshMaskKey:
          type: string
          description: ref patch only
          maxLength: 1024
        sourceProxyArtifactSignature:
          type: string
          description: ref patch only — 부모 source patch proxy signature 스냅샷
          maxLength: 128
        proxyMaskSignature:
          type: string
          description: ref patch only
          maxLength: 128
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
      - artifactId
      - createdAt
      - hasRefs
      - id
      - isInitialSourceUpload
      - isMergeOutput
      - isMergePending
      - mergedIntoPatchId
      - mergedSourcePatches
      - patchType
      - sourcePatchId
      - uid
      - updatedAt
    SourceUploadAbort:
      type: object
      properties:
        objectKey:
          type: string
        uploadId:
          type: string
        reservationId:
          type: string
          format: uuid
      required:
      - objectKey
      - reservationId
      - uploadId
    WorkbenchStateUpdate:
      type: object
      description: 'PUT /projects/{id}/workbench-state/


        unified_config: solver-independent project configuration (전체 덮어쓰기)

        expected_revision: 마지막으로 읽은 WorkbenchState revision'
      properties:
        unifiedConfig: {}
        expectedRevision:
          type: integer
          minimum: 0
    MergedSourcePatch:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        label:
          type: string
          readOnly: true
        boundingBox:
          readOnly: true
        inputPreviewPoints:
          readOnly: true
      required:
      - boundingBox
      - id
      - inputPreviewPoints
      - label
    MeshPredictResponse:
      type: object
      properties:
        solverType:
          enum:
          - G1
          - G2
          type: string
          description: '* `G1` - G1

            * `G2` - G2'
          x-spec-enum-id: 7419f4880cbd06f5
        totalArea:
          type: number
          format: double
        totalFacets:
          type: integer
        meshCells:
          type:
          - integer
          - 'null'
        predictedCells:
          type:
          - integer
          - 'null'
        cellLimit:
          type:
          - integer
          - 'null'
      required:
      - meshCells
      - solverType
      - totalArea
      - totalFacets
    STLArtifactRegister:
      type: object
      properties:
        s3Bucket:
          type: string
          maxLength: 255
        s3Key:
          type: string
          maxLength: 1024
        contentType:
          type:
          - string
          - 'null'
          maxLength: 255
        sizeBytes:
          type:
          - integer
          - 'null'
          maximum: 9223372036854775807
          minimum: -9223372036854775808
          format: int64
      required:
      - s3Bucket
      - s3Key
    ProjectDownloadTicketRequest:
      type: object
      properties:
        source:
          enum:
          - JOB_RESULT_ZIP
          - SUMMARY_FIGURES
          - LES_FIGURES
          - G3_EDITED_STL
          - WORKBENCH_PATCH_EXPORT
          type: string
          description: '* `JOB_RESULT_ZIP` - Job result ZIP

            * `SUMMARY_FIGURES` - Summary figures

            * `LES_FIGURES` - LES figures

            * `G3_EDITED_STL` - G3 edited STL

            * `WORKBENCH_PATCH_EXPORT` - Workbench patch export'
          x-spec-enum-id: 7ce9d8b5eee7ed41
        jobUid:
          type: string
          maxLength: 36
        items:
          type: array
          items:
            $ref: '#/components/schemas/DownloadItemRequest'
        clientExport:
          $ref: '#/components/schemas/ClientExportRequest'
      required:
      - source
    WorkbenchState:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        projectId:
          type: integer
          readOnly: true
        unifiedConfig:
          description: Solver-independent editable project configuration.
        revision:
          type: integer
          readOnly: true
          description: Monotonic revision used for conditional workbench UI state updates.
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
      - id
      - projectId
      - revision
      - updatedAt
    DownloadItemRequest:
      type: object
      properties:
        artifactUid:
          type: string
          maxLength: 36
        fileId:
          type: string
          maxLength: 128
        role:
          type: string
          maxLength: 40
    ProjectThumbnail:
      type: object
      properties:
        thumbnailUrl:
          type:
          - s

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