Auto-rig & Animate
POST/v1/assets/{id}/animate
Auto-rig a humanoid or animal and, optionally, retarget a preset clip onto it — no manual weight painting.
The {id} in the path is the source model. The result — a rigged and, for -rig-animate, animated mesh — is written to a new asset.
Parameters
| Parameter | Description |
|---|---|
| engineOPTIONAL string | Which rig engine — e.g. tripo-rig-animate, tripo-rig, meshy-rig-animate, meshy-rig. The -rig-animate engines rig and apply a preset clip; the -rig engines rig only. Omit for the default. List: GET /v1/models?category=animate. |
| presetOPTIONAL string | Animation preset id for the -rig-animate engines (e.g. walk), up to 64 characters. Browse the catalog with GET /v1/animations. Omit to rig only. |
| licenseOPTIONAL string | Usage rights for the result. Defaults to private (all-rights-reserved). |
| callbackUrlOPTIONAL string | Push the finished asset to your server instead of polling — see Webhooks. |
Source must be riggable Auto-rig needs a clear humanoid or animal form. Props, scenery and abstract shapes fail with
400 and error.code 13008.Request
request
curl -X POST https://api.picoberry.ai/v1/assets/019…/animate \
-H "Authorization: Bearer pb_live_xxx" -H "Content-Type: application/json" \
-d '{"engine":"tripo-rig-animate","preset":"walk"}'requests.post(f"{BASE}/v1/assets/{id}/animate", headers=headers,
json={"engine": "tripo-rig-animate", "preset": "walk"})await fetch(`${BASE}/v1/assets/${id}/animate`, { method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({ engine: "tripo-rig-animate", preset: "walk" }) });Animation presets
GET/v1/animations?engine=tripo|meshy
List the preset clips available for an engine. Presets are engine-specific — a Tripo preset won't run on a Meshy engine, so always pick from the same engine you animate with.
request
curl "https://api.picoberry.ai/v1/animations?engine=tripo" \
-H "Authorization: Bearer pb_live_xxx"requests.get("https://api.picoberry.ai/v1/animations", headers=headers,
params={"engine": "tripo"})await fetch(`${BASE}/v1/animations?engine=tripo`, { headers });response · 200
{ "success": true, "data": [
{ "id": "walk", "name": "Walk", "category": "Movement" },
{ "id": "run", "name": "Run", "category": "Movement" },
{ "id": "slash", "name": "Slash", "category": "Combat" }
] }Each preset carries an id (pass it as preset on /animate), a display name, and a category — Movement, Combat, Emotion, Dance, Sports, Daily, or Gesture.
Response
response · 200
{ "success": true, "data": { "id": "019…", "taskStatus": 0 } }Poll GET /v1/assets/{id} until taskStatus is 2; the finished files.model carries the rig and any baked clip. See Async & polling.
Presets are engine-specific A Tripo preset will not run on a Meshy engine. Pick presets from the same engine you animate with.