Auto Split API

3D 모델을 별도로 출력 가능한 파트로 분할합니다 — 자동으로, 사용자가 지정한 파트별로, 또는 색상 영역별로 — 커넥터를 선택적으로 추가할 수 있으며, 절단으로 인해 얇아진 영역은 항상 보강되어 모든 파트가 견고하게 출력됩니다.


POST/openapi/v1/print/split

Auto Split 작업 생성

이 엔드포인트는 새로운 Auto Split 작업을 생성합니다. 이 작업은 이전 작업의 모델을 개별적으로 출력 가능한 부품들로 절단하고, 각 부품이 파일 내에서 별도의 오브젝트가 되도록 분할된 모델을 반환합니다.

매개변수

  • Name
    input_task_id
    Type
    string
    필수
    Description

    분할할 모델을 가진, 성공한 작업의 ID입니다. 지원되는 작업 유형: 이미지로 3D, 멀티 이미지로 3D, 텍스트로 3D (프리뷰), Remesh, 변환, 크기 조정. 작업의 상태는 SUCCEEDED여야 하며, 해당 모델은 Meshy 6 또는 Meshy 7(ai_model이 meshy-6, meshy-7, meshy-7.1, 또는 latest)로 생성된 것이어야 합니다. 로우폴리 및 Smart Topology(meshy-t2) 모델은 지원되지 않습니다. 텍스처가 적용된 모델도 허용되지만, 결과물에는 해당 텍스처가 반영되지 않습니다.

  • Name
    mode
    Type
    string
    기본값 auto
    Description

    모델을 부품으로 분할하는 방식입니다.

    사용 가능한 값:

    • auto: Meshy가 절단 위치를 결정합니다. prompt는 무시됩니다.
    • by_parts: prompt에서 지정한 머리, 팔, 몸통 등 구조적 부품을 따라 절단합니다.
    • by_color: prompt에서 지정한 색상 영역을 따라 절단합니다. 업로드된 이미지로부터 생성된 입력(이미지로 3D 또는 멀티 이미지로 3D)이 필요하며, 그 외의 입력은 400으로 거부됩니다. 색상 영역 경계는 입력 모델의 텍스처가 아니라 소스 이미지에서 가져옵니다. 멀티 이미지로 3D의 경우, Auto Split은 첫 번째 소스 이미지를 사용합니다.
다음 경우에만 적용 mode = by_parts or by_color
  • Name
    prompt
    Type
    string
    필수
    Description

    분할할 부품을 어떤 언어로든 설명합니다. Meshy는 여기서 1개에서 10개까지의 부품 이름을 읽어내므로, 모델을 설명하기보다는 조각의 이름을 지정하세요 — 예를 들어 split into the figure and the base, 또는 head, torso, left arm, right arm, legs처럼요. 부품을 하나만 지정해도 괜찮습니다: 지정하지 않은 나머지 부분은 하나의 부품으로 남으므로, 웹 앱에서처럼 the head는 모델을 머리와 나머지 부분으로 분할합니다. 최대 600자까지 가능합니다. 두 가지 실패 상황이 있습니다: 분할을 전혀 요청하지 않는 설명이거나 10개를 초과하는 부품을 지정한 경우 400으로 거부되며 아무 비용도 청구되지 않습니다. Meshy가 전혀 해석할 수 없는 설명일 경우 auto로 대체되어 작업이 그대로 실행되고 비용이 청구되며, 응답에는 prompt_ignored: true가 포함됩니다.

  • Name
    target_formats
    Type
    array
    기본값 ["glb"]
    Description

    분할된 모델을 내보낼 형식입니다. 씬 오브젝트를 지원하는 형식(glb, obj, fbx, usdz, blend, 3mf)은 각 부품을 별도의 오브젝트로 담습니다. stl은 별도 오브젝트 개념이 없으므로 모든 부품을 layout에 따라 배치된 하나의 솔리드로 합칩니다(슬라이서에서 개별적으로 선택 가능한 부품을 원한다면 3mf를 요청하세요). glb는 항상 생성되어 model_urls에 반환되며, 그 외에 원하는 형식을 추가로 나열하면 됩니다.

    사용 가능한 값: glb, obj, fbx, stl, usdz, blend, 3mf.

  • Name
    layout
    Type
    string
    기본값 assembled
    Description

    모든 출력 형식 및 썸네일에서 부품이 배치되는 방식입니다.

    사용 가능한 값:

    • assembled: 부품이 소스 모델에 있던 위치 그대로 유지됩니다.
    • on_plate: 부품이 평평하게 놓여 빌드 플레이트 위에 펼쳐지며, 바로 슬라이싱할 수 있는 상태가 됩니다 — 웹 앱의 On Plate 뷰와 동일한 배치입니다.

    두 레이아웃 모두에서, 절단 후 남은 얇은 조각이나 점처럼 붕괴된 조각은 내보내기 전에 제거되므로, 얻게 되는 모든 부품은 출력 가능합니다. 씬 오브젝트를 지원하는 형식은 부품마다 하나의 오브젝트를 담으며, stl은 이들을 하나의 솔리드로 합칩니다.

  • Name
    connectors
    Type
    boolean
    기본값 false
    Description

    각 절단면에 출력된 부품들이 서로 맞물리도록 장부-장부구멍(mortise-and-tenon) 커넥터를 추가합니다.

