Multi-Color Print API
Convert a 3D model into a multi-color 3MF file for 3D printing. Choose a palette of up to 16 colors and a slicer preset for your printer brand.
Create a Multi-Color Print task
Creates a Multi-Color Print task, which converts a 3D model into a multi-color 3MF file for 3D printing. The task runs in the background. For how long a task usually takes, see Processing times.
Request
# Convert a 3D model to a multi-color 3MF with a Creality slicer preset
curl https://api.meshy.ai/openapi/v1/print/multi-color \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"max_colors": 8,
"printer_brand": "creality"
}'
Response
{
"result": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
}
Parameters
- Name
- input_task_id
- Type
- string
- Required
- Description
Required unless you send
model_url. The ID of the task whose model you want to print, for example an Image to 3D, Multi-Image to 3D, Text to 3D, Remesh, or Retexture task. The task must be one you created with the API, and have the statusSUCCEEDED.Multi-Color Print reads the task's GLB file, which can have at most 8,000,000 faces. A model with more faces returns
400. In that case, run a Remesh task on it first, and send the Remesh task's ID instead.
- Name
- model_url
- Type
- string
- Required
- Description
Required unless you send
input_task_id. The model to print, as a public URL or a data URI. If you send both, Meshy usesinput_task_id.An
httporhttpsURL must point to a.glbor.fbxfile of at most 400 MB. A data URI must hold a base64 GLB file of at most 100 MB. Usedata:model/gltf-binary;base64,. Send an.fbxfile as anhttporhttpsURL.A file over 100 MB must also follow these rules:
- It can have at most 8,000,000 faces. Meshy counts faces as triangles, so a quad counts as 2, and a mesh drawn more than once counts once per copy.
- An FBX file must be binary FBX 7.1 or newer.
- A GLB file must not use Draco compression.
- Name
- max_colors
- Type
- integer
- default 4
- Description
The maximum number of colors in the output palette, from
1to16. To use the default, leave it out rather than sending0.
- Name
- style
- Type
- string
- default realistic
- Description
The color style of the 3MF file.
Available values:
realistic: samples colors directly from the model's texture for fine, photo-realistic detail, and makes a larger file.cartoon: flattens colors into clean, uniform regions for a stylized look, and makes a smaller file.
The model must have color.
realisticneeds a single base color texture, with UVs on every mesh part, andcartoonalso accepts vertex colors. Meshy rejects an untextured (white) model. Seemodel_missing_texture.
- Name
- max_depth
- Type
- integer
- default 4
- Description
The subdivision depth Meshy uses to sample texture colors onto the mesh, from
3to6.0is the same as leaving it out. Higher values capture finer color detail, and make a larger file. Only therealisticstyle uses it, andcartoonignores it.
- Name
- printer_brand
- Type
- string
- default bambu
- Description
The printer brand whose slicer preset Meshy writes into the 3MF file. The file then opens in that brand's slicer with a matching printer, filament, and process profile. The preset uses the brand's default printer, with a 0.4 mm nozzle.
Available values:
bambuanycubiccrealityelegooflashforgeprusaqidisnapmakerankermake
Any other value returns
400.
Returns
The result field of the response holds the ID of the new Multi-Color Print task.
Failure modes
- Name
400 - Bad Request- Description
The request can't run. The error message says which problem it found. For example:
- Missing parameter: Neither
model_urlnorinput_task_idwas sent. - Invalid model format: The
model_urlfile isn't a.glbor.fbxfile. - Unreachable URL: Meshy can't download the
model_urlfile. - Model file too large: The
model_urlfile is over 400 MB from anhttporhttpsURL, or over 100 MB as a data URI. - Too many faces: The
model_urlfile is over 100 MB and has more than 8,000,000 faces. Reduce the face count, then send the file again. - ASCII FBX over 100 MB: The
model_urlfile is an ASCII FBX over 100 MB. Send it as binary FBX or GLB. - Unreadable model file: The
model_urlfile is over 100 MB, and Meshy can't read its header. For example, it's a Draco-compressed GLB, or a binary FBX older than 7.1. - Model header too complex: The
model_urlfile is over 100 MB, and its header has too many meshes, nodes, or records to check. Reduce the number of objects in the file, then send it again. - Invalid input task:
input_task_idisn't a successful task. - Too many faces in the input task: The
input_task_idmodel has more than 8,000,000 faces. Run a Remesh task on it, then send the Remesh task's ID instead. - Invalid max_colors:
max_colorsis negative or over16. - Invalid style:
styleisn'trealisticorcartoon. - Invalid max_depth:
max_depthis outside3to6, and isn't0. - Invalid printer_brand:
printer_brandisn't one of its available values. - No color source: The model lacks the color that
styleneeds.realisticneeds a single base color texture, with UVs, on every mesh part.cartoonaccepts a base color texture or vertex colors. Texture the model first, or usecartoonfor a model with vertex colors. Meshy checks an.fbxupload only after the task normalizes it, so the task fails withmodel_missing_textureinstead.
Fix the request, then send it again. See Errors.
- Missing parameter: Neither
- Name
401 - Unauthorized- Description
The API key is missing or invalid. Check the
Authorizationheader.
- Name
402 - Payment Required- Description
For example:
- Insufficient credits: The account doesn't have enough credits for this task, or the account reached a credit limit. Check your credit balance, then retry.
- Free plan: Creating a task requires a paid plan. Upgrade your plan in your subscription settings, then retry.
- Name
403 - Forbidden- Description
input_task_idis a bas-relief model, which this endpoint can't print. The message isThis model type does not support this operation. Send a different model.
- Name
404 - Not Found- Description
input_task_iddoesn't match any of your tasks. Check the task ID, then send the request again.
- Name
429 - Too Many Requests- Description
You exceeded your rate limit. Wait, then retry. See Rate limits.
Get a Multi-Color Print task
Returns a Multi-Color Print task by its ID.
Request
curl https://api.meshy.ai/openapi/v1/print/multi-color/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "print-multi-color",
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.3mf?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
"consumed_credits": 10
}
Parameters
- Name
- id
- Type
- path
- Description
The task ID from the create response.
Returns
Delete a Multi-Color Print task
Permanently deletes a Multi-Color Print task, including its models and data. You can't undo a delete.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/print/multi-color/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 keeps 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."
}
Path parameters
- Name
- id
- Type
- path
- Description
The ID of the task to delete.
Task status
Deleting a PENDING task refunds the credits it used when you created it.
An IN_PROGRESS task can't be deleted. The request returns 409 Conflict,
and the task keeps running. Meshy doesn't refund a task that has started,
so deleting it would cost you both the credits and the result. Wait for it
to reach SUCCEEDED, FAILED, or CANCELED, then delete it.
Deleting a task in a final status (SUCCEEDED, FAILED, or CANCELED)
doesn't refund its credits.
Returns
200 OK when the task is deleted, or 409 Conflict when the task is
IN_PROGRESS.
List Multi-Color Print tasks
Returns a list of your Multi-Color Print tasks.
Request
curl https://api.meshy.ai/openapi/v1/print/multi-color?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
[
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "print-multi-color",
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.3mf?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
"consumed_credits": 10
}
]
Parameters
- Name
- page_num
- Type
- integer
- default 1
- Description
The page number to return. Page numbers start at
1.
- Name
- page_size
- Type
- integer
- default 10
- Description
The number of tasks per page, up to
100.
- Name
- sort_by
- Type
- string
- Description
The sort order.
Available values:
+created_at: oldest first-created_at: newest first
Returns
A paginated list of Multi-Color Print task objects.
Stream a Multi-Color Print task
Streams a Multi-Color Print task's updates as Server-Sent Events (SSE).
Request
curl -N https://api.meshy.ai/openapi/v1/print/multi-color/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.
// These examples are shortened. Each event holds 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-multi-color",
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/a43b5c6d-7e8f-901a-234b-567c890d1e2f/output/model.3mf?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
"consumed_credits": 10
}
Parameters
- Name
- id
- Type
- path
- Description
The task ID from the create response.
Returns
A stream of Multi-Color Print task objects as Server-Sent Events.
Each event holds the full task object, in the same shape the Get endpoint returns. While the task is PENDING or IN_PROGRESS, its result fields don't have values yet.
The Multi-Color Print task object
A Multi-Color Print task object describes one conversion of a 3D model to a multi-color 3MF file. It holds the status, the progress, and the 3MF file when the task succeeds.
The 3D Print Task Object
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "print-multi-color",
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.3mf?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
"consumed_credits": 10
}
- Name
- id
- Type
- string
- Description
The task ID. Treat it as an opaque string, and don't rely on its format.
- Name
- type
- Type
- string
- Description
The task type, always
print-multi-color.
- Name
- model_urls
- Type
- object
- Description
Download URLs for the printed model, one per file format. A format the task didn't generate has no key, rather than an empty string.
- Name
3mf- Type
- string
- Description
The multi-color 3MF file.
- Name
- progress
- Type
- integer
- Description
How much of the task is done, as a percentage. It's
0until the task starts and100when it succeeds.
- Name
- status
- Type
- string
- Description
The task status, one of
PENDING,IN_PROGRESS,SUCCEEDED, orFAILED.
- Name
- preceding_tasks
- Type
- integer
- Description
The number of tasks ahead of this one in the queue. The value is meaningful only while the task is
PENDING.
- Name
- created_at
- Type
- timestamp
- Description
Time the task was created, in Unix milliseconds.
- Name
- started_at
- Type
- timestamp
- Description
Time the task started, in Unix milliseconds. It's
0until the task starts.
- Name
- finished_at
- Type
- timestamp
- Description
Time the task finished, in Unix milliseconds. It's
0until the task finishes.
- Name
- task_error
- Type
- object
- Description
The error details when the task fails. See Errors.
- Name
- consumed_credits
- Type
- integer
- Description
The number of credits the task used. Present when the status is
PENDING,IN_PROGRESS, orSUCCEEDED. It's0for aFAILEDtask, because Meshy refunds the credits when a task fails.