Create Image Ad API
Generate a brand-aligned, on-product image ad from a single API call. Send Omneky your brand assets, product imagery, and ad copy — the agent reads your positioning, composition, and color, then returns a ready-to-launch creative.
Brighter skin in 14 days
Dermatologist tested · vegan formula
Shop NowAuthentication
Every request to the Omneky API is authenticated with an API key issued from your workspace settings. Pass it as a bearer token on every request, server-side only.
Authorization: Bearer YOUR_API_KEY
Quickstart guide
Prerequisites
Before you begin, make sure you have:
- An Omneky account with API access enabled
- Your API key (see Authentication above)
- Publicly accessible URLs for any brand or product images you reference
Building a request means assembling four pieces — brand_data, product_metadata, ad_copies, and generation_metadata — then POSTing them to /create_image_ad_async. Generation runs asynchronously: you get a job_id back right away and either poll for the result or receive it at your callback_url. The sections below walk through each piece.
brand_data
Tells Omneky who the ad is for. Provide a brand URL for Omneky to scrape automatically, or supply brand images, fonts, and colors directly for tighter control.
| Parameter | Requirement | Description |
|---|---|---|
| brand_data | Mandatory | Container for everything Omneky needs to know about your brand. |
| ↳ brand_url | Optional | URL to your homepage. Omneky scrapes this to understand brand positioning, tone, and style. |
| ↳ brand_images | Optional | List of dictionaries. Each dict describes a single brand image. |
| ↳ image_url | Mandatory | Public URL to the image. |
| ↳ description | Optional | Text describing the image. |
| ↳ labels | Optional | List of text labels, e.g. "logo", "mascot". |
| ↳ fonts | Optional | List of fonts used. Takes precedence over fonts inferred from brand_url. |
| ↳ color_swatches | Optional | Brand colors. Dictionary containing a hex code and a label. |
product_metadata
Describes the product the ad should feature.
| Parameter | Requirement | Description |
|---|---|---|
| product_metadata | Optional | Container for product-specific context. |
| ↳ product_url | Optional | URL to the product webpage. |
| ↳ product_images | Optional | List of dictionaries. Each dict describes a single product image. |
| ↳ image_url | Mandatory | Public URL to the image. |
| ↳ description | Optional | Text describing the image. |
| ↳ labels | Optional | List of text labels, e.g. "top view". |
ad_copies
The lines of copy Omneky should render onto the creative.
| Parameter | Requirement | Description |
|---|---|---|
| ad_copies | Optional | List of dictionaries, one per line of copy. |
| ↳ copy_text | Mandatory | The copy itself. |
| ↳ copy_type | Mandatory | One of "headline", "subheadline", "cta". |
generation_metadata
Controls how the creative is generated — format, layout inspiration, and freeform direction.
| Parameter | Requirement | Description |
|---|---|---|
| generation_metadata | Optional | Container for generation controls. |
| ↳ aspect_ratios | Optional | Aspect ratios to render, e.g. "1:1", "4:5", "9:16". |
| ↳ reference_layouts | Optional | List of existing image ads whose layout you want Omneky to mirror. |
| ↳ user_direction | Optional | Freeform prompt describing what should appear in the ad. Takes precedence over every other field if provided. |
callback_url
Because generation runs asynchronously, Omneky notifies you when the ad is ready rather than holding the connection open.
| Parameter | Requirement | Description |
|---|---|---|
| callback_url | Optional | Omneky makes a callback POST request to this endpoint once the job finishes, with the same payload returned by GET /jobs/{job_id}. |
Submission response
A successful call to POST /create_image_ad_async doesn't return the finished ad — it returns immediately with a job to track.
| Field | Type | Description |
|---|---|---|
| job_id | str | Unique identifier for the generation job. Use it to poll GET /jobs/{job_id} or to match an incoming callback request. |
| type | str | Always "image_ad" for this endpoint. |
{ "job_id": "8f1d2a3e-9c44-4b77-9e2a-2f0b6a5d11c0", "type": "image_ad" }
Check job status
Poll this endpoint with the job_id from the submission response to track progress and retrieve the result once it's ready.
| Field | Type | Description |
|---|---|---|
| job_id | str | The job identifier you're checking. |
| type | str | Always "image_ad" for this endpoint. |
| status | str | One of PENDING, PROCESSING, SUCCESS, FAILED. |
| response | dict | The job result. Populated once status is SUCCESS (or carries failure details when FAILED); empty while PENDING or PROCESSING. |
{ "job_id": "8f1d2a3e-9c44-4b77-9e2a-2f0b6a5d11c0", "type": "image_ad", "status": "SUCCESS", "response": {} }
callback_url over polling when you can.Example request & response
Putting it all together — a complete request for a skincare brand, the immediate 202 acknowledgement, and a status check once the job finishes.
curl --request POST \ --url https://api.omneky.com/create_image_ad_async \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer YOUR_API_KEY' \ --data '{ "brand_data": { "brand_url": "https://www.exampleskincare.com", "brand_images": [ { "image_url": "https://cdn.exampleskincare.com/logo.png", "description": "Primary brand logo", "labels": ["logo"] } ], "fonts": ["Inter", "DM Sans"], "color_swatches": [ { "hexcode": "#322996", "label": "Brand Indigo" }, { "hexcode": "#D4384F", "label": "Brand Red" } ] }, "product_metadata": { "product_url": "https://www.exampleskincare.com/products/vitamin-c-serum", "product_images": [ { "image_url": "https://cdn.exampleskincare.com/serum-front.jpg", "description": "Vitamin C serum, front label", "labels": ["front view"] } ] }, "ad_copies": [ { "copy_text": "Brighter skin in 14 days", "copy_type": "headline" }, { "copy_text": "Dermatologist tested, vegan formula", "copy_type": "subheadline" }, { "copy_text": "Shop Now", "copy_type": "cta" } ], "generation_metadata": { "aspect_ratios": ["1:1", "4:5"], "reference_layouts": [], "user_direction": "Bright, clean studio lighting with the serum bottle centered." }, "callback_url": "https://www.exampleskincare.com/webhooks/omneky" }'
# 202 Accepted — returned immediately { "job_id": "8f1d2a3e-9c44-4b77-9e2a-2f0b6a5d11c0", "type": "image_ad" }
# GET /jobs/8f1d2a3e-9c44-4b77-9e2a-2f0b6a5d11c0 → 200 OK { "job_id": "8f1d2a3e-9c44-4b77-9e2a-2f0b6a5d11c0", "type": "image_ad", "status": "SUCCESS", "response": {} }
GET /jobs/{job_id} until status is SUCCESS or FAILED, or set callback_url and let Omneky notify you — most image ads finish in under a minute.Full parameter reference
Every field accepted by POST /create_image_ad_async, in one place.
| Parameter | Requirement | Description |
|---|---|---|
| brand_data | Mandatory | Everything Omneky needs to know about your brand. |
| ↳ brand_url | Optional | URL to homepage. Omneky scrapes it to understand your brand and positioning. |
| ↳ brand_images | Optional | List of dictionaries. Each dict describes a single image. |
| ↳ image_url | Mandatory | Public URL to image. |
| ↳ description | Optional | Text describing the image. |
| ↳ labels | Optional | List of text, e.g. "logo", "mascot". |
| ↳ fonts | Optional | List of fonts used. Takes precedence over the brand. |
| ↳ color_swatches | Optional | Colors used. Dict containing hexcode and label. |
| product_metadata | Optional | Product-specific context. |
| ↳ product_url | Optional | URL to the product webpage. |
| ↳ product_images | Optional | List of dictionaries. Each dict describes a single image. |
| ↳ image_url | Mandatory | Public URL to image. |
| ↳ description | Optional | Text describing the image. |
| ↳ labels | Optional | List of text, e.g. "top view". |
| ad_copies | Optional | List of dictionaries, one per line of copy. |
| ↳ copy_text | Mandatory | The copy itself. |
| ↳ copy_type | Mandatory | "headline", "subheadline", "cta". |
| generation_metadata | Optional | Generation controls. |
| ↳ aspect_ratios | Optional | Ratios to render, e.g. "1:1", "4:5". |
| ↳ reference_layouts | Optional | List of image ads whose layout you want to mirror. |
| ↳ user_direction | Optional | Prompt about what to show. Takes precedence over all other fields. |
| callback_url | Optional | Omneky POSTs the finished result to this endpoint. |
Summary
| Action | Endpoint |
|---|---|
| Create an image ad | POST /create_image_ad_async |
| Check job status | GET /jobs/{job_id} |
| Receive the finished ad (alternative to polling) | POST {your callback_url} |
Need help?
If you run into any issues integrating the Create Image Ad API, our team is one message away.