Tripo3d H3.0 Multiview To 3d API Documentation
Playground
Try it on WaveSpeedAI!Tripo3D H3.0 Multiview-to-3D turns 2 to 4 views of one object into a 3D model with Tripo’s previous-generation H3.0 model (up to 2 million faces), kept for consistency with earlier assets. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Tripo3D H3.0 Multiview-to-3D generates a 3D model from multiple views of the same object. Provide 2–4 reference images from different sides, then configure geometry, textures, topology, and optional PBR materials for the final asset.
Why Choose This?
- Multi-view reconstruction — Build a 3D model from multiple views of the same object.
- Texture and PBR options — Generate untextured geometry, standard textures, detailed textures, or PBR materials.
- Geometry control — Choose standard or detailed geometry and set optional face limits.
- Topology options — Generate triangle meshes, quad meshes, or smart low-poly assets.
- Editable parts — Generate separate untextured parts for downstream editing.
- Texture controls — Choose texture quality, alignment, UV generation, and optional lighting cleanup.
Parameters
| Parameter | Required | Description |
|---|---|---|
| images | Yes | 2–4 views of the same object in front, left, back, right order. The front view is required. |
| texture | No | Generate texture maps. Disable both texture and pbr for an untextured model. Default: true. |
| pbr | No | Generate PBR materials. Enabling this also enables textures. Default: true. |
| texture_quality | No | Texture quality: standard, detailed, extreme, or fast. extreme uses 8K textures. fast requires texture version v3.5-20260815. Default: standard. |
| texture_version | No | Texture model version: v3.0-20250812 or v3.5-20260815. Default: v3.0-20250812. |
| delight | No | Reduce lighting baked into the source images during texturing. Applies only to texture version v3.5-20260815. Default: true. |
| geometry_quality | No | Geometry quality: standard or detailed. Default: standard. |
| quad | No | Generate a quad mesh in FBX format. If face_limit is omitted, the target is approximately 10,000 faces. Default: false. |
| smart_low_poly | No | Generate a low-poly mesh with simplified topology. Default: false. |
| generate_parts | No | Generate separate editable parts. Parts are untextured and use triangle meshes. Default: false. |
| face_limit | No | Requested face limit. Omit for adaptive topology. Supports up to 1,000,000 faces for standard geometry, 2,000,000 for detailed geometry, 150,000 for quad meshes, or 500–20,000 with smart low-poly. |
| texture_alignment | No | Texture alignment priority: original_image or geometry. Default: original_image. |
| orientation | No | Model orientation: default or align_image. align_image applies to textured models. Default: default. |
| enable_image_autofix | No | Apply image preprocessing before generation. Default: false. |
| auto_size | No | Estimate real-world scale in meters. Requires a textured model. Default: false. |
| export_uv | No | Include UV unwrapping during generation. Default: true. |
| model_seed | No | Optional seed for geometry generation. |
| texture_seed | No | Optional seed for texture generation. |
How to Use
- Add reference views — Provide
2–4images of the same object, with the front view required. - Choose materials — Keep textures and PBR enabled, or disable both for an untextured model.
- Choose quality — Select texture and geometry quality based on the level of detail you need.
- Configure topology optional — Use quad, smart low-poly, face limits, or separate parts when needed.
- Submit — Generate and retrieve the completed 3D model.
Pricing
Pricing is per generated model and depends on the selected options.
Base Price
| Configuration | Price |
|---|---|
| Untextured model | $0.24 |
| Standard or fast textured model | $0.36 |
Optional Add-ons
| Setting | Additional Price |
|---|---|
| Detailed textures | +$0.12 |
| Extreme textures | +$0.24 |
| Detailed geometry | +$0.24 |
| Quad mesh | +$0.06 |
| Smart low-poly mesh | +$0.12 |
| Separate parts | +$0.24 |
The default configuration costs $0.36 per model.
PBR does not add a separate charge beyond the textured model price.
detailed and extreme texture charges apply only when textures are generated.
When generate_parts=true, the model uses the untextured base price and the separate-parts add-on. Texture and quad charges do not apply.
Best Use Cases
- Product reconstruction — Build 3D models from multiple product photos.
- Game assets — Generate textured, low-poly, or quad-based assets for game workflows.
- E-commerce 3D — Convert multi-angle product photography into reusable 3D assets.
- Rendering assets — Generate textured models with optional PBR materials.
- Editable models — Create separated parts for additional modeling and refinement.
- High-detail assets — Combine detailed geometry with higher-quality textures for complex objects.
Pro Tips
- Use images of the same object with consistent shape, appearance, and lighting.
- Make sure the front view is clear and centered.
- Keep the object’s scale and framing reasonably consistent across views.
- Use
detailedgeometry only when additional mesh detail is needed. - Use
fasttextures for quicker iteration andextremewhen 8K texture detail is required. - Use
smart_low_polyfor simpler objects that need lightweight topology. - Use
generate_partswhen individual components need to remain separately editable.
Notes
- Provide
2–4views of the same object. - The front view is required.
- Disable both
textureandpbrfor an untextured model. - Enabling
pbralso enables texture generation. fasttexture quality requirestexture_version=v3.5-20260815.delightapplies only to texture versionv3.5-20260815.quad=truegenerates an FBX quad mesh and defaults to approximately10,000faces whenface_limitis not specified.generate_partsrequirestexture=falseandpbr=false.- Do not combine
generate_partswithquadorsmart_low_poly. - Separate parts are generated as untextured triangle meshes.
auto_sizerequires a textured model and estimates real-world scale in meters.orientation=align_imageapplies only to textured models.- Face limits depend on the selected geometry and topology settings.
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'
{
"images": [
"https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
],
"texture": true,
"pbr": true,
"texture_quality": "standard",
"texture_version": "v3.0-20250812",
"delight": true,
"geometry_quality": "standard",
"quad": false,
"smart_low_poly": false,
"generate_parts": false,
"texture_alignment": "original_image",
"orientation": "default",
"enable_image_autofix": false,
"auto_size": false,
"export_uv": true
}
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/tripo3d/h3.0/multiview-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
doneRetry temporary errors only while polling, never the submit request. Errors, retries and timeouts
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| images | array<string> | Yes | - | 2 ~ 4 items | 2 to 4 images of the same object, in the order front, left, back, right. The front view is required. |
| texture | boolean | No | true | - | Generate texture maps. Turn off (with pbr) for an untextured model at a lower price. |
| pbr | boolean | No | true | - | Generate PBR materials (base color, metallic, roughness, normal). Turning it on also turns on texture. |
| texture_quality | string | No | standard | standard, detailed, extreme, fast | Texture quality: standard, detailed (high resolution), extreme (8K) or fast (same size as standard, quicker; uses texture model v3.5-20260815). |
| texture_version | string | No | v3.0-20250812 | v3.0-20250812, v3.5-20260815 | Texture model. v3.5-20260815 is the newest; the fast quality and delight use it. |
| delight | boolean | No | true | - | Remove the lighting baked into the source before texturing (texture model v3.5-20260815 only). |
| geometry_quality | string | No | standard | standard, detailed | Geometry quality: standard or detailed (Ultra, up to 2 million faces). |
| quad | boolean | No | false | - | Output a quad mesh (FBX). Without a face_limit it targets 10,000 faces. |
| smart_low_poly | boolean | No | false | - | Generate a low-poly mesh with hand-crafted style topology. Best for simple objects. |
| generate_parts | boolean | No | false | - | Generate the model as separate editable parts. Parts are untextured and triangle-only. |
| face_limit | integer | No | - | 48 ~ 2000000 | Maximum number of faces. Omit for adaptive. Up to 1,000,000 (2,000,000 with detailed geometry, 150,000 with quad; 500 to 20,000 with smart_low_poly). |
| texture_alignment | string | No | original_image | original_image, geometry | What the texture follows: the source image colors or the generated geometry. |
| orientation | string | No | default | default, align_image | align_image rotates the model to the source image viewpoint (textured models only). |
| enable_image_autofix | boolean | No | false | - | Improve a low-quality source image before generation. Takes longer. |
| auto_size | boolean | No | false | - | Scale the model to real-world size in meters. Needs a textured model. |
| export_uv | boolean | No | true | - | Unwrap UVs during generation. Turn off for faster generation and a smaller file. |
| model_seed | integer | No | - | - | Seed for the geometry: the same seed and input give the same mesh. |
| texture_seed | integer | No | - | - | Seed for the texture: keep model_seed and change texture_seed for new textures on the same mesh. |
Every model also accepts the global request options enable_sync_mode and enable_base64_output; see their pages for details.
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 |