curl --request PUT \
--url https://api.interchange.io/api/v2/storefront \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.interchange.io/api/v2/storefront"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.interchange.io/api/v2/storefront', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"storefrontId": "1234",
"platformId": "acme-media",
"name": "Acme Media",
"publisherDomain": "acme.com",
"operatorDomain": "scope3.com",
"brandName": "Scope3",
"logoUrl": "<string>",
"membershipStatus": "AAO_FOUNDING_MEMBER",
"regions": [
"<string>"
],
"acceptedCountries": [
"<string>"
],
"acceptsAllCountries": true,
"advertisingPolicyDisclosure": [
"brief_acceptance"
],
"advertisedCountries": [
"<string>"
],
"advertisedChannels": [
"<string>"
],
"description": "<string>",
"channels": [
"<string>"
],
"website": "<string>",
"subtitle": "<string>",
"supportUrl": "<string>",
"privacyUrl": "<string>",
"termsUrl": "<string>",
"discoveryCard": {
"storefrontId": "<string>",
"platformId": "<string>",
"storefrontKind": "managed",
"displayName": "<string>",
"logoUrl": "<string>",
"logoBackground": "dark-bg",
"description": "<string>",
"website": "<string>",
"brandColors": {},
"channels": [
"<string>"
],
"countries": [
"<string>"
],
"acceptsAllCountries": true,
"coverageDeclarations": [
{
"channels": [
"<string>"
],
"countries": [
"<string>"
],
"acceptsAllCountries": true
}
],
"advertisingPolicies": "<string>",
"coverage": {
"channels": "declared",
"countries": "declared"
},
"provenance": {
"identity": {
"displayName": "operator",
"logoUrl": "operator",
"description": "operator",
"website": "operator",
"brandColors": "operator"
},
"coverage": {
"channels": "operator",
"countries": "operator"
},
"advertisingPolicies": "operator"
}
},
"demandContactName": "<string>",
"demandContactEmail": "<string>",
"operatorDomainVerified": true,
"routingMode": "CHEF",
"adapterProviderType": "amazon",
"adapterSourceKind": "sales",
"adapterCredentialMode": "BYOK",
"plan": "basic",
"transacting": true,
"isPaused": true,
"archivedAt": "2023-11-07T05:31:56Z",
"displayStatus": "configuring",
"capabilities": {
"offersCreativeReview": false,
"offersCampaignApproval": false,
"offersProductComposition": false
},
"merchandisingEntitled": true,
"listingDistributionEntitled": true,
"configuredCapabilities": {
"offersCreativeReview": false,
"offersCampaignApproval": false,
"offersProductComposition": false
},
"compositionPricing": {
"targetPercentile": "p75",
"rateCard": {
"facts": []
}
},
"creativeApproval": "auto",
"mediaBuyApproval": "auto",
"capabilitiesLocked": true,
"advertiseAsAgent": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"businessProfile": {
"summary": "<string>",
"agentName": "<string>",
"agentPersonality": "<string>",
"propertyCount": 5000,
"channels": [
"display"
],
"regions": [
"UK",
"EMEA"
],
"verticals": [
"sports",
"entertainment"
],
"publisherDomains": [
"pitchside.co.uk",
"football.pitchside.co.uk"
],
"evidenceUrls": [
"<string>"
],
"notes": "<string>",
"updatedBy": "<string>"
},
"logoBackground": "dark-bg",
"setupIntent": "third_party_connect",
"operatingMode": "LISTING_ONLY",
"operatingCapabilities": {
"listingSelected": true,
"scope3MerchandisingSelected": true
},
"sellsThirdPartyInventory": true,
"defaultCurrency": "<string>",
"paymentCurrencies": [
"<string>"
]
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Update storefront
Update the storefront configuration.
curl --request PUT \
--url https://api.interchange.io/api/v2/storefront \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.interchange.io/api/v2/storefront"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.interchange.io/api/v2/storefront', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"storefrontId": "1234",
"platformId": "acme-media",
"name": "Acme Media",
"publisherDomain": "acme.com",
"operatorDomain": "scope3.com",
"brandName": "Scope3",
"logoUrl": "<string>",
"membershipStatus": "AAO_FOUNDING_MEMBER",
"regions": [
"<string>"
],
"acceptedCountries": [
"<string>"
],
"acceptsAllCountries": true,
"advertisingPolicyDisclosure": [
"brief_acceptance"
],
"advertisedCountries": [
"<string>"
],
"advertisedChannels": [
"<string>"
],
"description": "<string>",
"channels": [
"<string>"
],
"website": "<string>",
"subtitle": "<string>",
"supportUrl": "<string>",
"privacyUrl": "<string>",
"termsUrl": "<string>",
"discoveryCard": {
"storefrontId": "<string>",
"platformId": "<string>",
"storefrontKind": "managed",
"displayName": "<string>",
"logoUrl": "<string>",
"logoBackground": "dark-bg",
"description": "<string>",
"website": "<string>",
"brandColors": {},
"channels": [
"<string>"
],
"countries": [
"<string>"
],
"acceptsAllCountries": true,
"coverageDeclarations": [
{
"channels": [
"<string>"
],
"countries": [
"<string>"
],
"acceptsAllCountries": true
}
],
"advertisingPolicies": "<string>",
"coverage": {
"channels": "declared",
"countries": "declared"
},
"provenance": {
"identity": {
"displayName": "operator",
"logoUrl": "operator",
"description": "operator",
"website": "operator",
"brandColors": "operator"
},
"coverage": {
"channels": "operator",
"countries": "operator"
},
"advertisingPolicies": "operator"
}
},
"demandContactName": "<string>",
"demandContactEmail": "<string>",
"operatorDomainVerified": true,
"routingMode": "CHEF",
"adapterProviderType": "amazon",
"adapterSourceKind": "sales",
"adapterCredentialMode": "BYOK",
"plan": "basic",
"transacting": true,
"isPaused": true,
"archivedAt": "2023-11-07T05:31:56Z",
"displayStatus": "configuring",
"capabilities": {
"offersCreativeReview": false,
"offersCampaignApproval": false,
"offersProductComposition": false
},
"merchandisingEntitled": true,
"listingDistributionEntitled": true,
"configuredCapabilities": {
"offersCreativeReview": false,
"offersCampaignApproval": false,
"offersProductComposition": false
},
"compositionPricing": {
"targetPercentile": "p75",
"rateCard": {
"facts": []
}
},
"creativeApproval": "auto",
"mediaBuyApproval": "auto",
"capabilitiesLocked": true,
"advertiseAsAgent": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"businessProfile": {
"summary": "<string>",
"agentName": "<string>",
"agentPersonality": "<string>",
"propertyCount": 5000,
"channels": [
"display"
],
"regions": [
"UK",
"EMEA"
],
"verticals": [
"sports",
"entertainment"
],
"publisherDomains": [
"pitchside.co.uk",
"football.pitchside.co.uk"
],
"evidenceUrls": [
"<string>"
],
"notes": "<string>",
"updatedBy": "<string>"
},
"logoBackground": "dark-bg",
"setupIntent": "third_party_connect",
"operatingMode": "LISTING_ONLY",
"operatingCapabilities": {
"listingSelected": true,
"scope3MerchandisingSelected": true
},
"sellsThirdPartyInventory": true,
"defaultCurrency": "<string>",
"paymentCurrencies": [
"<string>"
]
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Authorizations
API key or access token
Body
Request body for updating a storefront
Updated display name
1 - 255"Acme Media Network"
Deprecated legacy singular publisher domain. Use businessProfile.publisherDomains / publisher-domain sync state for the storefront publisher-domain set.
1 - 255Updated plan tier
basic Deprecated compatibility alias for the inverse of isPaused. It is not effective transaction availability.
Compatibility-named seller intake hold. True hides product discovery and blocks new media buys and buyer edits; approved unsent buys wait until it is false. It does not pause existing ad-server delivery. New storefronts default to false; effective transaction availability also depends on readiness and archival state.
Seller publication choice for an otherwise eligible Storefront. OPTED_OUT removes it from buyer discovery and automatic selection without changing Scope3 eligibility review; PUBLISHED cannot make an ineligible Storefront eligible.
PUBLISHED, OPTED_OUT Set to true to also resell third-party inventory from other Interchange storefronts; false to sell only the storefront’s own inventory sources.
Seller-confirmed settlement currency (ISO-4217). Required before go-live for Interchange-cleared Seller Accounts; never defaulted silently. Direct sales adapter Seller Accounts run by our expert agents skip settlement-currency readiness checks because Interchange does not pay the seller on that path.
^[A-Z]{3}$"EUR"
ISO-4217 currencies this Seller Account will be paid in (the payout set). A media buy settles in one of these (the primary defaultCurrency is always included). The buyer payment currency is the seller payout currency unless the marketplace accepts the buyer currency via cross-currency FX, in which case the source cost is converted to the buyer currency at the platform spot rate while the source is still paid in one of these currencies. A pricing option may not use a settlement currency outside this set. Empty falls back to defaultCurrency, so a single-currency Seller Account need not set it. Duplicates are ignored.
25^[A-Z]{3}$["USD", "GBP"]
Replace the operator-confirmed exhaustive country allowlist used to route briefs. This is acceptance policy, not listing merchandising. Pass null to mark the scope unconfigured.
1 - 249 elements^[A-Z]{2}$["FR"]
Set true to accept briefs from every country. Set false with acceptedCountries: null to clear routing scope to unconfigured.
AI Business Rules sections to publish as Advertising Policies on the listing. Empty hides the disclosure. Approval routing, review mode, and revision notes are never published. Listing and Merchandising storefronts can select local disclosure; source-native upstream policies remain independently applicable.
2An AI Business Rules section the seller elects to disclose publicly as Advertising Policies on its listing.
brief_acceptance, creative_policy Languages (BCP-47) the co-branded join/signup surface may localize within.
2 - 35["nl", "fr", "en"]
Canonical brand domain for AAO registry lookup. Changing it invalidates description, channels, membershipStatus, and website values curated for the prior identity. Resupply valid values in the same request or acknowledge their removal with confirmOperatorDomainProfileReset.
1 - 255"scope3.com"
Required when changing operatorDomain would clear profile fields curated for the previous identity: description, channels, membershipStatus, or website. Fields explicitly resupplied in the same request are preserved/replaced. Ignored when the domain is unchanged or no populated fields would be cleared.
Brand name resolved from AAO registry
255"Scope3"
Logo URL resolved from brand.json
2048Backdrop the resolved logo is designed for, from brand.json. Drives the storefront card tile color. Pass null to clear.
dark-bg, light-bg, transparent-bg AAO membership tier displayed on the storefront card. Use NONE to hide the badge.
AAO_FOUNDING_MEMBER, AAO_MEMBER, NONE Compatibility write alias for legacy businessProfile.regions merchandising context. It does not route briefs or define listing country coverage. Prefer businessProfile.regions when maintaining legacy context.
64^[A-Z0-9_-]{2,32}$["NL", "BE", "WORLDWIDE"]
Operator-curated description shown on the storefront card. Overrides brand.json when set.
2000AdCP MediaChannel codes the storefront offers, or the legacy audio/video aliases. Surfaced on the storefront card.
22Channel.
display, olv, social, search, ctv, linear_tv, radio, streaming_audio, podcast, dooh, ooh, print, cinema, email, gaming, retail_media, influencer, affiliate, product_placement, sponsored_intelligence, audio, video ["display", "olv", "ctv"]
Operator-curated website URL shown on the storefront card. Overrides brand.json when set.
2048Short operator-authored tagline for the storefront. A single fact projected by every marketplace channel listing (e.g. the ChatGPT app), truncated to a shorter cap only where a channel enforces one. Pass null to clear.
160Operator-curated support/contact URL for this storefront. Projected by every marketplace channel listing; not entered separately per channel. Pass null to clear.
2048Operator-curated privacy policy URL for this storefront. Projected by every marketplace channel listing; not entered separately per channel. Pass null to clear.
2048Operator-curated Terms of Service URL for this storefront. Projected by every marketplace channel listing; not entered separately per channel. Pass null to clear.
2048Name of the person at the publisher who fields buyer inquiries (RFPs, prospective briefs, weekly digests). Must be set together with demandContactEmail. Pass null to clear (both fields must be cleared together).
1 - 255"Pia Eberhardt"
Email address for the demand contact. Must be set together with demandContactName. Pass null to clear (both fields must be cleared together).
320^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$"pia@nrcmediagroep.com"
Legacy v2 capability object. All flags remain persisted for compatibility, but the effective offersProductComposition response and runtime behavior are derived from merchandising access and ready Source product paths. V3 publishes the optional deprecated boolean as a typed no-op, strips it before dispatch, and reports it as ignored.
Show child attributes
Show child attributes
Record the operator's declared selling intent. This is descriptive state only: it does not change Source product paths or effective capabilities. Both 'sell_through_scope3' and 'third_party_connect' are accepted regardless of current Source types.
third_party_connect, sell_through_scope3 Select the organization's mutable seller product. Listing is included in both choices; Agentic Media Company adds Scope3's hosted Merchandising Agent. This does not change admission, package entitlement, Source treatment, or software ownership.
LISTING_ONLY, AGENTIC_MEDIA_COMPANY Replace storefront composition pricing settings: fallback pricing percentile plus seller pricing facts extracted from rate cards, media kits, or operator instructions.
Show child attributes
Show child attributes
Operator setting: how creatives buyers submit are handled on ad-server-backed inventory sources. manual queues each for review; auto approves without review. External sales agents and linked Storefronts keep their own approval settings.
auto, manual Operator setting: how new media buys are handled on ad-server-backed inventory sources. manual queues each for review; auto lets the buy start without review. External sales agents and linked Storefronts keep their own approval settings.
auto, manual Whole-document replacement for the operator-supplied business profile captured during Murph-led setup. New evidence URLs must use HTTP(S); a previously stored legacy URI may be submitted unchanged so read/modify/write clients can round-trip the profile. Pass null to clear.
Show child attributes
Show child attributes
Required when changing defaultCurrency on a transacting Seller Account would hide products currently visible to buyers (operator fixed prices are only shown in the Seller Account's settlement currency). The request is rejected with the affected product count unless this is true. Ignored when the Seller Account is not transacting or the currency change has no buyer-visible impact.
Required to move creativeApproval or mediaBuyApproval to auto. In auto, work proceeds without human review. Brief Acceptance qualifies product discovery; automatic media-buy creation adds no second evaluator gate. The request is rejected unless this is true. Ignored when tightening to manual, or when the setting is already auto.
Response
Update storefront
Storefront configuration response
Surrogate id (BIGINT serialized as string)
"1234"
Public-facing slug
"acme-media"
Display name
"Acme Media"
Publisher domain for the storefront's business profile
"acme.com"
Canonical brand domain
"scope3.com"
Brand name from AAO registry
"Scope3"
Logo URL from brand.json
AAO membership tier. Null when the operator has not set a value.
AAO_FOUNDING_MEMBER, AAO_MEMBER, NONE Legacy merchandising-region context projected from businessProfile. This does not govern brief acceptance or listing country coverage.
Operator-confirmed exhaustive country allowlist for brief routing. Null means routing scope has not been confirmed.
^[A-Z]{2}$Whether the operator explicitly accepts briefs from every country.
Seller-selected AI Business Rules sections disclosed publicly as Advertising Policies. Empty means no local disclosure.
An AI Business Rules section the seller elects to disclose publicly as Advertising Policies on its listing.
brief_acceptance, creative_policy Standard primary countries advertised by backing AdCP sales agents. Authoritative for the listing on a pure pass-through storefront; inventory evidence otherwise.
^[A-Z]{2}$Standard primary channels advertised by backing AdCP sales agents. Authoritative for the listing on a pure pass-through storefront; inventory evidence otherwise.
Operator-curated description (overrides brand.json).
ADCP channel codes the storefront offers.
Operator-curated website URL (overrides brand.json).
Short operator-authored tagline, projected by every marketplace channel listing. Null when unset.
Operator-curated support/contact URL, projected by every marketplace channel listing. Null when unset.
Operator-curated privacy policy URL, projected by every marketplace channel listing. Null when unset.
Operator-curated Terms of Service URL, projected by every marketplace channel listing. Null when unset.
Canonical buyer-visible storefront identity and coverage. This is distinct from the legacy Business Profile merchandising inputs and seller policies.
Show child attributes
Show child attributes
Demand contact name. Null when the operator has not set one.
Demand contact email. Null when the operator has not set one.
Whether the brand domain has been verified (email match or manual KYC)
Which backend function the buyer-facing storefront dispatches to: the Merchandising Agent or an expert-run adapter.
CHEF, ADAPTER Expert-run adapter provider when routingMode is ADAPTER; null otherwise.
amazon, audiostack, elevenlabs, fal, gemini, google, linkedin, meta, openai, openai_ads, pinterest, reddit, snap, spotify, tiktok, veo Adapter role when routingMode is ADAPTER; null otherwise.
sales, creative, signals, measurement, optimization, composite Adapter credential mode when routingMode is ADAPTER; null otherwise.
BYOK Legacy v2 Seller Account plan tier
basic Deprecated compatibility projection of !isPaused; not proof that the storefront currently satisfies readiness.
Compatibility-named seller intake hold. True blocks discovery, new buys, and buyer edits but does not pause existing delivery. False is neutral; it does not by itself make the storefront live.
When the storefront was archived (read-only thereafter). Null for non-archived storefronts.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Deprecated stored-control display status. This is never proof that the storefront can transact; use the readiness projection.
configuring, transacting, archived, neutral, paused Effective buyer-facing AdCP capabilities. Product composition derives from merchandising access and ready Source product paths; it is not locked to the legacy configured flag.
Show child attributes
Show child attributes
Whether the Seller Account commercial plan entitles it to Merchandising. This is a server-derived commercial fact, separate from needing a connected source that is ready to supply products your storefront can sell, such as an ad server.
Whether the Seller Account commercial plan entitles it to Listing + Distribution. This is independent from Merchandising and from the connected sales agent that fulfills the listing.
Persisted operator capability flags before source-topology derivation. Compare this field for declarative writes; capabilities is the effective buyer-facing projection.
Show child attributes
Show child attributes
Composition pricing settings: fallback pricing percentile plus seller pricing facts. Separate from Scope3 contract/billing rate cards.
Show child attributes
Show child attributes
Stored operator setting for creative submissions. It applies at Interchange-managed review checkpoints; a connected sales agent or downstream source may enforce additional source-native review.
auto, manual Stored operator setting for new media buys. It applies when the storefront exposes an Interchange-managed campaign-approval checkpoint; a connected sales agent or downstream source may enforce additional source-native review.
auto, manual Legacy topology projection: true when the storefront has at least one active ad-server-backed inventory source (executionType=MANAGED_SALES_AGENT). Product composition is now Source-derived, so this value does not authorize or lock capability writes.
Derived: true when the Storefront has an active Inventory Source, an active embedded Sales Agent, adapter routing, or an advertised Storefront-owned capability. Every active Source remains behind the buyer-facing Storefront AdCP endpoint, including COMPOSING-only Sources.
Creation timestamp (ISO 8601)
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Last update timestamp (ISO 8601)
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Operator-supplied business profile captured during Murph-led setup. Null when the operator has not shared one.
Show child attributes
Show child attributes
Backdrop the logo is designed for, from brand.json. Null or absent when unknown; the storefront card falls back to a dark tile.
dark-bg, light-bg, transparent-bg Compatibility record of the reversible signup package choice, or null when none was selected. It is not a behavioral mode: what the storefront exposes is always the derived capabilities and its Source treatment.
third_party_connect, sell_through_scope3 Derived display value for the mutable supply operating capabilities. Null means a legacy account has not selected a mode yet.
LISTING_ONLY, AGENTIC_MEDIA_COMPANY Mutable account capabilities for listing and Scope3 merchandising. Listing is always enabled after selection; null means a legacy account has not selected a product yet.
Show child attributes
Show child attributes
Operator toggle: when true, the storefront also resells third-party inventory from other Interchange storefronts (composition draws from the marketplace in addition to its own sources). When false/absent (default), the storefront sells only its own inventory sources.
Seller-confirmed primary settlement currency (ISO-4217). Null until confirmed; required before go-live for Interchange-cleared Seller Accounts. Direct sales adapter Seller Accounts run by our expert agents skip settlement-currency readiness checks because Interchange does not pay the seller on that path.
ISO-4217 currencies the Seller Account will be paid in (the payout set). A media buy settles in one of these. Empty falls back to defaultCurrency. The marketplace may additionally accept buyer currencies outside this set via cross-currency FX, converting each source cost to the buyer currency at the platform spot rate.