Meshy 7 API, Meshy 6 API - AI 3D Model Generation API: Pricing, Documentation

by Meshy

Meshy 7 API is a professional-grade 3D generation interface designed to programmatically transform text prompts and 2D images into high-quality, production-ready 3D assets. Known for delivering sculpting-level detail, the system utilizes advanced neural geometry reconstruction to produce clean mesh topology, sharper hard-surface details, and lifelike organic forms. It offers comprehensive features such as automated AI texturing with PBR maps, automatic rigging and animation, and a low-poly mode optimized for real-time game engines. Supporting various industry-standard formats like OBJ, FBX, and GLB, this API enables developers to scale 3D content creation for game development, AR/VR experiences, and high-fidelity 3D printing workflows.

Get API Key
Meshy API

Models Version

WELCOME BONUS

Get $5 Free Credit on First Payment

No strings attached — add funds and get $5 bonus instantly

Claim Your $5 →

Meshy 7 API Documentation

Generate a textured 3D model in GLB format from a single image with Meshy 7. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the model.

POST https://gateway.pixazo.ai/meshy-7/v1/image-to-3d

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

Image to 3D - Meshy 7

Request Code

POST https://gateway.pixazo.ai/meshy-7/v1/image-to-3d
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/single.png",
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true
}
import requests

url = "https://gateway.pixazo.ai/meshy-7/v1/image-to-3d"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
  "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/single.png",
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true
}

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/meshy-7/v1/image-to-3d", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({
  "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/single.png",
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true
})
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/meshy-7/v1/image-to-3d' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/single.png", "topology": "triangle", "target_polycount": 30000, "symmetry_mode": "auto", "should_remesh": true, "should_texture": true}'

Output

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. 3D generation regularly runs for several minutes, so a Webhook is usually the better fit here.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (default) or sync (per-poll callbacks).

Example: enable Webhook

curl -X POST 'https://gateway.pixazo.ai/meshy-7/v1/image-to-3d' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/single.png", "topology": "triangle", "target_polycount": 30000, "symmetry_mode": "auto", "should_remesh": true, "should_texture": true}'

Callback Payload (success)

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "meshy-7",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.glb"
    ],
    "media_type": "model/gltf-binary"
  },
  "created_at": "2026-08-17T09:14:16.102Z",
  "completed_at": "2026-08-17T09:26:41.870Z"
}

Failure callback shape

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "meshy-7",
  "error": "Description of the failure"
}

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
image_urlYesstringImage URL or base64 data URISource image for the 3D model. Accepts .jpg, .jpeg and .png; AVIF and HEIF are converted automatically.
model_typeNostringstandardstandard, lowpolyMesh style. lowpoly produces cleaner, lower-polygon geometry — and when set, Meshy ignores topology, target_polycount and should_remesh.
topologyNostringtrianglequad, triangleMesh topology. quad suits smooth surfaces, triangle detailed geometry. Ignored when should_remesh is false.
target_polycountNointeger30000100300000Target polygon count of the generated mesh. Ignored when should_remesh is false.
symmetry_modeNostringautooff, auto, onSymmetry behaviour. off disables it, auto decides per object, on enforces it.
should_remeshNobooleantruetrue, falseRun the remesh phase. When false the raw triangular mesh is returned and both topology and target_polycount are ignored.
should_textureNobooleantruetrue, falseGenerate textures. Affects the price — see Pricing. Setting false returns an untextured mesh and costs less.
enable_pbrNobooleanfalsetrue, falseAlso generate PBR maps (metallic, roughness, normal) alongside base colour. Requires should_texture. Does not affect the price.
pose_modeNostring""a-pose, t-pose, ""Force the generated character into an A-pose or T-pose. Empty string applies no specific pose.
is_a_t_poseNobooleanfalsetrue, falseDeprecated — use pose_mode instead. Treats the input as already in T-pose.
texture_promptNostringUp to 600 charactersText prompt steering the texturing pass. Requires should_texture. Longer values are rejected with 400.
texture_image_urlNostringImage URL2D image steering the texturing pass. Requires should_texture.
enable_riggingNobooleanfalsetrue, falseAuto-rig the result as a humanoid character, including basic walk and run animations. Best on humanoid subjects. Adds $0.20 — see Pricing.
rigging_height_metersNonumber1.70.110 metresApproximate character height. Only read when enable_rigging is true.
enable_animationNobooleanfalsetrue, falseApply an animation preset. Requires enable_rigging — set on its own it has no effect and is not billed. Adds $0.12.
animation_action_idNointeger920696Meshy animation preset (0 is Idle). Only read when enable_animation is true; a value outside the range is rejected with 422.
enable_safety_checkerNobooleantruetrue, falseSafety-check the input images before processing.
ultra_modeNobooleanfalsetrue, falseHigher-fidelity geometry with finer surface detail. Affects the price — see Pricing.

