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
Choose2K,4K, or8Kbase-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
| Parameter | Required | Description |
|---|---|---|
| model | Yes | 3D model file URL. Supports GLB, GLTF, OBJ, FBX, and STL. |
| prompt | Conditional | Text description of the desired material and texture. Maximum 600 characters. Required when texture_image is not provided. |
| texture_image | Conditional | Reference image URL in JPG, JPEG, or PNG format. Required when prompt is not provided. Takes priority when both are supplied. |
| texture_resolution | No | Base-color texture resolution: 2k, 4k, or 8k. Default: 2k. |
| enable_original_uv | No | Preserve the model’s original UV mapping. Default: true. Disable it when new UV mapping should be generated. |
| enable_pbr | No | Generate 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
- Upload a 3D model — Provide a supported model file or public URL.
- Choose texture guidance — Enter a material description or provide a texture reference image.
- Choose texture resolution — Select
2k,4k, or8k. - Configure UV handling optional — Keep
enable_original_uv=truewhen the source model has usable UVs, or disable it to generate new mapping. - Enable PBR optional — Turn on
enable_pbrwhen metallic, roughness, and normal maps are needed. - Submit — Generate the retextured model and retrieve the available output files.
Pricing
Pricing is based only on texture_resolution.
| Texture Resolution | Price 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_pbrwhen the asset will be used in lighting-sensitive rendering or real-time 3D workflows. - Use
2kor4kfor iteration before moving to8kwhen maximum texture detail is needed. - When both
promptandtexture_imageare supplied, the reference image takes priority.
Notes
modelis required.- At least one non-empty
promptortexture_imagemust be provided. promptsupports up to600characters.texture_imagesupports JPG, JPEG, and PNG.texture_imagetakes priority when both guidance methods are supplied.texture_resolutiondefaults to2k.- Supported texture resolutions are
2k,4k, and8k. enable_original_uvdefaults totrue.enable_pbrdefaults tofalse.- At
8k, the base-color texture is8192pixels, while PBR maps are4096pixels.
Related Models
- Meshy 6 Lite Retexture — Retexture existing 3D models with the lighter Meshy 6 workflow.
- Meshy 6 Retexture — Retexture existing assets with Meshy 6.
- Meshy 7 Retexture — Retexture existing 3D models with Meshy 7.
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
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| model | string | Yes | - | 1 ~ unlimited characters | 3D model to retexture. Supports GLB, GLTF, OBJ, FBX, and STL. |
| prompt | string | No | 0 ~ 600 characters | Describe the desired materials and texture style. Provide a prompt or texture_image. | |
| texture_image | string | No | - | - | Reference image for texture style. Takes priority when a prompt is also provided. |
| texture_resolution | string | No | 2k | 2k, 4k, 8k | Base-color texture resolution. At 8K, PBR maps remain 4K. |
| enable_original_uv | boolean | No | true | - | Keep the model's existing UV mapping. Disable when the model has no usable UVs. |
| enable_pbr | boolean | No | false | - | Generate metallic, roughness, and normal maps along with base color. |
Conditional constraints
- Not allowed:
promptis empty or omitted andtexture_imageis empty or omitted.
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<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.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |