Pixazo APIModelsMeshy
Pixazo APIModelsMeshy

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

by Meshy

Meshy 6 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 6 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 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": 1001,
  "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": 1001,
    "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: 1001,
  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": 1001,
    "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
promptYesstringDescription of the 3D object. Maximum 600 characters.
modeNoenum"full"Generation mode. Allowed: preview, full. Preview returns untextured geometry only (20 credits); full returns fully textured model with optional texture guidance (30 credits).
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.
topologyNoenum"triangle"Mesh topology type. Allowed: quad, triangle.
target_polycountNointeger30000The 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"Symmetry enforcement mode. Allowed: off, auto, on.
enable_pbrNobooleantrue, falseGenerates realistic surface materials (PBR: metallic, roughness, normal maps) so the model reacts properly to light. Only available in full mode.
pose_modeNoenum""Character pose for rigging. Allowed: a-pose, t-pose, or empty.
enable_prompt_expansionNobooleanfalsetrue, falseAutomatically rewrites and enriches your prompt with extra detail before generation to improve results.
texture_promptNostringAdditional 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.
rigging_height_metersNofloat1.7Height 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_idNointeger1001Animation preset ID from Meshy library. 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://example.com/texture.jpg",
  "enable_rigging": true,
  "rigging_height_meters": 1.7,
  "enable_animation": true,
  "animation_action_id": 1001,
  "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

Field Type Required Default Description
image_url string Yes Publicly accessible URL of the input 2D image to convert into a 3D model
topology string No triangle Mesh topology type: "triangle" or "quad"
target_polycount integer No 30000 Target polygon count for the output mesh (range: 5000–100000)
symmetry_mode string No auto Symmetry enforcement: "none", "auto", "x", "y", or "z"
should_remesh boolean No true Whether to optimize mesh geometry for uniform topology and clean topology
should_texture boolean No true Whether to generate a high-resolution texture map for the 3D model
enable_safety_checker boolean No true Enables content safety filtering to block inappropriate inputs

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.