Skip to main content
GET /api/v2/storefront/readiness Computes whether your storefront can transact now. Returns blocking checks for inventory sources, agent status, agent auth, and, for Interchange-cleared 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 Interchange-cleared 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. There is no implicit currency. A storefront without a supported defaultCurrency is blocked, absent from transaction-ready discovery, and rejects new media buys. Setting a supported currency removes that blocker automatically; it does not rewrite the seller’s pause choice. 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 Interchange-cleared 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. Changing the settlement currency after go-live is guarded. Operator fixed prices are only shown to buyers in the storefront’s settlement currency, so changing defaultCurrency on a live (transacting) storefront can hide products buyers can currently purchase. When the change would hide one or more buyer-visible products, PUT /api/v2/storefront rejects it with a VALIDATION error stating the affected product count; confirm the impact and retry with { "defaultCurrency": "EUR", "confirmCurrencyCatalogImpact": true } to proceed. Hidden products reappear once their fixed prices are re-authored in the new settlement currency. Non-transacting storefronts and zero-impact changes are unaffected.

Request

curl

Response

Response fields

checks[].guidance

Every incomplete hard requirement includes one canonical explanation. Murph, V3 account status, and inventory-source reads consume this same object instead of inferring demand or causality from source call counts. Complete hard requirements and non-blocking checks omit guidance.

liveness

One derived liveness status per storefront, computed server-side over the checks, source diagnoses, and settlement invariants above. The seller setup page and the account switcher’s per-storefront status dot both present this same verdict — there is exactly one answer to “is my storefront live?”. The four states:
  • setup (rendered gray) — the storefront is not live yet, and that is expected: it is in setup, pre-launch, or deliberately paused before ever going live. Setup is not failure — no matter how many steps remain, a storefront that never went live is never shown as broken.
  • live (green) — live and healthy. Buyers can discover and buy.
  • live_attention (yellow) — live, with something worth acting on that has not broken the promise to buyers (for example, a degraded inventory source that isn’t affecting what buyers can purchase).
  • live_critical (red) — the storefront reached live and the promise to buyers is now broken: it was paused or a go-live requirement regressed after going live (e.g. the settlement currency became unsupported, or the buyable catalog emptied post-launch), or a critical problem is stopping buys.
“Reached live” means durable evidence: a completed real buyer media buy, the recorded setup history showing every current go-live requirement was once complete, or a previously recorded live status. Once your storefront has been observed live it never drops back to setup — a newly introduced or broken requirement shows as live_critical instead, so an outage is always visible (and alerted) as a broken promise, never hidden as setup. A passed no-spend sandbox test alone does not make a storefront “live” — a mid-setup storefront that just ran its first test stays setup. The status reflects the buyer’s reality: a dead source that carries no buyer-visible products does not change the state, and connect/pass-through storefronts (selling through their own third-party sales agent) are never gated on merchandising requirements that don’t apply to their path. A flip away from live sends a proactive notification — you don’t have to notice the dot change color to find out. See Notifications for the storefront.liveness_degraded / storefront.liveness_recovered event types, their payload, and the dedupe rules (a storefront sitting degraded is not re-notified every sweep; a further worsening is).

checks[]

The 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. Transaction admission verifies product availability strictly: These wholesale/component checks apply only when product composition is part of the storefront path. A pure third-party sales-agent pass-through storefront is not required to publish or cache a wholesale catalog in Interchange; its live agent path and transaction validation remain the applicable gates.
  • Untraffickable catalog. source_products_traffickable blocks the flip when EVERY synced product across your non-managed sources is untraffickable (e.g. hosted video with no duration, or a display format with no width/height) — you would otherwise sell nothing that can actually traffic. It stays a non-blocking warning when only some products are affected; the rest can sell.
  • Unverified catalog. If product availability can’t yet be confirmed (a cold, not-yet-fetched catalog cache), the flip warms the catalog with a live fetch and rechecks once before deciding. If it is still unconfirmed, products_available blocks with “Catalog not yet verified — retry in a moment” instead of allowing a buy.
product_publisher_domains warns when an active product has no publisher-domain mapping or references a domain the storefront has not declared. It remains non-blocking while older catalogs are backfilled. For every storefront, publisher_domains requires at least one declared domain so buyers know what is being sold. Neither check requires that domain to authorize Interchange. The separate publisher_authorization warning reports adagents.json/AAO authorization progress and never blocks transactions. The operator domain identifies the company running the storefront and is not used as a publisher domain unless the seller declares it as one. The compatibility-named publish_validation check requires one durable successful transaction. A completed seller-owned no-spend sandbox test or a successful live buyer media buy satisfies it permanently. The sandbox path can exercise a pre-live storefront without exposing it to ordinary buyer discovery; it is server-authored, seller-scoped, respects Pause, and cannot bypass another readiness blocker. Failed later tests remain diagnostic evidence but do not erase an earlier successful transaction. The check is scoped to the storefront’s connected source mix, because it exists to prove an unproven transaction path — it never asks you to prove plumbing Scope3 already operates:
  • Managed-only. If every connected source is your Scope3-managed sales agent (ad server), the check reports complete with “Covered by your managed sales agent” — it counts toward your required steps without asking for a separate test.
  • Mixed. If you also connect a third-party sales agent (or a modular source whose recipe executes campaigns, such as CitrusAd), the check still applies — that path is unproven — and its description names which source(s) the test still needs to cover.
  • Third-party only. If none of your connected sources is the Scope3-managed sales agent, the check applies as described above.
In exceptional cases Scope3 may approve a storefront-specific service override for publish_validation. The readiness item remains complete but reports method: service_override and names the approval evidence; it never claims a transaction occurred. The exception does not bypass Pause, publisher-domain declaration, product availability, or any other readiness requirement. If a live storefront’s buyer-visible catalog later empties (for example, manual pricing expiring), you get a proactive notification naming the cause and the fix — see Troubleshoot source problems. Its effective status automatically becomes blocked; isPaused is unchanged. Ad-server-derived pricing has a 60-day freshness ceiling. A product priced from ad-server reporting history stays buyable only while its catalog keeps refreshing; if the sync stops and a cached price goes more than 60 days without a refresh, the product is hidden from buyers rather than quoted on a stale price. When this is the only reason your catalog is hidden, the products_available blocker names the stale ad-server sync as the cause and its fix is checking the ad-server connection — not uploading a pricing feed. A successful sync restores the pricing automatically.

sourceDiagnostics[]

Errors

  • 401 UNAUTHORIZED — missing or invalid bearer token.
See Errors for the full error contract.

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.