Query Task Status API
Poll any asynchronous Nano AI task through one status endpoint. The backend is inferred from task_id.
Authentication
Send the same Bearer token that you used to create the task.
Authorization: Bearer YOUR_API_KEYModel Inference
You normally only need to pass task_id. The API detects whether the task belongs to nano, nano2, or nano2pro from the task ID format.
nano...bannano
npro...nononano2
n82...nb2nano2pro
veo...bksvveo3
Video tasks (task_id starts with veo and ends with bksv) use the same /api/status endpoint. Video status fields are described in the Video Generation API docs. Open the Video Generation API docs
Endpoint
Use the task_id returned from /api/generate or /api/edit.
The task ID returned from /api/generate, /api/edit or /api/video/generate.
Optional fallback when task_id does not match a known pattern. Supported values: nano, nano2, nano2pro, veo3.
curl "https://nanobnana.com/api/status?task_id=nprob71e549f645122eb8db5f75af2c11nono" \
-H "Authorization: Bearer YOUR_API_KEY"{
"code": 200,
"message": "success",
"data": {
"task_id": "nprob71e549f645122eb8db5f75af2c11nono",
"request": {
"prompt": "A professional product photo of a modern wristwatch",
"model": "nano2"
},
"response": null,
"status": "IN_PROGRESS",
"status_code": 3,
"status_text": "IN_PROGRESS",
"consumed_credit": 24,
"consumed_credits": 24,
"model": "nano2"
}
}Status Codes
Important: for original nano...ban tasks, status: 3 means the task is still processing. It is not a failed state.
status_code: 1means success.status_code: 2means failed.status_code: 3means in progress.
Polling Example
Poll every few seconds while status_code is 3. Stop on 1 or 2.
async function waitForImage(taskId) {
while (true) {
const res = await fetch(`https://nanobnana.com/api/status?task_id=${taskId}`, {
headers: { Authorization: 'Bearer YOUR_API_KEY' }
});
const payload = await res.json();
const task = payload.data || payload;
if (task.status_code === 1) return task.response;
if (task.status_code === 2) throw new Error(task.error_message || 'Task failed');
await new Promise((resolve) => setTimeout(resolve, 3000));
}
}Common Errors
{
"code": 400,
"message": "task_id is required",
"data": null
}