Notes

should_texture and ultra_mode are the two price axes on this operation; enable_rigging and enable_animation add fixed amounts on top. enable_animation requires enable_rigging — sent alone it is ignored and not billed. Setting model_type to lowpoly silently overrides topology, target_polycount and should_remesh.

Example Request

{
  "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/single.png",
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true
}

Example Response

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks.

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — a missing or out-of-range parameter. The message names the field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
422Unprocessable entity — the provider rejected a value, e.g. an animation_action_id outside 0–696.
429Too many requests.
500Internal server error.

Retrieving Results

Poll the status endpoint with the request_id until status is COMPLETED (or ERROR), then download output.media_url. A 3D generation typically takes a few minutes, and considerably longer with rigging or animation enabled.

curl 'https://gateway.pixazo.ai/v2/requests/status/meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "meshy-7",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.glb"
    ],
    "media_type": "model/gltf-binary"
  },
  "created_at": "2026-08-17T09:14:16.102Z",
  "completed_at": "2026-08-17T09:26:41.870Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayOne URL, pointing at the generated .glb model.
output.media_typestringmodel/gltf-binary.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.

Meshy also produces OBJ, FBX and USDZ variants, a preview thumbnail and separate texture files. This API returns the GLB only — it is the single self-contained file that carries mesh, materials and textures together, and it is what the console preview renders.

Status Values & Flow

QUEUEDPROCESSINGCOMPLETED (success) or ERROR (failure).

Pricing

Billed per generation. The base rate depends on the options below; add-ons are then added on top.

OptionsResultPrice
should_texture: falseUntextured mesh$0.80
defaultTextured model$1.20
ultra_mode: trueUltra-quality textured model$1.40

Add-ons, charged on top of the base rate: enable_rigging +$0.20, enable_animation +$0.12. Animation requires rigging, so the two together add $0.32.

Failed requests are not billed.

Meshy 7 API Pricing

Base rate depends on texturing and ultra mode; auto-rigging adds $0.20 and animation adds $0.12.

OptionPrice (USD)
Textured (default)$1.20
No texture$0.80
Ultra mode$1.40
Auto-rigging add-on (additional)$0.20
Animation add-on (additional)$0.12
Image to Image (3D Models — Multi-Image to 3D)

Meshy 7 API Documentation

Generate a textured 3D model in GLB format from up to four images of the same object photographed from different angles, with Meshy 7. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the model.

POST https://gateway.pixazo.ai/meshy-7/v1/multi-image-to-3d

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

Multi Image to 3D - Meshy 7

Request Code

POST https://gateway.pixazo.ai/meshy-7/v1/multi-image-to-3d
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "image_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-2.png",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-3.png"
  ],
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true
}
import requests

