Meshy V7 Retexture API Documentation

Meshy V7 Retexture API Documentation

Playground

Try it on WaveSpeedAI!

Meshy 7 Retexture applies new textures to existing 3D models using text prompts or reference images, with 2K, 4K, and 8K base-color textures plus optional PBR maps for game assets, product visualization, 3D design, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Meshy 7 Retexture applies new textures and materials to an existing 3D model using either a text description or a reference image. Keep the original geometry while changing the asset’s surface appearance, choose 2K, 4K, or 8K base-color textures, preserve existing UV mapping when suitable, and optionally generate PBR material maps.

It is designed for material variations, game assets, product visualization, rendering workflows, and other use cases where you want to change the look of an existing 3D model without regenerating its geometry.


Why Choose This?

  • Retexture existing 3D assets
    Change materials, colors, finishes, and surface appearance without rebuilding the underlying model.

  • Text or image guidance
    Describe the material you want or provide a reference image to guide the texture style.

  • Up to 8K textures
    Choose 2K, 4K, or 8K base-color texture resolution.

  • UV control
    Preserve the model’s existing UV mapping or generate new UVs when the original mapping is unsuitable.

  • Optional PBR materials
    Generate metallic, roughness, and normal maps alongside the base-color texture at no additional charge.

  • Multiple 3D input formats
    Supports GLB, GLTF, OBJ, FBX, and STL source models.


Parameters

ParameterRequiredDescription
modelYes3D model file URL. Supports GLB, GLTF, OBJ, FBX, and STL.
promptConditionalText description of the desired material and texture. Maximum 600 characters. Required when texture_image is not provided.
texture_imageConditionalReference image URL in JPG, JPEG, or PNG format. Required when prompt is not provided. Takes priority when both are supplied.
texture_resolutionNoBase-color texture resolution: 2k, 4k, or 8k. Default: 2k.
enable_original_uvNoPreserve the model’s original UV mapping. Default: true. Disable it when new UV mapping should be generated.
enable_pbrNoGenerate metallic, roughness, and normal maps in addition to the base-color texture. Default: false.

At least one of prompt or texture_image must be provided.


How to Use

  1. Upload a 3D model — Provide a supported model file or public URL.
  2. Choose texture guidance — Enter a material description or provide a texture reference image.
  3. Choose texture resolution — Select 2k, 4k, or 8k.
  4. Configure UV handling optional — Keep enable_original_uv=true when the source model has usable UVs, or disable it to generate new mapping.
  5. Enable PBR optional — Turn on enable_pbr when metallic, roughness, and normal maps are needed.
  6. Submit — Generate the retextured model and retrieve the available output files.

Pricing

Pricing is based only on texture_resolution.

Texture ResolutionPrice per Request
2K$0.33
4K$0.33
8K$0.50

2K and 4K use the same price tier. Selecting 8K increases the price to $0.50 per request.

enable_pbr, enable_original_uv, and the choice between prompt and texture_image do not add separate charges.

Available companion files also do not incur separate per-file charges.


Best Use Cases

  • Game asset variations — Create new material and color variants for existing meshes.
  • Product visualization — Explore finishes such as metal, wood, leather, ceramic, plastic, or fabric.
  • Material prototyping — Test different surface treatments without changing model geometry.
  • E-commerce 3D — Produce product colorways and finish variations from an existing asset.
  • Rendering workflows — Generate base-color and optional PBR maps for downstream rendering.
  • Creative iteration — Compare multiple texture directions on the same model.

Pro Tips

  • Describe the material, color, finish, wear, and surface properties rather than describing a different object.
  • Use a reference image with a clear and consistent material style when using texture_image.
  • Check whether the source model has usable UV mapping before keeping enable_original_uv=true.
  • Disable original UV preservation when the source UVs are missing or unsuitable.
  • Enable enable_pbr when the asset will be used in lighting-sensitive rendering or real-time 3D workflows.
  • Use 2k or 4k for iteration before moving to 8k when maximum texture detail is needed.
  • When both prompt and texture_image are supplied, the reference image takes priority.

Notes

  • model is required.
  • At least one non-empty prompt or texture_image must be provided.
  • prompt supports up to 600 characters.
  • texture_image supports JPG, JPEG, and PNG.
  • texture_image takes priority when both guidance methods are supplied.
  • texture_resolution defaults to 2k.
  • Supported texture resolutions are 2k, 4k, and 8k.
  • enable_original_uv defaults to true.
  • enable_pbr defaults to false.
  • At 8k, the base-color texture is 8192 pixels, while PBR maps are 4096 pixels.

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'
{
  "model": "example",
  "texture_resolution": "2k",
  "enable_original_uv": true,
  "enable_pbr": false,
  "prompt": "A cinematic ocean wave at sunrise, highly detailed"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/meshy/v7/retexture" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

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
' >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}")
  RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

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

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
modelstringYes-1 ~ unlimited characters3D model to retexture. Supports GLB, GLTF, OBJ, FBX, and STL.
promptstringNo0 ~ 600 charactersDescribe the desired materials and texture style. Provide a prompt or texture_image.
texture_imagestringNo--Reference image for texture style. Takes priority when a prompt is also provided.
texture_resolutionstringNo2k2k, 4k, 8kBase-color texture resolution. At 8K, PBR maps remain 4K.
enable_original_uvbooleanNotrue-Keep the model's existing UV mapping. Disable when the model has no usable UVs.
enable_pbrbooleanNofalse-Generate metallic, roughness, and normal maps along with base color.

Conditional constraints

  • Not allowed: prompt is empty or omitted and texture_image is empty or omitted.

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.