Assets

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 (0100) 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 errorCategory

Response

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

FieldDescription
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
0100 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.