Tripo3d P1 Multiview To 3d API Documentation

Tripo3d P1 Multiview To 3d API Documentation

Playground

Try it on WaveSpeedAI!

Tripo3D P1 Multiview-to-3D turns 2 to 4 views of one object into a 3D model with Tripo’s P1 low-poly model (up to 20,000 faces) with clean, structured topology for games and mobile. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Tripo3D P1 Multiview-to-3D generates a low-poly 3D model from 2-4 views of the same object, with optional textures and PBR materials.


Why Choose This?

  • Low-poly geometry — Set a face limit for the asset.
  • Material options — Generate untextured geometry or add textures and PBR materials.
  • Texture quality selection — Choose standard, detailed, extreme, or fast texturing.

Parameters

ParameterRequiredDescription
imagesYes2 to 4 images of the same object, in the order front, left, back, right. The front view is required.
textureNoGenerate texture maps. Disable both texture and pbr for an untextured model. Default: true.
pbrNoGenerate PBR materials. For model generation, this also enables textures. Default: true.
texture_qualityNoTexture quality. extreme uses 8K textures; fast requires texture version v3.5-20260815. Options: standard, detailed, extreme, fast. Default: standard.
texture_versionNoTexture model version. fast quality requires v3.5-20260815. Options: v3.0-20250812, v3.5-20260815. Default: v3.0-20250812.
delightNoReduce lighting baked into the source during texturing. Applies only to texture version v3.5-20260815. Default: true.
face_limitNoMaximum number of faces, 50 to 20,000. Omit for adaptive.
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_autofixNoApply image preprocessing before generation. Default: false.
auto_sizeNoEstimate the model’s real-world scale. Default: false.
export_uvNoInclude UV unwrapping during generation. Default: true.
model_seedNoOptional seed for geometry generation.
texture_seedNoOptional seed for texture generation.

How to Use

  1. Upload reference views — Add 2-4 views in front, left, back, right order.
  2. Choose materials — Keep textures and PBR enabled, or disable both for an untextured result.
  3. Adjust optional settings — Set face limits and texture options.
  4. Submit — Download the generated model.

Pricing

ConfigurationPrice
Untextured$0.48
Standard or fast textures$0.60
Detailed textures$0.72
Extreme textures$0.84

Disable both texture and pbr for untextured pricing. Texture quality changes the price only when textures are enabled.


Notes

  • Provide 2-4 views of the same object. The front view is required; view order is front, left, back, right.
  • fast quality requires texture version v3.5-20260815; delight takes effect only with that version.
  • auto_size requires a textured model and estimates scale rather than providing a physical measurement.
  • face_limit supports 50-20,000 faces; omit it for adaptive settings.
  • orientation=align_image applies only to textured models.

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,
  "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/p1/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
done

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

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagesarray<string>Yes-2 ~ 4 items2 to 4 images of the same object, in the order front, left, back, right. The front view is required.
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).
face_limitintegerNo-50 ~ 20000Maximum number of faces, 50 to 20,000. Omit for adaptive.
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.

Every model also accepts the global request options enable_sync_mode and enable_base64_output; see their pages for details.

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.