# Ads (/docs/paid-media/ads)



An **ad** is a single creative variant running inside an ad set. Each ad
has its own performance metrics and lifecycle.

URLs:

* Meta: `/project/{projectId}/paid-media/meta/campaigns/{cid}/adsets/{aid}/ads`
* TikTok: `/project/{projectId}/paid-media/tiktok/campaigns/{cid}/adgroups/{aid}/ads`
* Flat view (across all campaigns):
  * Meta: `/project/{projectId}/paid-media/meta/ads`
  * TikTok: `/project/{projectId}/paid-media/tiktok/ads`

## Columns [#columns]

* Creative thumbnail.
* Headline / hook.
* Status (active / paused / archived).
* Spend.
* Impressions, clicks, CTR.
* Conversions, CPA.
* Frequency.
* Days running.
* Optimizer state.

## Detail panel [#detail-panel]

Click any ad → detail opens with tabs:

| Tab             | Contents                                                       |
| --------------- | -------------------------------------------------------------- |
| **Preview**     | Platform-accurate preview (mobile / desktop).                  |
| **Performance** | Curve charts: spend / conversions / CPA over time.             |
| **Optimizer**   | Current state, recent decisions, why.                          |
| **Creative**    | The underlying `ads_content` row, organic\_score, source pool. |
| **Audit**       | Every action taken on this ad with timestamp + actor.          |

## Optimizer panel [#optimizer-panel]

Shows:

* Current classification: one of `CRITICAL`, `UNDERPERFORMING`,
  `FATIGUED`, `HEALTHY`, `TOP_PERFORMER`, `LEARNING_PHASE`, `TOO_YOUNG`.
* Inputs that drove the state (7d spend, conversions, CPA, frequency).
* Most recent action.
* Why the optimizer DIDN'T act if you'd expect it to ("held — only
  2 days old, guardrail").

## Manual pause / activate [#manual-pause--activate]

Top-right of the detail panel. Pausing immediately stops spend; activating
resumes (subject to ad set / campaign also being active).

## Creative panel [#creative-panel]

The underlying `ads_content` row. Includes:

* Source: generated / UGC / manual.
* Organic score and decay curve.
* Override status (`include` / `exclude` / null).
* Safety flags.
* Current ad-spend boost (if any).

## Override an ad [#override-an-ad]

Set `override = 'include'` to keep this creative permanently eligible
even if its score drops below threshold. Set `override = 'exclude'` to
force it out of selection.

## Reading the audit tab [#reading-the-audit-tab]

Lists every action: launches, pauses, scale-ups, refreshes, manual
overrides, with timestamp and actor (user, optimizer, scheduler).
