Auto Split API

Разделите 3D-модель на отдельно печатаемые части — автоматически, по частям, которые вы называете, или по цветовым областям — с опциональными соединителями; тонкие участки, оставшиеся после разреза, всегда усиливаются, чтобы каждая часть печаталась цельной.


POST/openapi/v1/print/split

Создание задачи Auto Split

Этот эндпоинт создаёт новую задачу Auto Split. Задача разрезает модель предыдущей задачи на отдельно печатаемые части и возвращает сегментированную модель, где каждая часть представлена как отдельный объект в файле.

Параметры

  • Name
    input_task_id
    Type
    string
    Обязательный
    Description

    ID успешно завершённой задачи, чью модель нужно разделить. Поддерживаемые типы задач: Изображение в 3D, Мульти-изображение в 3D, Текст в 3D (превью), Ремешинг, Конвертировать и Изменить размер. Задача должна иметь статус 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

    Добавляет соединители типа «шип-паз» в каждом месте разреза, чтобы напечатанные части можно было соединить друг с другом.

Применяется только когда 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 ответа содержит id вновь созданной задачи Auto Split.

Режимы сбоя

  • Name
    400 - Bad Request
    Description

    Запрос был некорректным. Распространённые причины:

    • Отсутствует prompt: prompt обязателен, когда mode равно by_parts или by_color.
    • 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 также имеют общее ограничение на разбор prompt — 12 запросов в минуту на аккаунт.

  • 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

Этот эндпоинт получает задачу Auto Split по её ID.

Параметры

  • Name
    id
    Type
    path
    Description

    ID задачи Auto Split, которую нужно получить.

Возвращает

Объект задачи Auto Split.

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

    ID задачи Auto Split, которую нужно удалить.

Статус задачи

Задача, которая всё ещё находится в статусе PENDING, удаляется, а кредиты, списанные при создании, возвращаются.

Задачу, которая уже находится в статусе IN_PROGRESS, удалить нельзя: запрос отклоняется с ошибкой 409 Conflict, и задача продолжает выполняться. Кредиты за задачу, которую воркер уже начал выполнять, не возвращаются, поэтому удаление в процессе выполнения обойдётся вам одновременно и потерей кредитов, и потерей результата. Дождитесь, пока она перейдёт в статус SUCCEEDED, FAILED или CANCELED, а затем удалите её.

Задача в конечном состоянии (SUCCEEDED, FAILED или CANCELED) удаляется без возврата средств.

Возвращает

Возвращает 200 OK при успехе, либо 409 Conflict, если задача находится в статусе IN_PROGRESS.

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, которое также является значением по умолчанию.

  • 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

Этот эндпоинт передаёт обновления в реальном времени для задачи Auto Split с помощью Server-Sent Events (SSE).

Параметры

  • Name
    id
    Type
    path
    Description

    Уникальный идентификатор задачи Auto Split, для которой запрашивается стрим.

Возвращает

Возвращает поток объектов задачи Auto Split в виде Server-Sent Events.

Каждое событие message содержит полный объект задачи, как он возвращается методом Получить задачу Auto Split, включая consumed_credits, временные метки и prompt_ignored; пока задача находится в статусе PENDING или IN_PROGRESS, между кадрами меняются поля progress, status, started_at и preceding_tasks, а поля model_urls, thumbnail_url и part_count появляются после перехода в статус SUCCEEDED. Событие 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
}

Объект задачи Auto Split

Задача Auto Split содержит только приведённые ниже свойства. Поля с prompt для генерации, которые есть в других объектах задач (name, object_prompt, texture_prompt и так далее), одно поле model_url и texture_urls для разбиения никогда не заполняются и не возвращаются. Свойства, которые заполняются по мере выполнения задачи (thumbnail_url, model_urls, временные метки), присутствуют всегда, оставаясь пустыми до появления значения, поэтому набор ключей не меняется между PENDING и SUCCEEDED.

  • Name
    id
    Type
    string
    Description

    Уникальный идентификатор задачи. Хотя в качестве деталей реализации мы используем k-sortable UUID для идентификаторов задач, вам не следует делать каких-либо предположений о формате id.

  • Name
    type
    Type
    string
    Description

    Тип задачи. Значение — print-split.

  • Name
    model_urls
    Type
    object
    Description

    Ссылки для скачивания разбитой модели, по одной на каждый запрошенный формат. Форматы, поддерживающие объекты сцены, сохраняют каждую часть как отдельный объект; stl объединяет их в одно твёрдое тело. Свойство для формата будет отсутствовать, если этот формат не был запрошен.

    • Name
      glb
      Type
      string
      Description

      Ссылка для скачивания разбитой модели в формате GLB.

    • Name
      obj
      Type
      string
      Description

      Ссылка для скачивания разбитой модели в формате OBJ.

    • Name
      fbx
      Type
      string
      Description

      Ссылка для скачивания разбитой модели в формате FBX.

    • Name
      stl
      Type
      string
      Description

      Ссылка для скачивания разбитой модели в формате STL. Все части объединяются в одно твёрдое тело; запросите 3mf, если нужны отдельно выбираемые части.

    • Name
      usdz
      Type
      string
      Description

      Ссылка для скачивания разбитой модели в формате USDZ.

    • Name
      blend
      Type
      string
      Description

      Ссылка для скачивания разбитой модели в формате Blender.

    • Name
      3mf
      Type
      string
      Description

      Ссылка для скачивания разбитой модели в формате 3MF.

  • Name
    thumbnail_url
    Type
    string
    Description

    Ссылка для скачивания отрендеренного превью разбитой модели, где каждая часть выделена своим цветом, в запрошенной layout.

  • Name
    prompt_ignored
    Type
    boolean
    Description

    true, если в prompt запроса by_parts или by_color не были названы части, из-за чего Meshy выполнила разбиение модели автоматически — названия частей в результате принадлежат Meshy, а не вам. Присутствует начиная со статуса PENDING. Отсутствует для задач auto, а также во всех случаях, когда prompt был учтён.

  • Name
    part_count
    Type
    integer
    Description

    Количество печатаемых частей, полученных в результате разбиения. Форматы, поддерживающие объекты сцены, содержат по одному объекту на часть; stl объединяет их в одно твёрдое тело, при этом счётчик по-прежнему отражает количество частей. Схлопнувшиеся фрагменты, которые сегментация не смогла превратить в печатаемую деталь, удаляются из файлов перед экспортом и не учитываются в счётчике.

  • Name
    progress
    Type
    integer
    Description

    Прогресс выполнения задачи. Если задача ещё не началась, это свойство будет равно 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 после принятия задачи в обработку и 0 для задач со статусом FAILED, поскольку списание возвращается при неудаче. Удаление задачи, пока она ещё находится в статусе 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
}