Omneky API Docs
Image Ads

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.

POST/create_image_ad_async
How the request comes together
🎨
brand_dataLogo · fonts · colors · site
📦
product_metadataProduct photos & page
✏️
ad_copiesHeadline · subhead · CTA
⚙️
generation_metadataRatios · layout · direction
generate
1:14:59:16

Brighter skin in 14 days

Dermatologist tested · vegan formula

Shop Now
image_ad · job 8f1d2a3eSUCCESS

Authentication

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
No key yet? Request API access from your Omneky account team and we'll provision a key scoped to your brand workspace.

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.

1

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.

ParameterRequirementDescription
brand_dataMandatoryContainer for everything Omneky needs to know about your brand.
brand_urlOptionalURL to your homepage. Omneky scrapes this to understand brand positioning, tone, and style.
brand_imagesOptionalList of dictionaries. Each dict describes a single brand image.
  ↳ image_urlMandatoryPublic URL to the image.
  ↳ descriptionOptionalText describing the image.
  ↳ labelsOptionalList of text labels, e.g. "logo", "mascot".
fontsOptionalList of fonts used. Takes precedence over fonts inferred from brand_url.
color_swatchesOptionalBrand colors. Dictionary containing a hex code and a label.
2

product_metadata

Describes the product the ad should feature.

ParameterRequirementDescription
product_metadataOptionalContainer for product-specific context.
product_urlOptionalURL to the product webpage.
product_imagesOptionalList of dictionaries. Each dict describes a single product image.
  ↳ image_urlMandatoryPublic URL to the image.
  ↳ descriptionOptionalText describing the image.
  ↳ labelsOptionalList of text labels, e.g. "top view".
3

ad_copies

The lines of copy Omneky should render onto the creative.

ParameterRequirementDescription
ad_copiesOptionalList of dictionaries, one per line of copy.
copy_textMandatoryThe copy itself.
copy_typeMandatoryOne of "headline", "subheadline", "cta".
4

generation_metadata

Controls how the creative is generated — format, layout inspiration, and freeform direction.

ParameterRequirementDescription
generation_metadataOptionalContainer for generation controls.
aspect_ratiosOptionalAspect ratios to render, e.g. "1:1", "4:5", "9:16".
reference_layoutsOptionalList of existing image ads whose layout you want Omneky to mirror.
user_directionOptionalFreeform prompt describing what should appear in the ad. Takes precedence over every other field if provided.
user_direction overrides everything else in the request — including brand colors, reference layouts, and copy placement — so use it for one-off creative direction, not standing brand rules.
5

callback_url

Because generation runs asynchronously, Omneky notifies you when the ad is ready rather than holding the connection open.

ParameterRequirementDescription
callback_urlOptionalOmneky 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.

202Accepted
FieldTypeDescription
job_idstrUnique identifier for the generation job. Use it to poll GET /jobs/{job_id} or to match an incoming callback request.
typestrAlways "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.

GET/jobs/{job_id}
FieldTypeDescription
job_idstrThe job identifier you're checking.
typestrAlways "image_ad" for this endpoint.
statusstrOne of PENDING, PROCESSING, SUCCESS, FAILED.
responsedictThe 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": {}
}
The exact shape of response isn't fixed in this reference yet — treat it as an opaque dict until the schema is published, and prefer 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": {}
}
Poll 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.

ParameterRequirementDescription
brand_dataMandatoryEverything Omneky needs to know about your brand.
brand_urlOptionalURL to homepage. Omneky scrapes it to understand your brand and positioning.
brand_imagesOptionalList of dictionaries. Each dict describes a single image.
  ↳ image_urlMandatoryPublic URL to image.
  ↳ descriptionOptionalText describing the image.
  ↳ labelsOptionalList of text, e.g. "logo", "mascot".
fontsOptionalList of fonts used. Takes precedence over the brand.
color_swatchesOptionalColors used. Dict containing hexcode and label.
product_metadataOptionalProduct-specific context.
product_urlOptionalURL to the product webpage.
product_imagesOptionalList of dictionaries. Each dict describes a single image.
  ↳ image_urlMandatoryPublic URL to image.
  ↳ descriptionOptionalText describing the image.
  ↳ labelsOptionalList of text, e.g. "top view".
ad_copiesOptionalList of dictionaries, one per line of copy.
copy_textMandatoryThe copy itself.
copy_typeMandatory"headline", "subheadline", "cta".
generation_metadataOptionalGeneration controls.
aspect_ratiosOptionalRatios to render, e.g. "1:1", "4:5".
reference_layoutsOptionalList of image ads whose layout you want to mirror.
user_directionOptionalPrompt about what to show. Takes precedence over all other fields.
callback_urlOptionalOmneky POSTs the finished result to this endpoint.

Summary

ActionEndpoint
Create an image adPOST /create_image_ad_async
Check job statusGET /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.

Contact support