Overview
A storefront is a publisher’s inventory marketplace as seen from the buyer side. Each storefront wraps one or more inventory sources — the underlying ADCP agents (MCP or A2A) that handle product discovery and media-buy execution — and exposes them under a single name buyers can transact with. Buying through a storefront is gated on credentials per source: every inventory source declares whether it requires authentication, and the buyer registers credentials (API key, JWT, or OAuth) once per source. Once a source reportsconnected: true, discovery and media buys flow through it normally.
This page covers the buyer side: browsing storefronts, expressing interest
in upcoming supply, and wiring up credentials. If you operate a storefront,
see Storefront onboarding.
Why storefronts matter
- One-stop access to publisher inventory — a storefront aggregates multiple inventory sources behind a single ID, so buyers don’t track agent endpoints individually
- Per-source credential management — credentials are scoped to the inventory source, so rotating or revoking one doesn’t affect access to the others
- AAO compliance gating — marketplace storefronts are gated on the Agentic Advertising Organization registry; only compliant sources surface to buyers
- Multiple auth options — sources support API key, JWT, and OAuth flows, so the platform fits whatever the publisher’s agent already uses
- Discoverable upcoming supply —
/storefronts/discoverand/storefronts/interestlet buyers see and request access to publishers they aren’t yet connected to
Key fields
BuyerStorefront
| Field | Type | Description |
|---|---|---|
id | integer | Storefront ID |
platformId | string | Public-facing slug |
name | string | Storefront display name |
publisherDomain | string | null | Publisher domain |
sources | BuyerStorefrontSource[] | Inventory sources available in this storefront |
BuyerStorefrontSource
| Field | Type | Description |
|---|---|---|
sourceId | string | Inventory source identifier within the storefront |
name | string | Inventory source display name |
protocol | "MCP" | "A2A" | Agent communication protocol |
requiresCredentials | boolean | Whether the buyer must register credentials to use this source |
connected | boolean | Whether the buyer has active credentials for this source |
customerAccounts | [{ accountIdentifier, status }] | Buyer’s registered accounts for this source |
Detecting whether a source uses OAuth.
BuyerStorefrontSource does not
expose an explicit authType field. To find out which auth modes a source
accepts:requiresCredentials: false— no auth needed; you can call discovery and media-buy endpoints directly.requiresCredentials: true— POST to the credentials endpoint without a body; the validation error response lists the supported auth types (api_key,jwt,oauth). Alternatively, query the underlying agent’s ADCP capabilities, which advertise the supportedauthenticationtypes.
Common operations
Listing storefronts
GET /storefronts returns the storefronts you can transact with, paginated.
| Param | Notes |
|---|---|
name | Case-insensitive partial match on storefront name |
limit | 1..50 (default 20) |
offset | Pagination offset (default 0) |
Getting a storefront
GET /storefronts/:id returns a single storefront with the same shape as a
list item — useful when you already know the ID and want fresh source state.
Discovery (lightweight)
GET /storefronts/discover returns every storefront visible to a buyer —
both ACTIVE and PENDING (upcoming) — with just id, name,
publisherDomain, and status. This is the right endpoint for buyers who
don’t yet have programmatic access but want to see what supply is coming.
Discovery is intentionally minimal — no source list, no credential state.
Use it to populate a “what’s available” picker, then submit interest with
the IDs you care about.
Submitting interest
For private or upcoming storefronts you don’t yet have access to, submit an interest form. Scope3’s onboarding team picks it up via Slack.POST /storefronts/interest accepts:
| Field | Type | Notes |
|---|---|---|
storefrontIds | number[] | Up to 100 storefront IDs you’re interested in |
notes | string | Free-form notes, up to 4000 chars |
storefrontIds or notes.
GET /storefronts/interest:
Listing your credentials
GET /storefronts/credentials returns every credential you’ve registered
across all storefronts and sources. Use it to build a single “connected
sources” view in your dashboard without paging through each storefront.
Registering credentials per source
For sources that reportrequiresCredentials: true, you must register
credentials before you can run discovery or create media buys.
POST /storefronts/:storefrontId/sources/:sourceId/credentials
Inspect the source’s
protocol (MCP vs A2A) and requiresCredentials
fields on the parent storefront before calling this endpoint — sources that
report requiresCredentials: false don’t need this step.| Field | Type | Notes |
|---|---|---|
accountIdentifier | string | Unique account ID at the source (1..255 chars) |
auth | object | API key or JWT credentials. Required for non-OAuth sources. |
marketplaceAccount | boolean | Admin-only. When true, creates a marketplace account instead of a client account. |
Registering an account for a source
When you want a source to bill or report against a specific advertiser seat in your account, register an account withadvertiserId:
POST /storefronts/:storefrontId/sources/:sourceId/accounts
| Field | Type | Notes |
|---|---|---|
advertiserId | string | Numeric seat ID to associate with this account |
accountIdentifier | string | Unique account ID at the source (1..255 chars) |
auth | object | Credentials. Required for API_KEY/JWT sources, omitted for OAuth |
OAuth flow for OAuth-secured sources
Some inventory sources use OAuth. In that case, the credentials endpoint isn’t enough — the buyer must complete an interactive consent flow, and the source agent exchanges an authorization code for tokens via the storefront OAuth-authorize endpoint.The OAuth endpoints sit on the
/api/v2/storefront/... mount because they
power the storefront’s auth integration on behalf of buyers and sellers
alike. Buyers reach them by agentId — the underlying ADCP agent that
backs the inventory source. (You can discover the agent ID from the
storefront’s source list, or via the Discovery guide.)accountIdentifier is optional — when omitted, the platform uses
oauth_<customerId> as the placeholder identifier and you can rename the
account later.
Response
authorizeUrl. Open it in a popup or new
tab. The publisher’s IdP authenticates the user, asks them to consent, and
redirects back to the platform-hosted callback
(/api/v2/storefront/oauth/callback).
Step 3 — The platform finishes the exchange. The callback page exchanges
the authorization code for tokens, stores them under your customer + the
source’s underlying agent, and notifies the opener window via
postMessage({ type: 'oauth-complete' }) before auto-closing. Refresh
GET /api/buyer/storefronts/:storefrontId after that — the source should
now report connected: true.
If you need to drive the callback yourself (for example, in a non-browser
agent), POST /api/v2/storefront/agents/:agentId/oauth/callback accepts the
code and state directly.
The seller side of OAuth (callback URLs, state handling, secret rotation)
is documented in Storefront onboarding.
Endpoint reference
| Method | Path | Purpose |
|---|---|---|
GET | /storefronts | List storefronts (paginated) |
GET | /storefronts/:storefrontId | Get a single storefront |
GET | /storefronts/discover | Lightweight list of all storefronts (active + upcoming) |
GET | /storefronts/interest | Check your interest submission status |
POST | /storefronts/interest | Submit interest in one or more storefronts |
GET | /storefronts/credentials | List your credentials across all storefronts |
POST | /storefronts/:storefrontId/sources/:sourceId/credentials | Register credentials for a source |
POST | /storefronts/:storefrontId/sources/:sourceId/accounts | Register an account (with advertiser linkage) |
Related
Buyer onboarding
End-to-end setup for a new buyer customer.
Discovery
Once your sources are connected, run discovery to find products.
Advertiser
Advertisers are the seats you link to source accounts.
Storefront onboarding
Operating a storefront? Start here for the seller-side setup.