GET /api/v2/storefront/readiness
Checks whether your storefront is ready to go live. Returns blocking checks for
inventory sources, agent status, agent auth, and, for seller-settled storefronts,
the confirmed settlement currency (currency_confirmed), plus a per-source
sourceDiagnostics[] array used by setup surfaces. Poll this while you connect
sources to see what is still missing.
For seller-settled storefronts, the currency_confirmed check is a blocker and
stays missing until you set a primary settlement currency with
PUT /api/v2/storefront { "defaultCurrency": "USD" } (ISO-4217). It is
independent of billing setup — saving payout details does not satisfy it.
Direct sales adapter storefronts run by our expert agents skip
currency_confirmed and settlement_currency_match because Interchange does
not pay the seller on that path; the buyer pays the downstream platform directly
through their selected platform account.
For seller-settled storefronts that need to be paid in more than one currency,
also send paymentCurrencies — the ISO-4217 currencies your storefront will be
paid in, e.g.
PUT /api/v2/storefront { "defaultCurrency": "USD", "paymentCurrencies": ["USD", "GBP"] }. On a currency you settle there is no FX: the currency a buyer pays in
is exactly the currency you are paid in, so you cannot sell a pricing option in a
currency that is not in this set. The marketplace may additionally accept a buyer
currency outside your set via cross-currency FX —
converting each source cost to the buyer’s currency while you are still paid in
your own. A media buy must be denominated in a currency you transact (your defaultCurrency
is always included); discovery only surfaces a product to a buyer in a currency
you accept, and a buyer whose currency you don’t accept gets no products (an
empty list, not an error) rather than ones they can’t buy. If paymentCurrencies
is empty or omitted, it falls back to defaultCurrency, so a single-currency
storefront need not set it.
Request
curl
Response
Response fields
| Field | Type | Description |
|---|---|---|
platformId | string | Your storefront’s public slug |
status | enum | Overall readiness: ready or blocked |
checks[] | array | Top-level readiness checks (see below) |
sourceDiagnostics[] | array | Per-inventory-source diagnostics (see below) |
setupMode | object | null | Per-source composition classification and aggregate verdict used by setup surfaces. Fields: sources[], managedSalesAgents[], composition ({ required, sourceCount }), passthrough ({ sourceCount }), unknown ({ sourceCount }), recommendation ("composition" | "passthrough" | "mixed" | "undecided"). null when inference fails (e.g. cold cache). |
checks[]
| Field | Type | Description |
|---|---|---|
id, name, description, category | string | Check identity and grouping |
status | enum | complete, partial, missing, or optional. optional checks are explicitly skipped (e.g. billing in non-production) and never block |
isBlocker | boolean | Whether this check blocks going live |
method | string | How the check was evaluated. Optional |
details | string | Human-readable detail. Optional |
compliance[] | array | Per-agent compliance results (present on agent_connectivity checks). Each is { agentId, agentUrl, passed, summary, tracks[], observations[] }. A track’s status is pass/fail/partial/skip; a skip track did not run and is labelled “not run” / “no coverage”. observations[] carries advisory { category, severity, message } notes. Compliance is informational and does not block going live. |
operator_domain check distinguishes two setup states. If no operator
domain is set, it is missing. If a domain is set but not verified yet, it is
partial with details like <domain> is pending verification; go-live is
still blocked until the registered organization domain is approved or ownership is confirmed.
sourceDiagnostics[]
| Field | Type | Description |
|---|---|---|
id, sourceId | string | null | Surrogate id and storefront-scoped source id |
name | string | Inventory source display name |
executionType, sourceStatus | string | Source type and current source lifecycle status |
agentId, agentStatus, endpointUrl, protocol | string | null | Linked agent identity and transport |
auth | object | { required, configured, type } — whether auth is needed, set, and which type |
capabilities | object | Support state for products, createMediaBuy, updateMediaBuy, signals, wholesaleProducts — each supported, unsupported, or unknown |
productBuilder | object | null | { mode (composition|passthrough|unknown), wholesaleProductCount, signalCount, catalogCacheCold, declaredUnsupportedIngredients }. For component-cache diagnostics, wholesaleProductCount > 0 means cached raw products are available, declaredUnsupportedIngredients: true means the source explicitly does not provide usable cached components, and catalogCacheCold: true means readiness cannot classify the source until cache refresh has evidence. Third-party sales-agent sources are checked for component-cache readiness only when product composition is on and the source reports AdCP 3.1+ support; otherwise readiness treats them as pass-through. |
compliance | object | null | { passed, summary, checkedAt, trackCounts: { total, passing, partial, failing } } |
debug | object | Sanitized capability metadata: advertised tools, supportedBillings, channels, publisherDomains, version, syntheticCapabilities, requireOperatorAuth |
lastActivity | object | null | Latest setup activity { action, resourceType, resourceId, resourceName, description, timestamp } |
health | object | { status (healthy|degraded|unhealthy|unknown), lastError, lastErrorCode, lastErrorAt, lastSuccessAt, lastCheckedAt } |
Errors
401 UNAUTHORIZED— missing or invalid bearer token.
Related
Storefront overview
Readiness, marketplace review, and AAO signals.
Inventory sources
Connect the sources readiness checks against.
Diagnose third-party sales agents
Interpret source health and recent ADCP activity.
Discover agents
Inspect the AAO registry for your operator domain.