ARTICLE

grok-imagine-image-quality EOL (2 Nov) and 1-hour signed URLs: migrating the xAI bulk route in Bubble via BIAIG before the deadline

xAI retires grok-imagine-image-quality on 2 Nov 2026. Batch media signed URLs expire in about an hour while jobs can run up to ~24h. A BIAIG cutover table: explicit model id, quality, and Bubble File/Image ingest before TTL—without stale scheduled runs.

Why this matters now

My Bubble catalog ingests assets through an internal pipeline called BIAIG (from the editorial plan—not listed in public xAI or Bubble docs). While I was untangling bulk image, two problems landed on the same date. Worth reading next: OpenAI image Batch API (−50%,.

Public xAI documentation sets retirement of grok-imagine-image-quality effective November 2, 2026 (60-day notice from September 2, 2026). Separate from general batch economics: the Batch API exposes signed URLs for bulk image/video results that expire after about one hour, while the batch job itself has a different expires_at and may take up to ~24 hours to finish (best effort). The deprecated model id and 1-hour URL TTL share one deadline window.

Why this matters now

This piece is not about OpenAI/xAI batch pricing; it is about this model + EOL date and ingest before URL expiry in Bubble.


What changes after Nov 2

Previous slug After EOL API behavior Recommendation
grok-imagine-image-quality on /v1/images/generations, /v1/images/edits Redirect to grok-imagine-image-2.0 with quality: "low" Same request/response shapes; slug still resolves Set model: grok-imagine-image-2.0 and an explicit quality (low, medium, auto)—otherwise redirect forces low and you lose control of quality/billing
grok-imagine-image-pro (already redirected to quality per May 15 guide) Same Nov 2 path → 2.0 @ low Legacy slug chain Audit JSONL/SDK for pro/quality aliases
grok-imagine-image (1.0) Not affected by this EOL — Do not confuse with quality retirement

Batch API: model page grok-imagine-image-quality — Batch API: Not supported; grok-imagine-image-2.0 — Batch API supported. xAI batch examples use grok-imagine-image-2.0. If BIAIG still submits batches under the quality slug, migration is model id change, not calendar hygiene alone.

Sources: Imagine Image Quality Retirement (Nov 2), May 15 retirement, quality / 2.0 model pages.


Two different “expiry” concepts

I mixed these up myself until I wrote them down.

Concept Meaning Bubble ingest impact
Signed media URL in batch results (~1 hour) xAI expects prompt download from .url A workflow that waits until “batch fully done” may see dead links if ingest lag exceeds one hour
Batch expires_at Job retention window (not the same as URL TTL) Job metadata may still exist while URLs in old results are gone
Batch runtime Up to ~24h best effort Long queues + infrequent polling amplify URL expiry risk

Batch responses also expose image_response.base64 (and video equivalents) beside .url—a path that avoids reliance on signed URLs if your pipeline supports it (verify in BIAIG; do not assume).

Sources: Release notes (March 2026 batch image/video + 1-hour URL note), Batch API.


Bubble: File/Image ingest, not plain URL text

I follow the documented/community pattern for backend ingest:

  1. Map the xAI URL as file/image type in the API workflow, not plain text.
  2. Persist to the catalog with :saved to Bubble storage when pulling the remote asset.
  3. Scheduled API workflows snapshot the workflow version at schedule time—after you change model ids or ingest steps, already scheduled runs will not pick up the new logic until cancelled and rescheduled.

Sources: Scheduling API workflows, Forum: uploading public image in backend workflow.


BIAIG cutover table (editorial checklist)

What I walk through before Nov 2, 2026—one checklist, not three separate “later” tasks.

# Layer Action before Nov 2, 2026 Done when
1 Batch submit (JSONL/SDK) Replace model with grok-imagine-image-2.0; remove grok-imagine-image-quality, -latest, grok-imagine-image-pro Staging job diff shows no quality slug in payload
2 quality Set explicit low / medium / auto—do not rely on post-EOL redirect @ low Catalog default documented—open product choice (cost vs fidelity)
3 Result handling Ingest per completed result (incremental retrieval per docs), not one end-of-day bulk fetch Internal measure: time from result .url to :saved—not in public docs
4 Fallback On expired URL, branch to base64 if supported; never store raw signed URLs in text fields Catalog fields hold Bubble storage URLs
5 Scheduler hygiene Cancel/reschedule queued runs on the old route No snapshots of old connector + old model
6 Smoke test One small 2.0 batch + sync path with chosen quality Assets open from Bubble storage without xAI host

BIAIG cutover table (editorial checklist)


What public docs do not settle

  • Exact clock time/timezone for the Nov 2 cutover (migration guide gives a calendar date only, unlike May 15’s 12:00 PM PT).
  • Whether BIAIG already uses 2.0—check private config, do not invent.
  • Production lag from poll → schedule → ingest—your observability.

Out of scope unless you leave batch-only: Imagine storage_options / Files public URL TTL (1h–30d) on a different API surface (outputs doc).


Bottom line

Before November 2, 2026 I move the bulk image route to grok-imagine-image-2.0, pin quality, and force Bubble storage ingest within the ~1-hour signed URL window. Skip that and post-EOL redirect leaves you on low, while long batch jobs leave catalog entries pointing at expired links. BIAIG cutover is model + ingest timing + scheduler reset in one table. Worth reading next: xAI Batch API: image, edit,.

← All articles