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

# Campaign readiness

> The readiness.status and readiness.reasons fields on a campaign read — what each reason code means and how agents should surface them as actionable next steps.

Every `get(kind: "campaign")` response on the V3 surface includes a `readiness`
object that tells an agent whether the campaign can actually deliver. Use
`readiness.status` and `readiness.reasons` — not `phase` — to answer "is this
campaign ready to deliver?" questions.

## Why `phase` alone is not enough

A campaign with `phase: active` is launched, but that does not mean it is
delivering. A launched campaign can be blocked by missing configuration (no
budget, no staged media buys), an inactive lifecycle state (paused, archived,
completed, or canceled), or flight dates that are outside the current window.
`readiness.status` captures all of these; `phase` does not.

## Fields

| Field               | Type                       | Description                                                                                                                               |
| ------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `readiness.status`  | `"ready"` or `"not_ready"` | `not_ready` when at least one delivery prerequisite is unmet, or the campaign is in an inactive lifecycle state.                          |
| `readiness.reasons` | `string[]`                 | One or more stable reason codes (see below). Empty when `status` is `ready`. Surface each entry as an actionable next step for the buyer. |

## Reason codes

| Code                 | Meaning                                                                                                       | Suggested next step                                                                                                                          |
| -------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `advertiser_missing` | No advertiser is linked to the campaign.                                                                      | Associate an advertiser via `save_campaign`.                                                                                                 |
| `no_budget`          | No campaign budget is configured.                                                                             | Add a budget via `save_campaign`.                                                                                                            |
| `no_staged_buys`     | No media buys exist, or all existing buys are in a terminal state (completed, canceled, failed, or rejected). | Call `request_proposals` or `save_media_buy` to stage inventory.                                                                             |
| `flight_not_started` | The campaign's flight start date is in the future.                                                            | The campaign will begin delivering automatically when the start date arrives; no action is needed unless the buyer wants to adjust the date. |
| `flight_ended`       | The campaign's flight end date has passed.                                                                    | The campaign can no longer deliver. The buyer may want to extend the flight or archive the campaign.                                         |

## Agent guidance

* Check `readiness.status` before telling the buyer whether a campaign is
  delivering. `phase: active` is not sufficient evidence.
* When `readiness.status` is `not_ready`, surface every entry in
  `readiness.reasons` as a concrete next step — never just say "the campaign
  isn't ready."
* When `readiness.reasons` is empty but `readiness.status` is `not_ready`, the
  campaign is in an inactive lifecycle state (paused, archived, completed, or
  canceled); tell the buyer the campaign's current lifecycle state instead.
* Multiple reasons can be present at once. Address them all.