다음 경우에만 적용 connectors = true
  • Name
    connector_type
    Type
    string
    기본값 cube
    Description

    각 절단면에 사용되는 커넥터의 형태입니다.

    사용 가능한 값: cube, cylinder.

  • Name
    connector_size
    Type
    number
    기본값 0.5
    Description

    절단면 대비 커넥터의 상대적 크기입니다.

    유효 범위: 0.1에서 0.8.

  • Name
    connector_height
    Type
    number
    기본값 0.1
    Description

    커넥터가 절단면 대비 상대적으로 얼마나 돌출되는지를 나타냅니다.

    유효 범위: 0.1에서 0.8.

반환값

응답의 result 속성에는 새로 생성된 Auto Split 작업의 id가 포함됩니다.

실패 모드

  • Name
    400 - Bad Request
    Description

    요청이 허용되지 않았습니다. 일반적인 원인:

    • prompt 누락: mode가 by_parts 또는 by_color일 경우 prompt는 필수입니다.
    • 분할을 요청하지 않는 prompt이거나 부품이 너무 많은 경우: by_parts / by_color는 1개에서 10개까지의 이름이 지정된 조각을 허용합니다. 모델을 한 조각으로 유지해 달라는 설명이거나 10개를 초과하는 부품을 지정한 경우 거부됩니다. 아무 비용도 청구되지 않습니다.
    • 지원되지 않는 입력 작업: input_task_id는 Meshy 6 또는 Meshy 7으로 생성된, 지원되는 유형의 성공한 작업을 참조해야 합니다.
    • 참조 이미지 없음: by_color는 업로드된 이미지로부터 생성된 입력이 필요합니다.
    • 범위를 벗어난 커넥터: connector_size 또는 connector_height가 0.1에서 0.8 범위를 벗어났습니다.
  • Name
    401 - Unauthorized
    Description

    인증에 실패했습니다. API 키를 확인해 주세요.

  • Name
    402 - Payment Required
    Description

    이 작업을 수행하기에 크레딧이 부족합니다.

  • Name
    404 - Not Found
    Description

    input_task_id가 존재하지 않거나 사용자의 계정에 속하지 않습니다.

  • Name
    429 - Too Many Requests
    Description

    속도 제한을 초과했습니다. by_parts 및 by_color 요청은 계정당 분당 12건이라는 prompt 파싱 제한도 공유합니다.

  • Name
    503 - Service Unavailable
    Description

    prompt 기반 분할(by_parts 및 by_color)을 일시적으로 사용할 수 없습니다. 나중에 다시 시도하거나, 영향을 받지 않는 mode: "auto"를 사용하세요. 아무 비용도 청구되지 않습니다.

