Texture
POST/v1/assets/{id}/texture
Repaint PBR materials on an existing 3D asset — from a text prompt or a reference image — into a new asset.
The {id} in the path is the source model. Texturing writes fresh maps to a new asset and leaves the original untouched.
Parameters
| Parameter | Description |
|---|---|
| promptOPTIONAL string | Text describing the new surface, up to 1,000 characters. Omit to re-texture from the model itself. |
| engineOPTIONAL string | Which texturing engine — e.g. tripo-texture, meshy-texture, hunyuan-texture. Omit for the default. Authoritative list: GET /v1/models?category=texture. |
| imageOPTIONAL file | A multipart reference image (≤20 MB) to texture from instead of, or alongside, a prompt. See Image-guided below. |
| 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. |
Request
request
curl -X POST https://api.picoberry.ai/v1/assets/019…/texture \
-H "Authorization: Bearer pb_live_xxx" -H "Content-Type: application/json" \
-d '{"engine":"tripo-texture","prompt":"weathered bronze with green patina"}'requests.post(f"{BASE}/v1/assets/{id}/texture", headers=headers,
json={"engine": "tripo-texture", "prompt": "weathered bronze"})await fetch(`${BASE}/v1/assets/${id}/texture`, { method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({ engine: "tripo-texture", prompt: "weathered bronze" }) });Image-guided
Omit prompt and send multipart/form-data with an image part (≤20 MB) to texture from a reference image instead of text — no image hosting needed.
multipart
curl -X POST https://api.picoberry.ai/v1/assets/019…/texture \
-H "Authorization: Bearer pb_live_xxx" \
-F "engine=tripo-texture" -F "image=@./ref.png"Response
response · 200
{ "success": true, "data": { "id": "019…", "taskStatus": 0 } }Poll GET /v1/assets/{id} until taskStatus is 2; the finished files.model is the re-textured mesh and files.textures holds the new maps. See Async & polling.
Cost varies by engine Each texturing engine is priced differently — the exact cost is on
GET /v1/models.