Query Results
Generation tasks are asynchronous. After creating a task, poll it until the status becomes success or failed.
Endpoint
GET /api/v1/generations/[id]
Request
curl https://img2vid.net/api/v1/generations/YOUR_GENERATION_ID \
-H "Authorization: Bearer $BUBLE_API_KEY"
Status values
| Status | Meaning |
|---|---|
pending |
The task has been accepted and is waiting to run. |
processing |
The provider is generating the output. |
success |
Generation completed successfully. |
failed |
Generation failed. Check error. |
canceled |
Generation was canceled. |
Image result example
{
"data": {
"id": "task_id",
"status": "success",
"model": "google/nano-banana-pro",
"media_type": "image",
"mode": "text_to_image",
"cost_credits": 2,
"created_at": "2026-05-11T00:00:00.000Z",
"updated_at": "2026-05-11T00:01:00.000Z",
"result": {
"images": [{ "url": "https://..." }]
}
}
}
SDK examples
SDKs provide retrieve for one status check and wait for polling until a terminal status. By default, wait stops at success, failed, or canceled; SDKs may raise/return a generation error for failed or canceled tasks unless you disable that behavior through wait options.
The snippets below assume you have already initialized the SDK client as shown in the Quickstart and imported the required language SDK types.
JavaScript / TypeScript
const current = await buble.generations.retrieve('task_id');
const finalResult = await buble.generations.wait('task_id');
console.log(finalResult.data.result?.images?.[0]?.url);
Python
current = client.generations.retrieve("task_id")
final_result = client.generations.wait("task_id")
print(final_result["data"]["result"]["images"][0]["url"])
Go
current, err := client.Generations.Retrieve(ctx, "task_id")
if err != nil {
return err
}
finalResult, err := client.Generations.Wait(ctx, current.Data.ID)
Rust
let current = client.generations().retrieve("task_id").await?;
let final_result = client
.generations()
.wait(¤t.data.id, WaitOptions::default())
.await?;
Swift
let current = try await client.generations.retrieve("task_id")
let finalResult = try await client.generations.wait(current.data.id)
Dart / Flutter
final current = await client.generations.retrieve('task_id');
final finalResult = await client.generations.wait(current.data.id);
Elixir
{:ok, current} = Buble.Generations.retrieve(client, "task_id")
{:ok, final_result} = Buble.Generations.wait(client, current["data"]["id"])
Java
Envelope<GenerationTask> current = client.generations().retrieve("task_id");
Envelope<GenerationTask> finalResult = client.generations().wait(current.getData().getId());
.NET
var current = await client.Generations.RetrieveAsync("task_id");
var finalResult = await client.Generations.WaitAsync(current!.Data!.Id!);
PHP
$current = $client->generations()->retrieve('task_id');
$finalResult = $client->generations()->wait($current['data']['id']);
Ruby
current = client.generations.retrieve("task_id")
final_result = client.generations.wait(current.dig("data", "id"))
Video result example
{
"data": {
"id": "task_id",
"status": "success",
"model": "google/veo3.1-fast",
"media_type": "video",
"mode": "frames_to_video",
"cost_credits": 40,
"result": {
"videos": [
{
"url": "https://...",
"preview_url": "https://...",
"thumbnail_url": "https://...",
"duration": 8
}
]
}
}
}
Failed task example
{
"data": {
"id": "task_id",
"status": "failed",
"model": "google/nano-banana-pro",
"media_type": "image",
"mode": "text_to_image",
"cost_credits": 2,
"result": null,
"error": {
"code": "generation_failed",
"message": "Generation failed."
}
}
}