Auto Split API
Split a 3D model into separately printable parts — automatically, by the parts you name, or by color region — with optional connectors; thin regions left by a cut are always reinforced so every part prints solid.
Auto Split currently supports untextured models only. For Image to 3D and Multi-Image to 3D, generate the input with should_texture set to false. A textured input is rejected with 400. Textured support is in progress.
Create an Auto Split Task
This endpoint creates a new Auto Split task. The task cuts the model of a previous task into separately printable parts and returns the segmented model, with every part as its own object in the file.
Parameters
- Name
- input_task_id
- Type
- string
- Required
- Description
The ID of a succeeded task whose model to split. Supported task types: Image to 3D, Multi-Image to 3D, Text to 3D (preview), Remesh, Convert, and Resize. The task must have a status of
SUCCEEDED, and its model must be generated with Meshy 6 or Meshy 7 (ai_modelmeshy-6,meshy-7, orlatest). Low-poly and Smart Topology (meshy-t2) models are not supported.
- Name
- mode
- Type
- string
- default auto
- Description
How the model is divided into parts.
Available values:
auto: Meshy chooses the cuts.promptis ignored.by_parts: Cut along the structural parts you name inprompt, such as head, arms, and torso.by_color: Cut along the color regions you name inprompt. Requires an input generated from an uploaded image (Image to 3D or Multi-Image to 3D); other inputs are rejected with400.
mode = by_parts or by_color- Name
- prompt
- Type
- string
- Required
- Description
Describes the parts to split into, in any language. Meshy reads 1 to 10 part names from it, so name the pieces rather than describing the model — for example
split into the figure and the base, orhead, torso, left arm, right arm, legs. Up to 600 characters. Two failure modes: a description that reads as a split but names fewer than two parts (for examplesplit into individual parts) is rejected with400and nothing is charged; a description Meshy cannot read at all falls back toauto, the task still runs and is charged, and its response carriesprompt_ignored: true.
- Name
- target_formats
- Type
- array
- default ["glb"]
- Description
Formats to export the split model in. Each part is a separate object in every format.
glbis always produced and returned inmodel_urls; list any other formats you want in addition.Available values:
glb,obj,fbx,usdz,blend,3mf.3mfis written for slicers: one object per part, each on its own filament slot, so Bambu Studio opens the file as individually coloured, separately selectable parts (the archive carries a Bambu Studio project configuration; other slicers read the geometry). Like Meshy's other print formats it is in millimetres and, because this endpoint takes no target size, the whole model is scaled so its longest side is 150 mm — the same cap the other print-format exports use, chosen to fit every mainstream build plate. Withlayout: "on_plate"the cap applies to the laid-out plate as a whole, so the file is ready to slice; withassembled, the parts sit where the source model had them and you arrange them in the slicer.stlis not supported because the format cannot carry separate parts.
- Name
- layout
- Type
- string
- default assembled
- Description
How the parts are arranged in every output format, and in the thumbnail.
Available values:
assembled: Parts stay where the source model had them.on_plate: Parts are laid flat and spread out on the build plate, ready to slice — the same arrangement as the web app's On Plate view.
In both layouts the exported files hold one object per part and nothing else: a collapsed sliver or point-like piece left over from a cut is removed before export, so every object you find in the file is printable.
- Name
- connectors
- Type
- boolean
- default false
- Description
Adds mortise-and-tenon connectors at each cut so the printed parts fit together.
connectors = true- Name
- connector_type
- Type
- string
- default cube
- Description
The shape of the connector at each cut surface.
Available values:
cube,cylinder.
- Name
- connector_size
- Type
- number
- default 0.5
- Description
Connector size relative to the cut surface.
Valid range:
0.1to0.8.
- Name
- connector_height
- Type
- number
- default 0.1
- Description
How far the connector extends from the cut surface, relative to the cut surface.
Valid range:
0.1to0.8.
Returns
The result property of the response contains the id of the newly created Auto Split task.
Failure Modes
- Name
400 - Bad Request- Description
The request was unacceptable. Common causes:
- Missing prompt:
promptis required whenmodeisby_partsorby_color. - Prompt names fewer than two parts:
by_parts/by_colorneeds at least two named pieces (for examplehead, torso, base); a generic instruction such assplit into individual partsis rejected. Nothing is charged. - Unsupported input task: The
input_task_idmust refer to a succeeded task of a supported type, generated with Meshy 6 or Meshy 7. - Textured input: The input model has textures. Only untextured models are supported for now.
- No reference image:
by_colorrequires an input generated from an uploaded image. - Unsupported format:
target_formatscontainsstl. - Out-of-range connector:
connector_sizeorconnector_heightis outside0.1to0.8.
- Missing prompt:
- Name
401 - Unauthorized- Description
Authentication failed. Please check your API key.
- Name
402 - Payment Required- Description
Insufficient credits to perform this task.
- Name
404 - Not Found- Description
The
input_task_iddoes not exist or does not belong to your account.
- Name
429 - Too Many Requests- Description
You have exceeded your rate limit.
by_partsandby_colorrequests also share a prompt-parsing limit of 12 requests per minute per account.
- Name
503 - Service Unavailable- Description
Prompt-based splitting (
by_partsandby_color) is temporarily unavailable. Retry later, or usemode: "auto", which is unaffected. Nothing is charged.
Request
# 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"
}
Retrieve an Auto Split Task
This endpoint retrieves an Auto Split task by its ID.
Parameters
- Name
- id
- Type
- path
- Description
The ID of the Auto Split task to retrieve.
Returns
The Auto Split Task object.
Request
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 an Auto Split Task
This endpoint permanently deletes an Auto Split task, including all associated models and data. This action is irreversible.
Path Parameters
- Name
- id
- Type
- path
- Description
The ID of the Auto Split task to delete.
Returns
Returns 200 OK on success.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
// Returns 200 Ok on success.
List Auto Split Tasks
This endpoint allows you to retrieve a list of Auto Split tasks.
Parameters
Optional attributes
- Name
- page_num
- Type
- integer
- Description
Page number for pagination. Starts and defaults to
1.
- Name
- page_size
- Type
- integer
- Description
Page size limit. Defaults to
10items. Maximum allowed is100items; larger values are clamped to100.
- Name
- sort_by
- Type
- string
- Description
Field to sort by. Available values:
+created_at: Sort by creation time in ascending order.-created_at: Sort by creation time in descending order.
Returns
Returns a paginated list of The Auto Split Task Objects.
Request
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
}
]
Stream an Auto Split Task
This endpoint streams real-time updates for an Auto Split task using Server-Sent Events (SSE).
Parameters
- Name
- id
- Type
- path
- Description
Unique identifier for the Auto Split task to stream.
Returns
Returns a stream of The Auto Split Task Objects as Server-Sent Events.
Every message event carries the full task object as returned by Retrieve an Auto Split Task, including consumed_credits, the timestamps and prompt_ignored; while the task is PENDING or IN_PROGRESS the fields that change between frames are progress, status, started_at and preceding_tasks, and model_urls, thumbnail_url, part_count and parts appear once it reaches SUCCEEDED. An error event carries only status_code and message, so branch on the event name before reading status.
Request
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
An Auto Split task carries only the properties below. The generation-prompt fields other task objects include (name, object_prompt, texture_prompt and so on), the single model_url, and texture_urls are never populated for a split and are not returned. Properties that fill in as the task runs (thumbnail_url, model_urls, the timestamps) are always present, empty until they have a value, so the set of keys does not change between PENDING and SUCCEEDED.
- Name
- id
- Type
- string
- Description
Unique identifier for the task. While we use a k-sortable UUID for task ids as the implementation detail, you should not make any assumptions about the format of the id.
- Name
- type
- Type
- string
- Description
Type of the task. The value is
print-split.
- Name
- model_urls
- Type
- object
- Description
Downloadable URLs to the split model, one per requested format. Every part is a separate object in the file. The property for a format will be omitted if the format was not requested.
- Name
glb- Type
- string
- Description
Downloadable URL to the split model in GLB format.
- Name
obj- Type
- string
- Description
Downloadable URL to the split model in OBJ format.
- Name
fbx- Type
- string
- Description
Downloadable URL to the split model in FBX format.
- Name
usdz- Type
- string
- Description
Downloadable URL to the split model in USDZ format.
- Name
blend- Type
- string
- Description
Downloadable URL to the split model in Blender format.
- Name
3mf- Type
- string
- Description
Downloadable URL to the split model in 3MF format: one object per part, each on its own filament slot, in millimetres, scaled so the longest side is 150 mm, with a Bambu Studio project configuration.
- Name
- thumbnail_url
- Type
- string
- Description
Downloadable URL to a rendered preview of the split model, with each part in a distinct color, in the requested
layout.
- Name
- prompt_ignored
- Type
- boolean
- Description
truewhen aby_partsorby_colorrequest'spromptnamed no parts, so Meshy split the model automatically instead — the part names in the result are Meshy's, not yours. Present fromPENDINGon. Omitted forautotasks and whenever the prompt was followed.
- Name
- part_count
- Type
- integer
- Description
Number of printable parts in the split model — one per object in the exported files. Collapsed slivers that the segmentation could not turn into a printable piece are removed from the files before export and are not counted.
- Name
- progress
- Type
- integer
- Description
Progress of the task. If the task is not started yet, this property will be
0. Once the task has succeeded, this will become100.
- Name
- status
- Type
- string
- Description
Status of the task. Possible values are one of
PENDING,IN_PROGRESS,SUCCEEDED,FAILED,CANCELED.
- Name
- preceding_tasks
- Type
- integer
- Description
The count of preceding tasks.
The value of this field is meaningful only if the task status is
PENDING.
- Name
- created_at
- Type
- timestamp
- Description
Timestamp of when the task was created, in milliseconds.
- Name
- started_at
- Type
- timestamp
- Description
Timestamp of when the task was started, in milliseconds. If the task is not started yet, this property will be
0.
- Name
- finished_at
- Type
- timestamp
- Description
Timestamp of when the task was finished, in milliseconds. If the task is not finished yet, this property will be
0.
- Name
- task_error
- Type
- object
- Description
Error details for failed tasks. See Errors for the full
task_errorobject reference.
- Name
- consumed_credits
- Type
- integer
- Description
The number of credits consumed by this task. Always present:
10once the task has been accepted, and0forFAILEDtasks because the charge is refunded on failure. Deleting a task while it is stillPENDINGalso refunds it.
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
}