lowpoly retires Oct 30, 2026. Please switch models before these dates to avoid request errors.

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.


POST/openapi/v1/print/multi-color

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

POST
/openapi/v1/print/multi-color
# 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 status SUCCEEDED.

    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 uses input_task_id.

    An http or https URL must point to a .glb or .fbx file of at most 400 MB. A data URI must hold a base64 GLB file of at most 100 MB. Use data:model/gltf-binary;base64,. Send an .fbx file as an http or https URL.

    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 1 to 16. To use the default, leave it out rather than sending 0.

  • 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. realistic needs a single base color texture, with UVs on every mesh part, and cartoon also accepts vertex colors. Meshy rejects an untextured (white) model. See model_missing_texture.

  • Name
    max_depth
    Type
    integer
    default 4
    Description

    The subdivision depth Meshy uses to sample texture colors onto the mesh, from 3 to 6. 0 is the same as leaving it out. Higher values capture finer color detail, and make a larger file. Only the realistic style uses it, and cartoon ignores 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:

    • bambu
    • anycubic
    • creality
    • elegoo
    • flashforge
    • prusa
    • qidi
    • snapmaker
    • ankermake

    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_url nor input_task_id was sent.
    • Invalid model format: The model_url file isn't a .glb or .fbx file.
    • Unreachable URL: Meshy can't download the model_url file.
    • Model file too large: The model_url file is over 400 MB from an http or https URL, or over 100 MB as a data URI.
    • Too many faces: The model_url file 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_url file is an ASCII FBX over 100 MB. Send it as binary FBX or GLB.
    • Unreadable model file: The model_url file 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_url file 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_id isn't a successful task.
    • Too many faces in the input task: The input_task_id model 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_colors is negative or over 16.
    • Invalid style: style isn't realistic or cartoon.
    • Invalid max_depth: max_depth is outside 3 to 6, and isn't 0.
    • Invalid printer_brand: printer_brand isn't one of its available values.
    • No color source: The model lacks the color that style needs. realistic needs a single base color texture, with UVs, on every mesh part. cartoon accepts a base color texture or vertex colors. Texture the model first, or use cartoon for a model with vertex colors. Meshy checks an .fbx upload only after the task normalizes it, so the task fails with model_missing_texture instead.

    Fix the request, then send it again. See Errors.

  • Name
    401 - Unauthorized
    Description

    The API key is missing or invalid. Check the Authorization header.

  • 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_id is a bas-relief model, which this endpoint can't print. The message is This model type does not support this operation. Send a different model.

  • Name
    404 - Not Found
    Description

    input_task_id doesn'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/openapi/v1/print/multi-color/:id

Get a Multi-Color Print task

Returns a Multi-Color Print task by its ID.

Request

GET
/openapi/v1/print/multi-color/a43b5c6d-7e8f-901a-234b-567c890d1e2f
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

The Multi-Color Print task object.


DELETE/openapi/v1/print/multi-color/:id

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

DELETE
/openapi/v1/print/multi-color/a43b5c6d-7e8f-901a-234b-567c890d1e2f
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.


GET/openapi/v1/print/multi-color

List Multi-Color Print tasks

Returns a list of your Multi-Color Print tasks.

Request

GET
/openapi/v1/print/multi-color
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.


GET/openapi/v1/print/multi-color/:id/stream

Stream a Multi-Color Print task

Streams a Multi-Color Print task's updates as Server-Sent Events (SSE).

Request

GET
/openapi/v1/print/multi-color/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream
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 0 until the task starts and 100 when it succeeds.

  • Name
    status
    Type
    string
    Description

    The task status, one of PENDING, IN_PROGRESS, SUCCEEDED, or FAILED.

  • 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 0 until the task starts.

  • Name
    finished_at
    Type
    timestamp
    Description

    Time the task finished, in Unix milliseconds. It's 0 until 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, or SUCCEEDED. It's 0 for a FAILED task, because Meshy refunds the credits when a task fails.