Retrieve an image task
GET /v1/tasks/{id}
Reads the state of an image job. You only need it when you passed async: true — a default synchronous call already returns the images. Video jobs are not served here; use GET /v1/video/generations/{task_id}.
Request
bash
curl https://open.pikpikgo.com/v1/tasks/2608101909450810293847 \
-H "Authorization: Bearer $PIKPIK_API_KEY"Response
json
{
"id": "2608101909450810293847",
"object": "image.generation",
"created": 1786000185,
"model": "img-std-1",
"status": "succeeded",
"prompt": "a rainy cyberpunk street at night, neon reflections",
"size": "16:9",
"quality": "2k",
"credits": 10,
"error": "",
"data": [
{ "url": "https://cdn.pikpikgo.com/ai/xxxx.png", "revised_prompt": "a rainy cyberpunk street at night, neon reflections" }
]
}Status flow
| status | Meaning | What to do |
|---|---|---|
| queued | Accepted, waiting for a worker | Keep polling |
| processing | Rendering | Keep polling |
| succeeded | Done | Read data for the output URL and stop polling |
| failed | Failed | Read error for the reason and stop. Credits are already refunded |
Polling advice
- Every 3 seconds for images (every 5 for video, at its own endpoint). Polling harder burns rate limit without speeding anything up.
- Set a ceiling (say 10 minutes for images, 30 for video) and treat it as a timeout. Never loop forever.
- You do not have to keep the process alive: a background sweeper finalises abandoned tasks and refunds failures.
A task is only visible to the account that created it. Someone else’s task and a non-existent task return the exact same 404.

