> ## Documentation Index
> Fetch the complete documentation index at: https://www.adjar.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Creative Config Reference

Ad creatives in Adjar are defined inside `[[campaigns.ad_groups.ads]]` entries, nested within the ad group they belong to. An OpenAI Ads creative is a **chat card** — a single card shown inside ChatGPT with a title, a body line, an optional price, an image, and a destination URL. Keeping your creative config clean and well-named makes it easy for both humans and AI agents to identify, edit, and test ads without touching the wrong one.

## Full Example

```toml theme={null}
[[campaigns.ad_groups.ads]]
name = "All-in-one governance card"
status = "active"

[campaigns.ad_groups.ads.creative]
type = "chat_card"
title = "All-in-one Database governance"
body = "Just-in-time access, schema migration, data fix, audit log"
target_url = "https://www.bytebase.com/"
file_id = "file_00000000847481f79653838c61680cea"
```

***

## `[[campaigns.ad_groups.ads]]`

Each entry in the `ads` array represents a single ad within the parent ad group.

<ParamField path="ads.name" type="string" required>
  A descriptive internal name for this ad. 3–1000 characters. The name is not shown to users — it exists so that you and your AI agent can reference this specific ad unambiguously in instructions and diffs. Prefer names that reflect the creative angle (`"Approvals Angle"`) over generic labels (`"Ad 1"`).

  ```toml theme={null}
  name = "All-in-one governance card"
  ```
</ParamField>

<ParamField path="ads.status" type="string" required>
  Whether the ad is eligible to serve.

  | Value      | Behaviour                        |
  | ---------- | -------------------------------- |
  | `"active"` | Ad is live and eligible to serve |
  | `"paused"` | Ad is suspended but retained     |

  ```toml theme={null}
  status = "active"
  ```

  A newly created ad also carries a **review status** on the platform side (`in_review`, `approved`, or `rejected`); an ad serves only once its campaign, ad group, and the ad itself are active *and* review has approved it. Review status is reported by the platform, not something you set in config.
</ParamField>

***

## `[campaigns.ad_groups.ads.creative]`

The creative is a nested table on the ad. Today Adjar supports the `chat_card` type.

<ParamField path="creative.type" type="string" required>
  The creative format. Currently supported value:

  | Value         | Description                            |
  | ------------- | -------------------------------------- |
  | `"chat_card"` | A standalone card shown inside ChatGPT |

  ```toml theme={null}
  [campaigns.ad_groups.ads.creative]
  type = "chat_card"
  ```
</ParamField>

<ParamField path="creative.title" type="string" required>
  The card's headline. **3–50 characters.**

  ```toml theme={null}
  title = "All-in-one Database governance"
  ```
</ParamField>

<ParamField path="creative.body" type="string" required>
  The card's body line. **Maximum 100 characters.**

  ```toml theme={null}
  body = "Just-in-time access, schema migration, data fix, audit log"
  ```
</ParamField>

<ParamField path="creative.price" type="string">
  Optional price text shown on the card (a display string, e.g. `"$19/mo"`). Omit if not applicable.

  ```toml theme={null}
  price = "$19/mo"
  ```
</ParamField>

<ParamField path="creative.target_url" type="string" required>
  The destination URL the card links to.

  ```toml theme={null}
  target_url = "https://www.bytebase.com/"
  ```
</ParamField>

<ParamField path="creative.file_id" type="string" required>
  The ID of the uploaded image used on the card, e.g. `file_00000000847481f79653838c61680cea`. Upload the image to OpenAI Ads first (via the platform's file upload) to obtain the ID, then reference it here.

  ```toml theme={null}
  file_id = "file_00000000847481f79653838c61680cea"
  ```
</ParamField>

***

## Related Pages

* [Campaigns](/docs/config/openai/campaigns) — campaign budgets, bidding, targeting, and the ad groups these ads live in
* [Account Root](/docs/config/openai/account) — how campaign files (and the ads inside them) are imported