url = "https://gateway.pixazo.ai/meshy-7/v1/multi-image-to-3d"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
  "image_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-2.png",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-3.png"
  ],
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true
}

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/meshy-7/v1/multi-image-to-3d", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({
  "image_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-2.png",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-3.png"
  ],
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true
})
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/meshy-7/v1/multi-image-to-3d' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{"image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png", "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-2.png", "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-3.png"], "topology": "triangle", "target_polycount": 30000, "symmetry_mode": "auto", "should_remesh": true, "should_texture": true}'

Output

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. 3D generation regularly runs for several minutes, so a Webhook is usually the better fit here.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (default) or sync (per-poll callbacks).

Example: enable Webhook

curl -X POST 'https://gateway.pixazo.ai/meshy-7/v1/multi-image-to-3d' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{"image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png", "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-2.png", "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-3.png"], "topology": "triangle", "target_polycount": 30000, "symmetry_mode": "auto", "should_remesh": true, "should_texture": true}'

Callback Payload (success)

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "meshy-7",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.glb"
    ],
    "media_type": "model/gltf-binary"
  },
  "created_at": "2026-08-17T09:14:16.102Z",
  "completed_at": "2026-08-17T09:26:41.870Z"
}

Failure callback shape

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "meshy-7",
  "error": "Description of the failure"
}

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
image_urlsYesarray of string1–4 image URLsBetween one and four images of the same object from different angles. Accepts .jpg, .jpeg and .png; AVIF and HEIF are converted automatically. Sending more than four is rejected with 400, not silently truncated.
topologyNostringtrianglequad, triangleMesh topology. quad suits smooth surfaces, triangle detailed geometry. Ignored when should_remesh is false.
target_polycountNointeger30000100300000Target polygon count of the generated mesh. Ignored when should_remesh is false.
symmetry_modeNostringautooff, auto, onSymmetry behaviour. off disables it, auto decides per object, on enforces it.
should_remeshNobooleantruetrue, falseRun the remesh phase. When false the raw triangular mesh is returned and both topology and target_polycount are ignored.
should_textureNobooleantruetrue, falseGenerate textures. Affects the price — see Pricing. On this operation an untextured model is billed at the same rate as a textured one.
enable_pbrNobooleanfalsetrue, falseAlso generate PBR maps (metallic, roughness, normal) alongside base colour. Requires should_texture. Does not affect the price.
pose_modeNostring""a-pose, t-pose, ""Force the generated character into an A-pose or T-pose. Empty string applies no specific pose.
is_a_t_poseNobooleanfalsetrue, falseDeprecated — use pose_mode instead. Treats the input as already in T-pose.
texture_promptNostringUp to 600 charactersText prompt steering the texturing pass. Requires should_texture. Longer values are rejected with 400.
texture_image_urlNostringImage URL2D image steering the texturing pass. Requires should_texture.
enable_riggingNobooleanfalsetrue, falseAuto-rig the result as a humanoid character, including basic walk and run animations. Best on humanoid subjects. Adds $0.20 — see Pricing.
rigging_height_metersNonumber1.70.110 metresApproximate character height. Only read when enable_rigging is true.
enable_animationNobooleanfalsetrue, falseApply an animation preset. Requires enable_rigging — set on its own it has no effect and is not billed. Adds $0.12.
animation_action_idNointeger920696Meshy animation preset (0 is Idle). Only read when enable_animation is true; a value outside the range is rejected with 422.
enable_safety_checkerNobooleantruetrue, falseSafety-check the input images before processing.
ultra_modeNobooleanfalsetrue, falseHigher-fidelity geometry with finer surface detail. Affects the price — see Pricing. Charged only when you send it explicitly; omit it and the standard rate applies.

Notes

model_type is not available on this operation — it exists only on the single-image /image-to-3d endpoint, and sending it here has no effect and does not change the price. enable_animation requires enable_rigging; sent alone it is ignored and not billed. All input images must show the same object, or the reconstruction degrades badly.

Example Request

{
  "image_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-2.png",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-3.png"
  ],
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true
}

