Hunyuan3d V2.1 API Documentation

Hunyuan3d V2.1 API Documentation

Playground

Try it on WaveSpeedAI!

Tencent Hunyuan3D v2.1 is a scalable 3D asset-creation system that advances state-of-the-art 3D generation for asset workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Hunyuan3D V2.1 is Tencent’s advanced image-to-3D generation model. Upload a single photo and the model reconstructs it as a detailed, textured 3D asset — ready for use in games, product visualization, AR/VR, and creative pipelines.


Why Choose This?

  • Single-image 3D reconstruction Generate a fully textured 3D model from just one reference photo — no multi-view capture or manual modeling required.

  • High geometric fidelity Accurately reconstructs object shape, surface detail, and proportions from the input image.

  • Rich texture output Produces clean, high-quality textures that closely match the colors and materials in the source photo.

  • Production-ready assets Output is suitable for direct use in game engines, 3D editors, and AR/VR workflows.


How to Use

  1. Upload your image — provide a clear, well-lit photo of the object you want to convert to 3D.
  2. Submit — the model reconstructs and textures the 3D asset automatically.
  3. Download your generated 3D model.

Pricing

Just $0.40 per generation.


Best Use Cases

  • Game & Interactive Media — Rapidly prototype 3D props and assets from reference photos.
  • E-commerce & Product Visualization — Create 3D product models for interactive viewers and AR try-on experiences.
  • AR/VR Content — Generate real-world object reconstructions for immersive applications.
  • Creative & Design — Turn concept art or physical objects into editable 3D assets without manual modeling.
  • Digital Twins — Quickly digitize physical objects for simulation or archival purposes.

Pro Tips

  • Use a clean, well-lit photo with the object centered and clearly visible for the most accurate reconstruction.
  • Plain or neutral backgrounds help the model focus on the object geometry and texture.
  • Avoid heavily reflective or transparent surfaces — these are harder for single-image reconstruction to handle accurately.
  • Photos taken at a slight angle (rather than perfectly flat-on) tend to produce better depth estimation.

Notes

  • image is the only required field.
  • Ensure image URLs are publicly accessible if using a link rather than a direct upload.
  • Please ensure your content complies with WaveSpeed AI’s usage policies.

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"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/hunyuan3d/v2.1" \
  -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=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 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) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-URL of image to use while generating the 3D model.

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.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
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.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
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.