Meshy V6 Lite Text To 3d API Documentation

Meshy V6 Lite Text To 3d API Documentation

Playground

Try it on WaveSpeedAI!

Meshy 6 Lite Text-to-3D turns a text description into a textured 3D model with Meshy’s lightweight model. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Meshy 6 Lite Text-to-3D turns a text description into a textured 3D model with Meshy’s lightweight model, powered by Meshy.


Why Choose This?

  • Official Meshy models The same Meshy models used in the Meshy app, served as a REST API.

  • Production-ready output Download the result as a 3D file ready for game engines, DCC tools, AR and 3D printing.

  • Pay per task No subscription; you pay only for what you run.


Parameters

ParameterRequiredDescription
promptYesDescription of the 3D object. Up to 600 characters.
modeNopreview returns an untextured mesh; full also textures it. Options: preview, full. Default: full.
negative_promptNoWhat the model should avoid.
seedNoSeed; the same seed and prompt give the same result.
texture_promptNoOptional description of the texture.
texture_imageNoOptional reference image for the texture. Takes priority over texture_prompt.
enable_pbrNoGenerate PBR maps (metallic, roughness, normal). Default: false.
topologyNoMesh topology. Options: triangle, quad. Default: triangle.
target_polycountNoTarget number of polygons (used when should_remesh is on). Default: 30000.
should_remeshNoRemesh to the target polycount and topology. Default: true.
symmetry_modeNoNo longer has an effect; kept for compatibility. Options: off, auto, on. Default: auto.
pose_modeNoGenerate characters in an A-pose or T-pose (useful before rigging). Options: a-pose, t-pose.
remove_lightingNoRemove baked-in lighting from the textures.
auto_sizeNoEstimate the real-world size of the object and scale the model to it. Default: false.
enable_riggingNoRig the generated character (humanoids). The rigged model is returned after the model. Default: false.
rigging_height_metersNoCharacter height in meters used for rigging. Default: 1.7.
enable_animationNoRig and animate the character with animation_action_id. The animated model is returned last. Default: false.
animation_action_idNoAnimation from the Meshy animation library (https://docs.meshy.ai/en/api/animation-library) applied when enable_animation is on. Default: 92.

Pricing

full (textured) $0.72; preview (untextured) $0.24; rigging +$0.24, animation +$0.14.


How to Use

  1. Describe the object — shape, material, style and scale.
  2. Adjust the options you need, or keep the defaults.
  3. Submit — download the 3D file when it is ready.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "prompt": "A cinematic ocean wave at sunrise, highly detailed",
  "mode": "full",
  "enable_pbr": false,
  "topology": "triangle",
  "target_polycount": 30000,
  "should_remesh": true,
  "symmetry_mode": "auto",
  "pose_mode": "a-pose",
  "auto_size": false,
  "enable_rigging": false,
  "rigging_height_meters": 1.7,
  "enable_animation": false,
  "animation_action_id": 92
}
JSON
)

# 1. Submit the prediction once. Never retry this request automatically:
# a retry after an unclear failure can create a second, billed task.
CHECK='The task may already exist. Check History or the predictions list before submitting again.'
if ! SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  --connect-timeout 10 --max-time 60 \
  -X POST "https://api.wavespeed.ai/api/v3/meshy/v6-lite/text-to-3d" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}"); then
  printf 'Submit failed. %s\n' "${CHECK}" >&2
  exit 1
fi

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
  printf 'Submission response did not contain a prediction id. %s\n' "${CHECK}" >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

# 2. Poll until the prediction reaches a final status.
BODY_FILE=$(mktemp)
trap 'rm -f "${BODY_FILE}"' EXIT
while true; do
  # Transient errors (429, 5xx) are retried, honoring Retry-After.
  HTTP_CODE=$(curl --silent --show-error --fail-with-body \
    --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 2 \
    --output "${BODY_FILE}" --write-out '%{http_code}' \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}" || true)
  case "${HTTP_CODE}" in
    2??) ;;
    000|429|5??)  # dropped connection or temporary error: keep polling
      printf 'Task %s: HTTP %s, polling again in 10s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      sleep 10; continue ;;
    *) printf 'Task %s: HTTP %s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      cat "${BODY_FILE}" >&2; exit 1 ;;
  esac
  RESULT=$(jq 'if type == "object" and has("data") then .data else . end' "${BODY_FILE}")
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted)
      printf 'Task %s ended with status %s\n' "${PREDICTION_ID}" "${STATUS}" >&2
      printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done

Retry temporary errors only while polling, never the submit request. Errors, retries and timeouts

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringYes0 ~ 600 charactersDescription of the 3D object. Up to 600 characters.
modestringNofullpreview, fullpreview returns an untextured mesh; full also textures it.
negative_promptstringNo-What the model should avoid.
seedintegerNo--Seed; the same seed and prompt give the same result.
texture_promptstringNo--Optional description of the texture.
texture_imagestringNo--Optional reference image for the texture. Takes priority over texture_prompt.
enable_pbrbooleanNofalse-Generate PBR maps (metallic, roughness, normal).
topologystringNotriangletriangle, quadMesh topology.
target_polycountintegerNo30000100 ~ 300000Target number of polygons (used when should_remesh is on).
should_remeshbooleanNotrue-Remesh to the target polycount and topology.
symmetry_modestringNoautooff, auto, onNo longer has an effect; kept for compatibility.
pose_modestringNo-a-pose, t-poseGenerate characters in an A-pose or T-pose (useful before rigging).
remove_lightingbooleanNo--Remove baked-in lighting from the textures.
auto_sizebooleanNofalse-Estimate the real-world size of the object and scale the model to it.
enable_riggingbooleanNofalse-Rig the generated character (humanoids). The rigged model is returned after the model.
rigging_height_metersnumberNo1.7-Character height in meters used for rigging.
enable_animationbooleanNofalse-Rig and animate the character with animation_action_id. The animated model is returned last.
animation_action_idintegerNo92-Animation from the Meshy animation library (https://docs.meshy.ai/en/api/animation-library) applied when enable_animation is on.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.statusstringTask status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses.
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.statusstringStatus: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.