Example Response

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks.

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — a missing or out-of-range parameter. The message names the field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
422Unprocessable entity — the provider rejected a value, e.g. an animation_action_id outside 0–696.
429Too many requests.
500Internal server error.

Retrieving Results

Poll the status endpoint with the request_id until status is COMPLETED (or ERROR), then download output.media_url. A 3D generation typically takes a few minutes, and considerably longer with rigging or animation enabled.

curl 'https://gateway.pixazo.ai/v2/requests/status/meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "meshy-7_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "meshy-7",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.glb"
    ],
    "media_type": "model/gltf-binary"
  },
  "created_at": "2026-08-17T09:14:16.102Z",
  "completed_at": "2026-08-17T09:26:41.870Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayOne URL, pointing at the generated .glb model.
output.media_typestringmodel/gltf-binary.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.

Meshy also produces OBJ, FBX and USDZ variants, a preview thumbnail and separate texture files. This API returns the GLB only — it is the single self-contained file that carries mesh, materials and textures together, and it is what the console preview renders.

Status Values & Flow

QUEUEDPROCESSINGCOMPLETED (success) or ERROR (failure).

Pricing

Billed per generation. The base rate depends on the options below; add-ons are then added on top.

OptionsResultPrice
defaultTextured model$1.20
should_texture: falseUntextured mesh — billed at the textured rate$1.20
ultra_mode: trueUltra-quality textured model$1.40

Add-ons, charged on top of the base rate: enable_rigging +$0.20, enable_animation +$0.12. Animation requires rigging, so the two together add $0.32.

Failed requests are not billed.

Meshy 7 API Pricing

Base rate depends on ultra mode; auto-rigging adds $0.20 and animation adds $0.12.

OptionPrice (USD)
Textured (default)$1.20
Ultra mode$1.40
Auto-rigging add-on (additional)$0.20
Animation add-on (additional)$0.12
2. Meshy 6

Meshy 6 API Documentation

https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request

Authentication

All requests require an API key passed via header.

Header Type Required Description
Ocp-Apim-Subscription-Key string Yes Your API subscription key

Meshy 6 (Text to 3D) generate request - Meshy 6 (Text to 3D)

Request Code

POST https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork",
  "mode": "full",
  "topology": "triangle",
  "target_polycount": 30000,
  "should_remesh": true,
  "symmetry_mode": "auto",
  "rigging_height_meters": 1.7,
  "animation_action_id": 92,
  "enable_safety_checker": true
}
import requests

url = "https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork",
    "mode": "full",
    "topology": "triangle",
    "target_polycount": 30000,
    "should_remesh": true,
    "symmetry_mode": "auto",
    "rigging_height_meters": 1.7,
    "animation_action_id": 92,
    "enable_safety_checker": true
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
const url = "https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request";

const headers = {
  "Content-Type": "application/json",
  "Cache-Control": "no-cache",
  "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};

const data = {
  prompt: "A rustic antique wooden treasure chest with iron bands and ornate metalwork",
  mode: "full",
  topology: "triangle",
  target_polycount: 30000,
  should_remesh: true,
  symmetry_mode: "auto",
  rigging_height_meters: 1.7,
  animation_action_id: 92,
  enable_safety_checker: true
};

fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork",
    "mode": "full",
    "topology": "triangle",
    "target_polycount": 30000,
    "should_remesh": true,
    "symmetry_mode": "auto",
    "rigging_height_meters": 1.7,
    "animation_action_id": 92,
    "enable_safety_checker": true
  }'

Output

