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

Task lifecycle

Learn how a task moves from request to result, how long it usually takes, and how long your code should wait for it.


How a task runs

A create request returns a task ID without waiting for the task to run. The task then runs in the background, and you follow it in one of three ways: poll its GET endpoint, open its stream endpoint, or receive a webhook.

A create request starts a task in PENDING. A worker picks it up and it moves to IN_PROGRESS, where it spends most of its time. It ends in SUCCEEDED or FAILED, and a final status never changes.
Create request
PENDING
Waiting in the queue
IN_PROGRESS
Generating the result
SUCCEEDED
Download the result
FAILED
Credits refunded

The task records each step in its created_at, started_at, and finished_at fields.

The following table shows what your code should do at each status.

StatusWhat your code should do
PENDINGKeep waiting.
IN_PROGRESSTrack progress: the percentage of the work that's done, from 0 to 100.
SUCCEEDEDDownload the result. Meshy keeps the files for a limited time. See Asset retention.
FAILEDRead task_error, then fix the input or create a new task. See Errors.
CANCELEDStop waiting. The task won't produce a result. Only Creative Lab tasks use this status.

SUCCEEDED, FAILED, and CANCELED are final. After a task reaches one of them, its status never changes again.

From your code, it looks like this:

Create a task, then poll it until it finishes.
  1. Request: POST/image-to-3d

  2. Response: 202{ "result": "<task_id>" }task created

  3. Repeat every few seconds
    1. Request: GET/image-to-3d/<task_id>

    2. Response: 200{ "status": "IN_PROGRESS","progress": 45 }Retry-After: 5

  4. Request: GET/image-to-3d/<task_id>

  5. Response: 200{ "status": "SUCCEEDED","model_urls": { "glb": "…" } }

If your app stops waiting, the task keeps running. GET it later with the same task ID.

Processing times

The following tables show median times on production API traffic in September 2026.

A time runs from task creation to the final status. Nearly all of it is processing, because a task usually stays in PENDING for only a few seconds. When the queue is busy, tasks can wait longer before they start, and tasks on plans with a higher priority usually start sooner.

Times under 2 minutes are in seconds (s), and longer times are in minutes (min). Not supported means the API doesn't offer that option with that model.

3D generation

APIConfigurationmeshy-7.1 (latest)meshy-6meshy-6-litemeshy-t2
Text to 3D (Preview)Mesh only75 s90 s45 s10 s
Image to 3DMesh only75 s90 s40 s4 s
Mesh with 2K textures2 min3 min75 s60 s
Mesh with 4K textures2.5 min3.5 minNot supported80 s
Mesh with 8K textures3.5 min4 minNot supported2.5 min
Multi-Image to 3DMesh only65 s2 min30 sNot supported
Mesh with 2K textures2.5 min3.5 min85 sNot supported
Mesh with 4K textures3 min4 minNot supportedNot supported
Mesh with 8K textures3.5 min4.5 minNot supportedNot supported

For Image to 3D and Multi-Image to 3D, "Mesh only" means should_texture: false. These options and inputs change the time:

  • PBR maps (enable_pbr) add 30 to 60 seconds.
  • Ultra geometry (geometry_resolution: "2k" or "4k") adds up to 1 minute.
  • With the same settings, more complex input images take longer.

Texturing

APITexture resolutionTypical time
Text to 3D (Refine)2K or 4K80 s
8K3.5 min
Retexture2K55 s
4K90 s
8K2.5 min

Image generation

APInano-banananano-banana-2nano-banana-proGPT Image models
Text to Image20 s15 s25 s20 to 35 s
Image to Image40 s20 s30 s20 to 40 s

Rigging and Animation

APIConfigurationTypical time
Auto-RiggingAutomatic rigging40 s
AnimationPer request15 s
Text to Motionprime mode15 s
swift mode10 s

Post-processing

APITypical time
Remesh2 min
UV Unwrap35 s
Convert7 s
Resize15 s

3D printing

APIConfigurationTypical time
Analyze PrintabilityMesh checks only1 s
Mesh and thin-wall checks10 s
Multi-ColorPer request30 s
Repair PrintabilityMesh repair only10 s
Thin-wall check, walls kept20 s
Thin-wall check, walls thickened100 s
Auto SplitPer request70 s

On v2, Repair Printability and Analyze Printability always run the thin-wall check. On v1, they run it when you send a printer type or a print size.


How long to wait

The task keeps running even if your code stops waiting. If your request times out, your connection drops, or your stream closes, the task doesn't fail and isn't canceled.

  • Wait at least 60 minutes, counted from the task's created_at, before you stop waiting. If you stop earlier, you might miss a task that succeeds later. This happens mostly during busy periods.
  • Keep the task ID. You can get the task again at any time. If it still isn't final after 60 minutes, check it again later. If it stays that way, contact support.
  • Only FAILED means the task failed. Meshy refunds failed tasks automatically.

Use these values in your code:

SettingRecommended value
Create request (POST) timeout60 seconds
Create request (POST) timeout with a model_url file over 100 MB120 seconds. Meshy downloads the file before it responds.
Status request (GET) timeout30 seconds
Poll intervalThe Retry-After header, or 5 seconds if it's missing. Polls count toward your rate limit.
Failed status request (timeout, 429, or 5xx)Try again at the next poll. It doesn't mean the task failed.
Overall wait per taskAt least 60 minutes from created_at. Don't restart this count when you reconnect a stream.
StreamA stream can close before the task finishes. If it closes without a final status, reconnect or switch to polling.

For many tasks at once, use webhooks instead of polling each one. If a task's final event hasn't arrived after about twice its typical time, get the task from its GET endpoint.