proposalCode. The seller runs discovery, picks the proposal they want to extend, and saves it; the buyer later redeems the code on discover_products to receive the exact frozen offer. The saved snapshot — products and proposals — does not change after creation, so the offer the buyer sees is the offer the seller approved.
Proposals move through a lifecycle: active (available to redeem), redeemed (the buyer applied it to a media buy), expired (past its TTL), and revoked (the seller withdrew it). You set an expiresAt on creation; you can edit the label, notes, or expiry while it is open, and revoke it to pull it back.
All examples use the storefront base URL:
Authorization: Bearer $SCOPE3_API_KEY.
Task reference
Create proposal
POST /proposals — freeze a discovery offer and mint a codeList proposals
GET /proposals — all proposals, filterable by status and operatorGet proposal
GET /proposals/{id} — one proposal with its saved snapshotUpdate proposal
PATCH /proposals/{id} — edit label, notes, or expiryRevoke proposal
POST /proposals/{id}/revoke — withdraw a code so it can’t be redeemed