pending_creatives, and shows how a buy a source accepts
out-of-band resolves through a submitted task.
The AdCP wire status described here is one of three distinct status
surfaces a buyer can see for the same buy. They do not replace each other — see
Three status surfaces before treating any one as
“the” status.
The AdCP media-buy status
When a buyer’s agent calls a storefront’s AdCP agent (create_media_buy,
update_media_buy), a confirmed buy carries a per-buy media_buy_status. It is
one of seven values:
| Status | What it means to a buyer |
|---|---|
pending_creatives | Accepted, but no approved creative is assigned yet, so it cannot launch. The buy waits here until a creative is approved and attached. |
pending_start | Accepted with creatives ready, but the flight has not started. It launches automatically when the start date arrives. |
active | Live and delivering against the flight. |
paused | Delivery is halted and resumable — by the buyer, or because the buy was created paused. |
completed | The flight finished or the budget fully delivered. Terminal. |
rejected | The source declined the buy. Terminal — resubmit only after addressing the reason. |
canceled | Stopped before completion, by the buyer or the source. Terminal. |
There is no
pending_approval value in the AdCP media-buy status. Insertion-order
signing, governance review, and other pre-issuance steps are not modeled as a
buy status — they happen at the task layer, before a media_buy_id exists.
See Asynchronous acceptance.Why a buy reads pending_creatives
pending_creatives is the default landing state for a buy that has been
accepted but has nothing launch-ready attached. Two distinct situations both
surface as pending_creatives:
- No creative is assigned yet. The buy exists, but the buyer has not synced or assigned an approved creative to it.
- The source is moderating the buy. Some sources accept a buy and then park
it for manual review — checking creatives, signing an insertion order, or
applying a content policy — before it is launch-eligible. While that review is
outstanding the buy is accepted but not launch-ready, and reads
pending_creatives.
Asynchronous acceptance: the submitted task
A source does not always confirm a buy before the response is emitted. When a source accepts a buy out-of-band — parking it for manual moderation, queuing it for batch processing, or awaiting an insertion-order signature — the storefront returns a submitted task envelope instead of a confirmed buy:media_buy_id on this response — the buy is not confirmed yet. The
buyer resolves it the same way as any async operation: poll the task (the
AdCP tasks_get operation) with the task_id, or await a webhook if a
push-notification config was attached to the original call. See
Tasks for the concrete polling endpoint, webhook setup, and
back-off mechanics.
submitted and working mean the task is still processing — keep polling.
Otherwise it resolves to one of three terminal task states, and the outcome
lands on its completion artifact:
| Task status | What you get |
|---|---|
completed | The confirmed media_buy_id plus its media_buy_status — typically pending_creatives or pending_start (or rejected / canceled if the source accepted the buy and then declined or stopped it). |
input-required | The source needs something more from you before it can finish. Inspect the response and error.suggestion, then resubmit the call with the correction. See Tasks. |
failed | The operation could not complete — including a source that declined the buy outright; the error object explains why. |
An
update_media_buy edit that a source queues for moderation behaves
identically: the storefront returns a submitted task envelope, and the edit’s
result lands on the task’s completion artifact. The same poll-or-webhook pattern
applies.Three status surfaces
The same buy can be described by three different status vocabularies depending on which surface you read. They answer different questions and use different value sets — keep them distinct.| Surface | Field | Value set | What it describes |
|---|---|---|---|
| AdCP per-buy (this page) | media_buy_status | pending_creatives, pending_start, active, paused, completed, rejected, canceled | One buy’s lifecycle on the AdCP wire. |
| AdCP account rollup | operational_status | no_media_buys, draft, pending_creatives, pending_start, active, paused, completed, attention_required | An account-level rollup across all of a buyer’s buys. no_media_buys, draft, and attention_required are rollup-only. |
| Interchange buyer rollup | status | DRAFT, PENDING_APPROVAL, INPUT_REQUIRED, ACTIVE, PAUSED, COMPLETED, CANCELED, FAILED, REJECTED, ARCHIVED | The higher-level Interchange campaign and media-buy rollup. See Media Buy → Status. |
pending_creatives and pending_start both collapse to PENDING_APPROVAL:
AdCP media_buy_status | Interchange status |
|---|---|
pending_creatives, pending_start | PENDING_APPROVAL |
active | ACTIVE |
paused | PAUSED |
completed | COMPLETED |
rejected | REJECTED |
canceled | CANCELED |
pending_creatives buy and one active buy reports
PENDING_APPROVAL. Interchange also has states from its own flow that no AdCP
wire value maps to — DRAFT (before execution), INPUT_REQUIRED, FAILED, and
ARCHIVED.
Related
Media Buy
The media-buy object and the Interchange rollup status table
Tasks
Polling, webhooks, and back-off for the submitted task envelope
Get media buy status
Poll live AdCP status across sales agents
Glossary
One-line definitions of every v2 term