Get asset
GET/v1/assets/{id}
Fetch one asset's status and results — the endpoint you poll for every async job.
Call this after any create request (generation, remesh, texture, animate) to watch it move from queued to succeeded. Or skip polling entirely and let a webhook deliver the same object the moment it's ready.
Request
request
curl https://api.picoberry.ai/v1/assets/019… \
-H "Authorization: Bearer pb_live_xxx"requests.get(f"{BASE}/v1/assets/{id}", headers=headers).json()["data"]const asset = (await (await fetch(`${BASE}/v1/assets/${id}`, { headers })).json()).data;Task status
taskStatus is the integer you branch on — or status, the same value as a string ("pending" / "processing" / "succeeded" / "failed"). progress (0–100) tracks a running job, but it reaches 100 only on success and is 0 for a failed job — so branch on taskStatus/status, never progress, to tell success from failure.
0 · queued accepted, waiting to start1 · processing generation is running2 · succeeded
files are ready3 · failed credits refunded — read errorCategoryResponse
response · succeeded
{ "success": true, "data": {
"id": "019…",
"name": "treasure chest",
"type": "model_3d",
"taskStatus": 2,
"status": "succeeded",
"progress": 100,
"createdAt": "2026-08-05T09:12:00.000Z",
"files": {
"model": "https://…signed.glb",
"thumbnail": "https://…signed.png",
"hasTextures": true
},
"nsfw": false,
"license": "private"
} }The asset object
| Field | Description |
|---|---|
| id string | The asset id. |
| name · description string | Label, and the prompt or notes it was created from. |
| type string | Asset kind — e.g. model_3d, image. |
| taskStatus integer | 0 / 1 / 2 / 3 — see Task status above. |
| status string | String alias of taskStatus — "pending" / "processing" / "succeeded" / "failed". Poll for completion on "succeeded" (or taskStatus: 2, or files presence); "failed" is terminal. |
| progress integer | 0–100 while a job is running. Reaches 100 only on success and is 0 for a failed job — cannot distinguish failure on its own. |
| createdAt string | ISO 8601 creation timestamp. |
| files object | Signed result URLs, populated on success — model, preview, image, thumbnail, textures[], plus a hasTextures flag. |
| errorCategory · errorDetail string | Present only on a failed job (taskStatus: 3) — the class of failure and a sanitized detail. |
| nsfw boolean | Whether the asset was flagged by the content filter. |
| license string | Usage rights on the asset. |
Signed URLs expire The
files.* URLs are short-lived — download or copy them promptly rather than storing them long-term.Polling loop Poll every few seconds with backoff until
taskStatus is 2 or 3. The full loop is in Async & polling.