Request

POST
/openapi/v1/print/split
# Simple request: let Meshy choose the cuts
curl https://api.meshy.ai/openapi/v1/print/split \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
    "input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578"
  }'

# Advanced request: name the parts, add connectors, export glb and obj
curl https://api.meshy.ai/openapi/v1/print/split \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
    "input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
    "mode": "by_parts",
    "prompt": "split into the figure and the base",
    "target_formats": ["glb", "obj"],
    "layout": "on_plate",
    "connectors": true,
    "connector_type": "cylinder",
    "connector_size": 0.4
  }'

Response

{
  "result": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
}

GET/openapi/v1/print/split/:id

Auto Split 작업 조회하기

이 엔드포인트는 ID를 통해 Auto Split 작업을 조회합니다.

매개변수

  • Name
    id
    Type
    path
    Description

    조회할 Auto Split 작업의 ID입니다.

반환값

Auto Split Task 객체입니다.

Request

GET
/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f
curl https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response

{
  "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
  "type": "print-split",
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
    "obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
  "part_count": 4,
  "progress": 100,
  "status": "SUCCEEDED",
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000082000,
  "task_error": null,
  "consumed_credits": 10
}

DELETE/openapi/v1/print/split/:id

Auto Split 작업 삭제

이 엔드포인트는 Auto Split 작업을 관련된 모든 모델 및 데이터와 함께 영구적으로 삭제합니다. 이 작업은 되돌릴 수 없습니다.

경로 매개변수

  • Name
    id
    Type
    path
    Description

    삭제할 Auto Split 작업의 ID입니다.

작업 상태

아직 PENDING 상태인 작업은 삭제되며, 생성 시 소모된 크레딧이 환불됩니다.

이미 IN_PROGRESS 상태인 작업은 삭제할 수 없습니다. 요청은 409 Conflict로 거부되며 작업은 계속 실행됩니다. 워커가 이미 시작한 작업의 크레딧은 환불되지 않으므로, 실행 도중 삭제하면 크레딧과 결과물을 모두 잃게 됩니다. 작업이 SUCCEEDED, FAILED 또는 CANCELED 상태에 도달할 때까지 기다린 후 삭제하세요.

종료 상태(SUCCEEDED, FAILED 또는 CANCELED)의 작업은 환불 없이 삭제됩니다.

반환값

성공 시 200 OK를 반환하며, 작업이 IN_PROGRESS 상태일 때는 409 Conflict를 반환합니다.

Request

DELETE
/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f
curl --request DELETE \
  --url https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response

// 200 OK on success, with an empty body.
//
// 409 Conflict when the task is IN_PROGRESS — the task is left running:
{
  "message": "Task is IN_PROGRESS and cannot be deleted. Credits for a task the worker has already started are not refundable; wait for it to reach SUCCEEDED, FAILED or CANCELED, then delete it."
}

GET/openapi/v1/print/split

Auto Split 작업 목록 조회

이 엔드포인트를 사용하면 Auto Split 작업 목록을 조회할 수 있습니다.

매개변수

선택적 속성

  • Name
    page_num
    Type
    integer
    Description

    페이지네이션을 위한 페이지 번호입니다. 1부터 시작하며 기본값은 1입니다.

  • Name
    page_size
    Type
    integer
    Description

    페이지 크기 제한입니다. 기본값은 10개 항목입니다. 최대 허용값은 100개 항목이며, 더 큰 값은 100으로 제한됩니다.

  • Name
    sort_by
    Type
    string
    Description

    정렬 기준 필드입니다. 사용 가능한 값:

    • +created_at: 생성 시간 오름차순으로 정렬합니다.
    • -created_at: 생성 시간 내림차순으로 정렬합니다.

반환값

Auto Split 작업 객체의 페이지네이션된 목록을 반환합니다.

Request

GET
/openapi/v1/print/split
curl https://api.meshy.ai/openapi/v1/print/split?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response

