Jobs, queues, webhooks, idempotence

Ship against what exists

Buyers compare APIs on webhooks and retries. Here is the live contract, not a roadmap dressed as a feature list.

No video-completion webhook today. Generation endpoints are synchronous. Billing webhooks (Stripe, Mollie, Dodo) are internal payment events, not a public job API.

Comparison

ConcernNano Banana Video todayWhat you implement
Models seedance2, veo3 (MiniMax H3), sora2 Pass video_model
Queue / rate limit 15 POSTs / 30 min, headers on every generation Honor Retry-After
Job completion URL in the POST response. Optional GET status No subscriber URL to register
Webhooks Not offered for video jobs Keep your own queue if the HTTP call is too long for a browser
Errors JSON error + HTTP status (400–429, 500) Error catalog
Idempotence Writes are not idempotent. Reads by video_id are safe to retry Dedupe on your side before POST

Recommended worker pattern

  1. Your user clicks Generate. Enqueue {prompt, image_url, client_job_id} in your database.
  2. A worker POSTs to Nano Banana. On 429, sleep Retry-After. On 200, store video_id and video_url.
  3. If the worker dies after a 200, GET /api/v1/video-status.php instead of POSTing again.

Status lookup

GET /api/v1/video-status.php
curl "https://nanobananavideo.com/api/v1/video-status.php?video_id=vid_a1b2c3d4" \
  -H "Authorization: Bearer nb_YOUR_API_KEY"

When a completion webhook ships, this page will say so. Until then, treat sync + status as the contract.