Platform status
ACTIVE does not always mean delivering. Its operational status is pending_creatives (accepted,
but a required creative is missing), pending_start (accepted, flight not started) or active.
Whose side owns the wait
When a buy is not moving,pendingAt and pendingReason say who holds it:
A failed buy carries
errorCode (for example product_no_longer_available, source_rejected,
storefront_rejected, quote_expired) and errorOwner: buyer_input, platform or seller.
Asynchronous acceptance
Guaranteed and manually reviewed buys are not accepted in the same call. The seller returns an AdCP task insubmitted state; the buy shows PENDING_APPROVAL. Semicola polls that task and updates
the buy when the seller decides. Read the buy’s status with get or the campaign’s media buy status
to follow it. Webhook notifications for buy decisions aren’t available yet; the only buyer webhook
event today is discovery.revision.