[
  {
    "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
    "type": "print-split",
    "model_urls": {
      "glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***"
    },
    "thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
    "part_count": 4,
    "progress": 100,
    "status": "SUCCEEDED",
    "preceding_tasks": 0,
    "created_at": 1699999999000,
    "started_at": 1700000000000,
    "finished_at": 1700000082000,
    "task_error": null,
    "consumed_credits": 10
  }
]

GET/openapi/v1/print/split/:id/stream

Auto Split 작업 스트리밍

이 엔드포인트는 Server-Sent Events(SSE)를 사용하여 Auto Split 작업의 실시간 업데이트를 스트리밍합니다.

Parameters

  • Name
    id
    Type
    path
    Description

    스트리밍할 Auto Split 작업의 고유 식별자입니다.

Returns

The Auto Split Task Objects의 스트림을 Server-Sent Events 형태로 반환합니다.

모든 message 이벤트는 Retrieve an Auto Split Task에서 반환되는 것과 동일한 전체 작업 객체를 담고 있으며, 여기에는 consumed_credits, 타임스탬프, prompt_ignored가 포함됩니다. 작업이 PENDING 또는 IN_PROGRESS 상태인 동안 프레임 사이에서 변경되는 필드는 progress, status, started_at, preceding_tasks이며, SUCCEEDED 상태에 도달하면 model_urls, thumbnail_url, part_count가 나타납니다. error 이벤트는 status_code와 message만 담고 있으므로, status를 읽기 전에 이벤트 이름으로 분기 처리해야 합니다.

Request

GET
/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream
curl -N https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response Stream

// Error event example
event: error
data: {
  "status_code": 404,
  "message": "Task not found"
}

// Message event examples illustrate task progress (other task fields omitted here for brevity;
// each frame is the full task object).
event: message
data: {
  "id": "a43b5c6d-7e8f-901a-234b-567c890d1e2f",
  "progress": 0,
  "status": "PENDING"
}

event: message
data: {
  "id": "a43b5c6d-7e8f-901a-234b-567c890d1e2f",
  "type": "print-split",
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/a43b5c6d-7e8f-901a-234b-567c890d1e2f/output/model.glb?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/a43b5c6d-7e8f-901a-234b-567c890d1e2f/output/preview.png?Expires=***",
  "part_count": 4,
  "progress": 100,
  "status": "SUCCEEDED",
  "preceding_tasks": 0,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000082000,
  "task_error": null,
  "consumed_credits": 10
}

The Auto Split Task Object

