Tripo3d H3.0 Image To 3d API Documentation

Tripo3d H3.0 Image To 3d API Documentation

Playground

Try it on WaveSpeedAI!

Tripo3D H3.0 Image-to-3D turns a single image 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 Image-to-3D turns a single image into a 3D model with Tripo’s previous-generation H3.0 model (up to 2 million faces), kept for consistency with earlier assets, powered by Tripo.


Why Choose This?

  • Official Tripo models The same Tripo models used in Tripo Studio, 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
imageYesImage of the object (PNG, JPEG or WebP, up to 20 MB). A clean background and little occlusion work best.
textureNoGenerate texture maps. Turn off (with pbr) for an untextured model at a lower price. Default: true.
pbrNoGenerate PBR materials (base color, metallic, roughness, normal). Turning it on also turns on texture. Default: true.
texture_qualityNoTexture quality: standard, detailed (high resolution), extreme (8K) or fast (same size as standard, quicker; uses texture model v3.5-20260815). Options: standard, detailed, extreme, fast. Default: standard.
texture_versionNoTexture model. v3.5-20260815 is the newest; the fast quality and delight use it. Options: v3.0-20250812, v3.5-20260815. Default: v3.0-20250812.
delightNoRemove the lighting baked into the source before texturing (texture model v3.5-20260815 only). Default: true.
geometry_qualityNoGeometry quality: standard or detailed (Ultra, up to 2 million faces). Options: standard, detailed. Default: standard.
quadNoOutput a quad mesh (FBX). Without a face_limit it targets 10,000 faces. Default: false.
smart_low_polyNoGenerate a low-poly mesh with hand-crafted style topology. Best for simple objects. Default: false.
generate_partsNoGenerate the model as separate editable parts. Parts are untextured and triangle-only. Default: false.
face_limitNoMaximum 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_alignmentNoWhat the texture follows: the source image colors or the generated geometry. Options: original_image, geometry. Default: original_image.
orientationNoalign_image rotates the model to the source image viewpoint (textured models only). Options: default, align_image. Default: default.
enable_image_autofixNoImprove a low-quality source image before generation. Takes longer. Default: false.
auto_sizeNoScale the model to real-world size in meters. Needs a textured model. Default: false.
export_uvNoUnwrap UVs during generation. Turn off for faster generation and a smaller file. Default: true.
model_seedNoSeed for the geometry: the same seed and input give the same mesh.
texture_seedNoSeed for the texture: keep model_seed and change texture_seed for new textures on the same mesh.

Pricing

Untextured $0.24; textured $0.36. Add-ons: detailed texture +$0.12, extreme (8K) texture +$0.24, detailed geometry +$0.24, quad +$0.06, smart_low_poly +$0.12, generate_parts +$0.24 (parts are untextured). fast costs the same as standard.


How to Use

  1. Upload an image — one object, clean background, little occlusion.
  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'
{
  "image": "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/image-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
imagestringYes-Image of the object (PNG, JPEG or WebP, up to 20 MB). A clean background and little occlusion work best.
texturebooleanNotrue-Generate texture maps. Turn off (with pbr) for an untextured model at a lower price.
pbrbooleanNotrue-Generate PBR materials (base color, metallic, roughness, normal). Turning it on also turns on texture.
texture_qualitystringNostandardstandard, detailed, extreme, fastTexture quality: standard, detailed (high resolution), extreme (8K) or fast (same size as standard, quicker; uses texture model v3.5-20260815).
texture_versionstringNov3.0-20250812v3.0-20250812, v3.5-20260815Texture model. v3.5-20260815 is the newest; the fast quality and delight use it.
delightbooleanNotrue-Remove the lighting baked into the source before texturing (texture model v3.5-20260815 only).
geometry_qualitystringNostandardstandard, detailedGeometry quality: standard or detailed (Ultra, up to 2 million faces).
quadbooleanNofalse-Output a quad mesh (FBX). Without a face_limit it targets 10,000 faces.
smart_low_polybooleanNofalse-Generate a low-poly mesh with hand-crafted style topology. Best for simple objects.
generate_partsbooleanNofalse-Generate the model as separate editable parts. Parts are untextured and triangle-only.
face_limitintegerNo-48 ~ 2000000Maximum 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_alignmentstringNooriginal_imageoriginal_image, geometryWhat the texture follows: the source image colors or the generated geometry.
orientationstringNodefaultdefault, align_imagealign_image rotates the model to the source image viewpoint (textured models only).
enable_image_autofixbooleanNofalse-Improve a low-quality source image before generation. Takes longer.
auto_sizebooleanNofalse-Scale the model to real-world size in meters. Needs a textured model.
export_uvbooleanNotrue-Unwrap UVs during generation. Turn off for faster generation and a smaller file.
model_seedintegerNo--Seed for the geometry: the same seed and input give the same mesh.
texture_seedintegerNo--Seed for the texture: keep model_seed and change texture_seed for new textures on the same mesh.

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.