Get started with the Tripo API in 15 minutes and generate your first 3D model.
1
Get an API Key
Go to the API Keys page, create a new key, and copy it. Store it securely — it is shown only once.
Security tip:
Store your API key in an environment variable (export TRIPO_API_KEY="sk-..."). Never hard-code it in source code or commit it to repositories.2
Send Your First Request
Generate a 3D model from a text description. All generation APIs are asynchronous — the response returns a task_id immediately.
curl -X POST https://openapi.tripo3d.com/v3/generation/text-to-model \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"prompt": "a cute cat",
"model": "v3.1-20260211"
}'200Response — 200 OK
{
"code": 0,
"data": {
"task_id": "task_abc123"
}
}3
Query the Task Result
Use task_id to poll until status: "success". Poll every 2 seconds. Typical generation takes 10–120 seconds.
curl -X GET https://openapi.tripo3d.com/v3/tasks/{task_id} \
-H "Authorization: Bearer <token>"200Response — Task Complete
{
"code": 0,
"data": {
"task_id": "task_abc123",
"type": "text_to_model",
"status": "success",
"progress": 100,
"output": {
"model_url": "https://...",
"rendered_image_url": "https://..."
}
}
}4
Download the Model
Download the GLB 3D model file from output.model_url in the response. You can use it directly in:
BlenderUnityUnreal EngineThree.jsBabylon.jsmodel-viewer
Note:
Model URLs expire after 5 minutes. Download immediately after the task succeeds. Use output.model_url for the 3D model file.Advanced Workflows
Explore complete API pipelines for specific use cases and features.
Game-Ready Character
Generate a low-poly character with skeleton and animations, ready for Unity/Unreal.
Call Sequence
Your App
Tripo API
1POSTimage-to-model
task_id
POLLGET tasks/{task_id} → until success
2POSTrig-check
riggable: true, rig_type: "biped"
3POSTrig
New task_id for rigged model
POLLGET tasks/{task_id} → until success
4POSTretarget
task_id with animated model URLs
POLLGET tasks/{task_id} → until success
API Data Flow
POST
image-to-model
image-to-model
POST
rig-check
rig-check
POST
rig
rig
POST
retarget
retarget
1
POST /v3/generation/image-to-model
Input
Image URL or file_token
Output
task_id
Poll GET /v3/tasks/{task_id} until status=success
2
POST /v3/animations/rig-check
Input
{ input: "task_abc123" }
Output
riggable: true, rig_type: "biped"
If riggable=true, pass task_id + rig_type to rig
3
POST /v3/animations/rig
Input
{ input: "task_abc123", rig_type: "biped" }
Output
New task_id for rigged model
Poll until success, pass rigged task_id to retarget
4
POST /v3/animations/retarget
Input
{ input: "task_rig456", animations: [...] }
Output
task_id with animated model URLs
Download output.model_urls
Key Parameters
| Parameter | Value | Why |
|---|---|---|
model | P1-20260311 | Best low-poly topology for game assets |
face_limit | 5000 | Mobile/game-friendly polygon count |
texture | true | Visual fidelity for characters |
rig_type | biped | Humanoid skeleton for character |
spec | mixamo | Compatible with Unity/Unreal import |
animations | preset:walkpreset:idlepreset:run | Essential locomotion set |
Estimated Time
~105s
Cost (Credits)
~85
import requests, time
HEADERS = {"Authorization": "Bearer <token>", "Content-Type": "application/json"}
def poll(task_id):
while True:
r = requests.get(f"https://openapi.tripo3d.com/v3/tasks/{task_id}", headers=HEADERS).json()
if r["data"]["status"] == "success": return r["data"]
if r["data"]["status"] in ("failed","cancelled"): raise Exception(r["data"])
time.sleep(2)
# Step 1 — Generate model
task_id = requests.post("https://openapi.tripo3d.com/v3/generation/image-to-model",
headers=HEADERS, json={"file_token":"<token>","model":"P1-20260311","face_limit":5000}
).json()["data"]["task_id"]
poll(task_id)
# Step 2 — Rig check
rig_type = requests.post("https://openapi.tripo3d.com/v3/animations/rig-check",
headers=HEADERS, json={"input": task_id}).json()["data"]["rig_type"]
# Step 3 — Rig
rig_id = requests.post("https://openapi.tripo3d.com/v3/animations/rig",
headers=HEADERS, json={"input":task_id,"rig_type":rig_type,"spec":"mixamo"}
).json()["data"]["task_id"]
poll(rig_id)
# Step 4 — Retarget animations
anim_id = requests.post("https://openapi.tripo3d.com/v3/animations/retarget",
headers=HEADERS, json={"input":rig_id,"animations":["preset:walk","preset:idle","preset:run"]}
).json()["data"]["task_id"]
result = poll(anim_id)
print("Animated GLBs:", result["output"]["model_urls"])Developer Tips
- •Always call rig-check before rig — it returns the recommended rig_type and prevents failures
- •Poll tasks every 2 seconds; do not exceed 1 request/second to avoid rate limits
- •Use spec: "mixamo" for Unity/Unreal; use spec: "tripo" for custom pipelines
Common Pitfalls
- •If rig-check returns riggable=false, try regenerating with a cleaner prompt (avoid complex poses)
- •Retarget only accepts rigged model task_ids — passing a raw generation task_id will fail