Auto Split 작업은 아래 속성만 포함합니다. 다른 작업 객체에 포함되는 생성 프롬프트 필드(name, object_prompt, texture_prompt 등)와 단일 model_url, texture_urls는 분할 작업에서는 채워지지 않으며 반환되지 않습니다. 작업이 진행되며 채워지는 속성들(thumbnail_url, model_urls, 타임스탬프들)은 항상 존재하며, 값이 생기기 전까지는 비어 있으므로 PENDING과 SUCCEEDED 사이에 키 집합이 달라지지 않습니다.

  • Name
    id
    Type
    string
    Description

    작업의 고유 식별자입니다. 구현 세부사항으로 작업 id에는 k-정렬 가능한 UUID를 사용하지만, id의 형식에 대해 어떠한 가정도 하지 말아야 합니다.

  • Name
    type
    Type
    string
    Description

    작업의 유형입니다. 값은 print-split입니다.

  • Name
    model_urls
    Type
    object
    Description

    요청한 형식마다 하나씩 제공되는, 분할된 모델의 다운로드 가능한 URL입니다. 씬 객체를 지원하는 형식은 각 파트를 개별 객체로 유지하며, stl은 이를 하나의 솔리드로 합칩니다. 요청하지 않은 형식의 속성은 생략됩니다.

    • Name
      glb
      Type
      string
      Description

      GLB 형식의 분할된 모델에 대한 다운로드 가능한 URL입니다.

    • Name
      obj
      Type
      string
      Description

      OBJ 형식의 분할된 모델에 대한 다운로드 가능한 URL입니다.

    • Name
      fbx
      Type
      string
      Description

      FBX 형식의 분할된 모델에 대한 다운로드 가능한 URL입니다.

    • Name
      stl
      Type
      string
      Description

      STL 형식의 분할된 모델에 대한 다운로드 가능한 URL입니다. 모든 파트가 하나의 솔리드로 합쳐집니다. 개별적으로 선택 가능한 파트가 필요하면 3mf를 요청하세요.

    • Name
      usdz
      Type
      string
      Description

      USDZ 형식의 분할된 모델에 대한 다운로드 가능한 URL입니다.

    • Name
      blend
      Type
      string
      Description

      Blender 형식의 분할된 모델에 대한 다운로드 가능한 URL입니다.

    • Name
      3mf
      Type
      string
      Description

      3MF 형식의 분할된 모델에 대한 다운로드 가능한 URL입니다.

  • Name
    thumbnail_url
    Type
    string
    Description

    요청한 layout으로, 각 파트가 서로 다른 색상으로 표시된 분할 모델의 렌더링된 미리보기에 대한 다운로드 가능한 URL입니다.

  • Name
    prompt_ignored
    Type
    boolean
    Description

    by_parts 또는 by_color 요청의 prompt가 어떤 파트도 지정하지 않아 Meshy가 대신 모델을 자동으로 분할한 경우 true입니다 — 이 경우 결과의 파트 이름은 사용자가 지정한 것이 아니라 Meshy가 지정한 것입니다. PENDING 상태부터 존재합니다. auto 작업이거나 프롬프트가 그대로 따라진 경우에는 생략됩니다.

  • Name
    part_count
    Type
    integer
    Description

    분할로 생성된 출력 가능한 파트의 수입니다. 씬 객체를 지원하는 형식은 파트마다 하나의 객체를 포함하며, stl은 이들을 하나의 솔리드로 합치지만 개수는 여전히 파트 수를 보고합니다. 세그멘테이션이 출력 가능한 조각으로 만들지 못한, 찌그러진 조각들은 내보내기 전에 파일에서 제거되며 개수에 포함되지 않습니다.

  • Name
    progress
    Type
    integer
    Description

    작업의 progress입니다. 작업이 아직 시작되지 않은 경우 이 속성은 0입니다. 작업이 성공하면 100이 됩니다.

  • Name
    status
    Type
    string
    Description

    작업의 상태입니다. 가능한 값은 PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED 중 하나입니다.

  • Name
    preceding_tasks
    Type
    integer
    Description

    선행 작업의 수입니다.

  • Name
    created_at
    Type
    timestamp
    Description

    작업이 생성된 시각의 타임스탬프로, 밀리초 단위입니다.

  • Name
    started_at
    Type
    timestamp
    Description

    작업이 시작된 시각의 타임스탬프로, 밀리초 단위입니다. 작업이 아직 시작되지 않은 경우 이 속성은 0입니다.

  • Name
    finished_at
    Type
    timestamp
    Description

    작업이 완료된 시각의 타임스탬프로, 밀리초 단위입니다. 작업이 아직 완료되지 않은 경우 이 속성은 0입니다.

  • Name
    task_error
    Type
    object
    Description

    실패한 작업에 대한 오류 세부정보입니다. task_error 객체의 전체 참조는 오류를 참조하세요.

  • Name
    consumed_credits
    Type
    integer
    Description

    이 작업에서 소비된 크레딧 수입니다. 항상 존재하며, 작업이 수락되면 10이고, 실패 시에는 요금이 환불되므로 FAILED 작업의 경우 0입니다. 작업이 아직 PENDING인 상태에서 삭제되어도 환불됩니다.

The Auto Split Task Object

{
  "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
  "type": "print-split",
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
    "obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
  "part_count": 4,
  "progress": 100,
  "status": "SUCCEEDED",
  "preceding_tasks": 0,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000082000,
  "task_error": null,
  "consumed_credits": 10
}