{
  "request_id": "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Parameters - Meshy 6 (Text to 3D) generate request

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringMax 600 charactersDescription of the 3D object. Maximum 600 characters.
modeNoenum"full"preview, fullGeneration mode. "preview" returns untextured geometry only; "full" runs preview + refine and returns a fully textured model (required for the texture, PBR and rigging options).
seedNointegerRandom seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time.
model_typeNoenum"standard"standard, lowpolyType of 3D mesh generation. "standard" produces a regular high-detail mesh; "lowpoly" produces a low-poly mesh optimized for cleaner geometry with fewer polygons.
topologyNoenum"triangle"quad, triangleMesh topology type. Quad for smooth surfaces, triangle for detailed geometry.
target_polycountNointeger30000100–300000The desired number of polygons in the generated 3D model. Higher values give a more detailed, heavier mesh; lower values give a simpler, lighter one.
should_remeshNobooleantruetrue, falseRebuilds the model's surface grid for cleaner geometry. When off, returns the raw, unoptimized triangular mesh.
symmetry_modeNoenum"auto"off, auto, onSymmetry enforcement mode. "off" disables symmetry, "auto" decides automatically, "on" enforces symmetry.
enable_pbrNobooleanfalsetrue, falseGenerates realistic surface materials (PBR: metallic, roughness, normal maps) so the model reacts properly to light. Only available in full mode.
pose_modeNoenum""a-pose, t-pose, "" (empty)Character pose for rigging. "a-pose" generates an A-pose, "t-pose" a T-pose; empty string for no specific pose.
enable_prompt_expansionNobooleanfalsetrue, falseAutomatically rewrites and enriches your prompt with extra detail before generation to improve results.
texture_promptNostringMax 600 charactersAdditional prompt to guide texturing. Only used in full mode.
texture_image_urlNostringURL to a 2D image used to guide texturing. Only used in full mode.
enable_riggingNobooleanfalsetrue, falseAuto-rig the generated model as a humanoid character, including basic walking and running animations.
rigging_height_metersNofloat1.7Approximate height of the rigged character in meters. Only used when enable_rigging is true.
enable_animationNobooleanfalsetrue, falseApply a predefined animation preset. Requires enable_rigging to be true.
animation_action_idNointeger920–696Animation preset ID from Meshy's library. Only used when enable_animation is true. See https://docs.meshy.ai/en/api/animation-library.
enable_safety_checkerNobooleantruetrue, falseTurns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it.

Content Item Types & Limits

TypeMaxFormat / SizeDescription
image1JPG, PNG, WEBPOptional texture-guidance image (1024px+).

Minimum Request

{
  "prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork"
}

Full Request (all options)

{
  "prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork",
  "mode": "full",
  "seed": 12345,
  "topology": "triangle",
  "target_polycount": 30000,
  "should_remesh": true,
  "symmetry_mode": "auto",
  "enable_pbr": true,
  "pose_mode": "t-pose",
  "enable_prompt_expansion": false,
  "texture_prompt": "Ancient wood with weathered patina and brass fittings",
  "texture_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
  "enable_rigging": true,
  "rigging_height_meters": 1.7,
  "enable_animation": true,
  "animation_action_id": 92,
  "enable_safety_checker": true
}

Response

{
  "request_id": "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Response Fields - Meshy 6 (Text to 3D) generate request

Field Type Description
request_idstringUnique identifier to track the job status
statusstringCurrent status of the job (QUEUED, PROCESSING, COMPLETED, FAILED, ERROR)
polling_urlstringURL to use for checking the status of the generated model

Request Headers

Header Value
Content-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYour API subscription key

Response Handling

Common status codes for Meshy 6 (Text to 3D) generate request.

Code Meaning
200 Success
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
Too Many Requests
500 Internal Server Error

Common Error Responses

400 Validation Error

{
  "error": "Invalid parameter: mode must be one of 'preview', 'full'"
}

404 Not Found

{
  "error": "Invalid request_id: meshy-6-text-to-3d_invalid_id"
}

Status Workflow

Status values and lifecycle for Meshy 6 (Text to 3D) requests.

Status Description
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

Submitted → QUEUED → PROCESSING → COMPLETED/FAILED/ERROR

Typical Workflow

  1. Submit request to /meshy-6-text-to-3d-request
  2. Receive request_id in response
  3. Poll /v2/requests/status/{request_id} every 2-3 seconds
  4. When status=COMPLETED, use model_glb and other URLs from response
  5. Handle FAILED or ERROR states with appropriate retry or error handling

Meshy 6 (Text to 3D) check status - Meshy 6 (Text to 3D)

Request Code

POST https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request-result
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "request_id": "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
import requests

url = "https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request-result"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "request_id": "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
const url = "https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request-result";

const headers = {
  "Content-Type": "application/json",
  "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};

const data = {
  request_id: "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
};

fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/meshy-6-text-to-3d/v1/meshy-6-text-to-3d-request-result" \
  -H "Content-Type: application/json" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "request_id": "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  }'

Output

{
  "model_glb": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.glb",
  "thumbnail": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/thumbnail.jpg",
  "model_urls": {
    "glb": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.glb",
    "fbx": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.fbx",
    "obj": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.obj",
    "usdz": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.usdz",
    "blend": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.blend",
    "stl": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.stl"
  },
  "texture_urls": {
    "base_color": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/base_color.jpg",
    "metallic": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/metallic.jpg",
    "roughness": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/roughness.jpg",
    "normal": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/normal.jpg"
  },
  "seed": 12345,
  "prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork",
  "actual_prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork, weathered with age, displaying intricate carvings and tarnished brass fittings"
}

Request Parameters - Meshy 6 (Text to 3D) check status

ParameterRequiredTypeDefaultAllowed values / rangeDescription
request_idYesstringUnique identifier returned from the initial request submission

Minimum Request

{
  "request_id": "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Full Request (all options)

{
  "request_id": "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Response

{
  "request_id": "meshy-6-text-to-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "meshy-6-text-to-3d",
  "error": null,
  "output": {
    "model_glb": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.glb",
    "thumbnail": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/thumbnail.jpg",
    "model_urls": {
      "glb": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.glb",
      "fbx": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.fbx",
      "obj": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.obj",
      "usdz": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.usdz",
      "blend": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.blend",
      "stl": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/output.stl"
    },
    "texture_urls": {
      "base_color": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/base_color.jpg",
      "metallic": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/metallic.jpg",
      "roughness": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/roughness.jpg",
      "normal": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/normal.jpg"
    },
    "seed": 12345,
    "prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork",
    "actual_prompt": "A rustic antique wooden treasure chest with iron bands and ornate metalwork, weathered with age, displaying intricate carvings and tarnished brass fittings"
  },
  "rigged_character_glb": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/rigged_character.glb",
  "rigged_character_fbx": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/rigged_character.fbx",
  "basic_animations": [
    {
      "name": "idle",
      "url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-text-to-3d_019dxxxx/animation_idle.glb"
    }
  ],
  "rig_task_id": "rig_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}

Response Fields - Meshy 6 (Text to 3D) check status

Field Type Description
request_idstringUnique identifier of the request
statusstringCurrent status of the job (QUEUED, PROCESSING, COMPLETED, FAILED, ERROR)
model_idstringID of the model used for generation
errornull|stringError description if status is FAILED, otherwise null
output.model_glbstringURL to the GLB model file
output.thumbnailstringURL to the model thumbnail image
output.model_urlsobjectDictionary of model file formats and their URLs (glb, fbx, obj, usdz, blend, stl)
output.texture_urlsobjectDictionary of texture map URLs (base_color, metallic, roughness, normal)
output.seedintegerSeed used for the generation
output.promptstringOriginal text prompt
output.actual_promptstringPrompt after LLM expansion (if enable_prompt_expansion was used)
rigged_character_glbstringURL to the rigged character GLB file (if enable_rigging was true)
rigged_character_fbxstringURL to the rigged character FBX file (if enable_rigging was true)
basic_animationsarrayList of animation files with name and URL
rig_task_idstringInternal identifier for the rigging task (if enable_rigging was true)
created_atstringISO timestamp when the request was created
updated_atstringISO timestamp when the request was last updated
completed_atstringISO timestamp when the request was completed

Request Headers

Header Value
Content-Typeapplication/json
Ocp-Apim-Subscription-KeyYour API subscription key

Response Handling

Common status codes for Meshy 6 (Text to 3D) check status.

Code Meaning
200 Success
Bad Request (invalid request_id)
401 Unauthorized
403 Forbidden
404 Not Found (request_id not found)
Too Many Requests
500 Internal Server Error

Notes & Tips

  1. Poll the status endpoint every 2–3 seconds until status is COMPLETED, FAILED, or ERROR.
  2. Use enable_prompt_expansion to enhance vague prompts with semantic detail.
  3. For character models, combine enable_rigging, pose_mode, and enable_animation for ready-to-animate assets.
  4. Use texture_image_url for precise texture control when text prompts are insufficient.
  5. Set target_polycount appropriately: lower values (5k–15k) for web/mobile, higher (30k–100k) for high-end rendering.
  6. Always validate actual_prompt in COMPLETED responses to confirm prompt expansion behavior.
  7. Implement retry logic for transient ERROR or FAILED states.
  8. Predictive generation time: 15–60 seconds for preview mode, 30–120 seconds for full mode.
  9. Texture guidance works best with high-resolution source images (1024x1024+).
  10. Enable safety_checker is recommended for public applications to prevent inappropriate generation.

Meshy 6 API Pricing

Your request will cost $0.80 per generated 3D model.
Image to Image (3D Models — Image to 3D)

Meshy 6 API Documentation

https://gateway.pixazo.ai/meshy-6-i2-3d/v1/meshy-6-i2-3d-request

Authentication

All requests require an API key passed via header.

Header Type Required Description
Ocp-Apim-Subscription-Key string Yes Your API subscription key

Meshy 6 i2-3d generate request - Meshy 6 i2-3d

Request Code

POST https://gateway.pixazo.ai/meshy-6-i2-3d/v1/meshy-6-i2-3d-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "image_url": "https://imagesai.appypie.com/7686410/ZU2sxXLmgRF6dgSktn9o_017731475651251.png"
}
import requests

url = "https://gateway.pixazo.ai/meshy-6-i2-3d/v1/meshy-6-i2-3d-request"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "image_url": "https://imagesai.appypie.com/7686410/ZU2sxXLmgRF6dgSktn9o_017731475651251.png"
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/meshy-6-i2-3d/v1/meshy-6-i2-3d-request";
const headers = {
  "Content-Type": "application/json",
  "Cache-Control": "no-cache",
  "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
  "image_url": "https://imagesai.appypie.com/7686410/ZU2sxXLmgRF6dgSktn9o_017731475651251.png"
};

fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -X POST "https://gateway.pixazo.ai/meshy-6-i2-3d/v1/meshy-6-i2-3d-request" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "image_url": "https://imagesai.appypie.com/7686410/ZU2sxXLmgRF6dgSktn9o_017731475651251.png"
  }'

Output

{
  "request_id": "meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.

Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "request_id": "meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "meshy-6-i2-3d",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.glb"
    ],
    "media_type": "model/glb"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "meshy-6-i2-3d",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - Meshy 6 i2-3d generate request

ParameterRequiredTypeDefaultAllowed values / rangeDescription
image_urlYesstringURL of the input 2D image to convert into a 3D model. Supports .jpg, .jpeg and .png (also AVIF/HEIF); a base64 data URI is also accepted.
model_typeNoenum"standard"standard, lowpolyType of 3D mesh generation. "standard" produces a regular high-detail mesh; "lowpoly" produces a low-poly mesh optimized for cleaner geometry with fewer polygons.
topologyNoenum"triangle"quad, triangleMesh topology type. Quad for smooth surfaces, triangle for detailed geometry.
target_polycountNointeger30000100–300000The desired number of polygons in the generated 3D model. Higher values give a more detailed, heavier mesh; lower values give a simpler, lighter one.
symmetry_modeNoenum"auto"off, auto, onSymmetry enforcement mode. "off" disables symmetry, "auto" decides automatically, "on" enforces symmetry.
should_remeshNobooleantruetrue, falseRebuilds the model's surface grid for cleaner geometry. When off, returns the raw, unoptimized triangular mesh.
should_textureNobooleantruetrue, falseGenerates a texture map for the 3D model. When off, returns untextured geometry only.
enable_pbrNobooleanfalsetrue, falseGenerates realistic surface materials (PBR: metallic, roughness, normal maps) in addition to the base colour, so the model reacts properly to light.
pose_modeNoenum""a-pose, t-pose, "" (empty)Character pose for rigging. "a-pose" generates an A-pose, "t-pose" a T-pose; empty string for no specific pose.
texture_promptNostringMax 600 charactersAdditional text prompt used to guide the texturing process.
texture_image_urlNostringURL to a 2D image used to guide the texturing process.
enable_riggingNobooleanfalsetrue, falseAuto-rig the generated model as a humanoid character, including basic walking and running animations.
rigging_height_metersNofloat1.7Approximate height of the rigged character in meters. Only used when enable_rigging is true.
enable_animationNobooleanfalsetrue, falseApply a predefined animation preset. Requires enable_rigging to be true.
animation_action_idNointeger920–696Animation preset ID from Meshy's library. Only used when enable_animation is true. See https://docs.meshy.ai/en/api/animation-library.
enable_safety_checkerNobooleantruetrue, falseTurns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it.

Minimum Request

{
  "image_url": "https://imagesai.appypie.com/7686410/ZU2sxXLmgRF6dgSktn9o_017731475651251.png"
}

Full Request (all options)

{
  "image_url": "https://imagesai.appypie.com/7686410/ZU2sxXLmgRF6dgSktn9o_017731475651251.png",
  "topology": "triangle",
  "target_polycount": 30000,
  "symmetry_mode": "auto",
  "should_remesh": true,
  "should_texture": true,
  "enable_safety_checker": true
}

Response

{
  "request_id": "meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

Header Value
Content-Type application/json
Cache-Control no-cache
Ocp-Apim-Subscription-Key Your API subscription key

Response Handling

Common status codes for Meshy 6 i2-3d generate request.

Code Meaning
202 Accepted — Request queued
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
Too Many Requests
500 Internal Server Error

Error Responses

Queue system errors and model validation errors.

Queue System Errors

// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'meshy-6-i2-3d' not found or is disabled"
}

Error via Status/Webhook

{
  "request_id": "meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "meshy-6-i2-3d",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Response (Completed)

{
  "request_id": "meshy-6-i2-3d_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "meshy-6-i2-3d",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/meshy-6-i2-3d_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Meshy 6 API Pricing

Your request will cost $0.80 per generated 3D model.

⚡ Performance

Live usage measured on Pixazo's gateway, split by model version. Generation time is how long a generation takes end-to-end (lower is better). Success rate is the percent of generations that complete (higher is better).

Show data for the last
Generations
3,500last 30d
~117 per day
Success rate
94.3%
of completed generations
Generation time
4.3minavg
p95 4.6min
Requests
Jul 21max 700Aug 19
Meshy 6Avg 100/day
Meshy 7Avg 17/day
Generation Time
Jul 21max 4.4minAug 19
Meshy 6Avg 3.8min
Meshy 7Avg 3.2min
Error Rate
Jul 21max 25.0%Aug 19
Meshy 6Avg 3.7%
Meshy 7Avg 20.0%

〰 Uptime

Percent of generations that succeeded over the selected period, per model version.

Avg. Success Rate (30d)
94.29%
across all generations of this model family
Uptime
Jul 21max 100%Aug 19
Meshy 6Avg 96.30%
Meshy 7Avg 80.00%