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(&current.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."
    }
  }
}