Skip to main content
list_proposals is experimental (feature id media_buy.open_opportunities). Sellers that implement it list the feature id in experimental_features and set media_buy.open_opportunities.list_proposals: true on get_adcp_capabilities. See Experimental status.
list_proposals returns the seller’s current proposals for one account, narrowed to opportunities, media buys, or proposal IDs when the buyer supplies them. It is a synchronous read that never changes proposal or opportunity state. It is the repair read for proposal.created notifications, for proposal.offered (the buy-scoped sibling for seller offers against accepted media buys, defined under media_buy.seller_offers), and for proposal records in list_account_changes. Buyers learn that something changed from those signals and use list_proposals for current state, not for routine polling. Request schema: /schemas/3.3.0-beta.0/media-buy/list-proposals-request.json
To repair after a proposal.offered notification, read the proposal named in it with proposal_ids. To catch up on a buy after missed notifications, filter by buy:
Response schema: /schemas/3.3.0-beta.0/media-buy/list-proposals-response.json

Snapshot and disposition

Each proposal is the snapshot exactly as the seller issued it, so its terms_digest still verifies. Lifecycle state sits beside it in disposition, because a snapshot’s proposal_status (draft, committed, accepted) never changes after issue. Sellers keep a snapshot readable while it is available and for at least 30 days after it becomes accepted, declined, expired, or withdrawn. After that the snapshot may be gone; get_media_buys remains the record of accepted terms, and an older change-feed record repairs as unavailable. Refining or accepting a withdrawn snapshot fails with INVALID_STATE, as for a declined one. There is no withdrawal notification. origin says how the snapshot was created: A snapshot with proposal_initiator: "seller" is always listed with origin: "seller_offer".

Seller offers

Seller offers are distinct from later proposals. A later proposal is a draft new_media_buy the seller creates under the buyer’s later_proposals consent and announces with proposal.created. A seller offer is a committed change to a live buy, announced with proposal.offered; it needs no later_proposals consent. Post-purchase media_buy_update proposals are out of scope for later proposals, so media_buy_update appears here only as a seller offer. Both notifications are identifiers-only and repair through list_proposals. An outstanding offer (committed, not yet accepted, declined, or expired) is stale when a revision of its media buy leaves its base_media_buy_revision behind the buy’s current revision, whoever made the revision. A revision made by accepting the offer itself is not a staleness event, and terminal dispositions never change. A stale offer stays readable but cannot be accepted:
  • The seller derives the state from the buy’s current revision at read time, so it never lists a stale offer as available. It reports withdrawn, with disposition_changed_at set to the revision time. This is the one exception to the rule that a committed proposal is not withdrawn before expires_at: the buyer could not act on the offer anyway, and the seller may release the replacement inventory it held.
  • accept_proposal and refine_proposals for it fail with INVALID_STATE, like any withdrawn snapshot, and the existing base-revision check still guards acceptance. Once expires_at has passed, PROPOSAL_EXPIRED takes precedence.
  • It stays readable for at least 30 days after the revision, the same as any terminal disposition. No withdrawn notification is sent, so buyers must not cache available for an offer; read it with proposal_ids before acting.
Because stale offers are never available, media_buy_ids with dispositions: ["available"] returns only offers the buyer can still accept. A buyer that finds a notified offer missing from that scan reads it by proposal_ids, which distinguishes withdrawn (stale) from a snapshot past retention.

Opportunities

opportunities[] has one entry for each opportunity referenced by a returned proposal or named in opportunity_ids; unknown or inaccessible opportunity IDs are omitted. later_proposals is the consent the seller recorded and will enforce, including the computed window_ends_at and created_count. If updated_at shows a change the buyer did not make, another principal on the same account updated the opportunity.