POST /api/v1/images/generations — it performs mandatory corpus retrieval from the data layer and applies a six-step internal workflow before producing an image.
POST /api/v1/images/campaigns is an alias of this endpoint. Both routes share the same request schema, async lifecycle, and job polling path.Endpoint
Authentication
Request parameters
Generation intent. Describe the campaign ad you want — brand, audience, market, tone, and any visual or copy requirements. Maximum 5,000 characters.
Up to 6 reference images. Each item can be an HTTPS URL, a data URL (
data:image/...;base64,...), or a raw base64 string. Max 15 MB per image; accepted types: JPEG, PNG, WebP.UUID of a stored Brand DNA record (from
POST /api/v1/brands/extract). Pulls brand colors, fonts, tone, and identity into the generation.Inline brand identity payload. Use this when you have brand data on hand and do not need a stored brand record.
Output controls. All subfields are optional.
Your own correlation ID for workflow or agent tracing. Echoed into the job record. Maximum 200 characters.
String map echoed into the job payload and webhook delivery. Maximum 16 keys; each value up to 500 characters.
Example request
Response
Returns202 Accepted immediately. Use data.job_id to poll for the result.
Request identifier (e.g.
req_pi_...).Always
"job".Initial status:
"queued".Unix timestamp of when the request was created.
UUID of the background job. Use this to poll for results.
Polling for the result
completed:
data.ad.image_url— the generated image URL (when you useexpand=ad)data.payload.image_url— same URL available directly on the job payload
Alias route
POST /api/v1/images/campaigns routes to the same backend. Use it if you prefer a path that mirrors the OpenAI images namespace.