Scope3 Storefront Ad Server Catalog API
The Storefront Ad Server Catalog API from Scope3 — 11 operation(s) for storefront ad server catalog.
The Storefront Ad Server Catalog API from Scope3 — 11 operation(s) for storefront ad server catalog.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/scope3-storefront-ad-server-catalog-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Scope3 Storefront Storefront Ad Server Catalog API
version: 2.0.0
description: 'REST API for partners to manage storefronts, inventory sources, and billing.
## Authentication
All endpoints require a Bearer token in the Authorization header:
```
Authorization: Bearer your-api-key
```
## Base URL
`https://api.interchange.io/api/v2/storefront`
## For AI Agents
AI agents can use the MCP endpoint at `/mcp/v2/storefront` with three tools:
- `initialize`: Start an MCP session
- `api_call`: Make REST API calls
- `ask_about_capability`: Learn about API features'
servers:
- url: https://api.interchange.io/api/v2/storefront
description: Production server
tags:
- name: Storefront Ad Server Catalog
paths:
/esa/{esaId}/products:
post:
operationId: createEsaProduct
summary: Create a product for an ad server source
description: Create a draft or active wholesale product on the ad server source's upstream tenant. Validate the same complete request first with the validation endpoint.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EsaProductUpdateBody'
responses:
'201':
description: Create a product for an ad server source
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
get:
operationId: listEsaProducts
summary: List products for an ad server source
description: List the wholesale products defined on the ad server source's upstream tenant. Product shapes are the upstream adapter's payload and vary by ad server.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
responses:
'200':
description: List products for an ad server source
content:
application/json:
schema:
$ref: '#/components/schemas/EsaProductListEnvelope'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/esa/{esaId}/products:validate:
post:
operationId: validateEsaProduct
summary: Validate a product draft for an ad server source
description: Validate a complete product request against the ad server source without persisting it. Returns field-level blocking errors and advisory warnings.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EsaProductUpdateBody'
responses:
'200':
description: Validate a product draft for an ad server source
content:
application/json:
schema:
type: object
properties:
valid:
type: boolean
issues:
type: array
items:
type: object
properties:
code:
type: string
message:
type: string
field:
type:
- string
- 'null'
severity:
type: string
enum:
- error
- warning
required:
- code
- message
additionalProperties: {}
errors:
type: array
items:
type: object
properties:
field:
type: string
message:
type: string
code:
type: string
required:
- message
additionalProperties: {}
warnings:
type: array
items: {}
required:
- valid
additionalProperties: {}
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/esa/{esaId}/products/{productId}:
get:
operationId: getEsaProduct
summary: Get a product for an ad server source
description: Get a single wholesale product from the ad server source's upstream tenant. The response body is the upstream adapter's payload and varies by ad server.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
- in: path
name: productId
schema:
description: Upstream product id for the ad server source.
example: prod_abc
type: string
minLength: 1
required: true
description: Upstream product id for the ad server source.
responses:
'200':
description: Get a product for an ad server source
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source or product with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
operationId: updateEsaProduct
summary: Update a product for an ad server source
description: Replace the editable fields of a wholesale product on the ad server source's upstream tenant. The upstream endpoint requires a complete replacement body; the response body is the upstream adapter's payload and varies by ad server.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
- in: path
name: productId
schema:
description: Upstream product id for the ad server source.
example: prod_abc
type: string
minLength: 1
required: true
description: Upstream product id for the ad server source.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EsaProductUpdateBody'
responses:
'200':
description: Update a product for an ad server source
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source or product with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
patch:
operationId: patchEsaProduct
summary: Change only the named fields of a product for an ad server source
description: Apply a partial update to a wholesale product on the ad server source's upstream tenant. Only the fields present in the body are applied; a field you omit — or send as `null` — keeps its stored value, and `inventory` merges one level deep. Prefer this over the full-replace PUT unless you hold a complete product — a replace clears the pricing options, channels and targeting it does not re-send. A partial update may leave a product incomplete, in which case it stays out of the buyer-facing catalog until it is completed. The response body is the upstream adapter's payload and varies by ad server.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
- in: path
name: productId
schema:
description: Upstream product id for the ad server source.
example: prod_abc
type: string
minLength: 1
required: true
description: Upstream product id for the ad server source.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EsaProductPatchBody'
responses:
'200':
description: Change only the named fields of a product for an ad server source
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source or product with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
operationId: deleteEsaProduct
summary: Delete a product for an ad server source
description: Delete a wholesale product from the ad server source's upstream tenant.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
- in: path
name: productId
schema:
description: Upstream product id for the ad server source.
example: prod_abc
type: string
minLength: 1
required: true
description: Upstream product id for the ad server source.
responses:
'204':
description: No content
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source or product with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/esa/{esaId}/signals:
get:
operationId: listEsaSignals
summary: List signals for an ad server source
description: List the named targeting definitions authored for the ad server source. The API wire objects are named `signal`; their shapes are the upstream adapter's payload and vary by ad server.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
responses:
'200':
description: List signals for an ad server source
content:
application/json:
schema:
$ref: '#/components/schemas/EsaSignalListEnvelope'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
operationId: createEsaSignal
summary: Create or dry-run a signal for an ad server source
description: Create a complete signal mapping on the upstream ad-server tenant. Set dry_run=true to validate and preview without persisting.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: query
name: dry_run
schema:
description: Validate and preview the upstream signal without persisting it.
type: string
enum:
- 'true'
description: Validate and preview the upstream signal without persisting it.
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
signalId:
type: string
pattern: ^[A-Za-z0-9_-]+$
name:
type: string
minLength: 1
valueType:
type: string
enum:
- binary
- categorical
- numeric
adapterConfig:
type: object
additionalProperties: {}
description:
type:
- string
- 'null'
categories:
type: array
items:
type: string
range:
type:
- object
- 'null'
properties:
min:
anyOf:
- type: number
- type: string
max:
anyOf:
- type: number
- type: string
additionalProperties: {}
targetingDimension:
type:
- string
- 'null'
signalType:
type: string
enum:
- generic
- property
- age
ageDetermination:
type: string
enum:
- survey_based
- assumptive
- user_provided
- user_verified
dataProvider:
type:
- string
- 'null'
tags:
type: array
items:
type: string
pricing_options:
type: array
items:
$ref: '#/components/schemas/VendorPricingOption'
required:
- signalId
- name
- valueType
- adapterConfig
additionalProperties: {}
responses:
'200':
description: Dry-run validation result when dry_run=true.
content:
application/json:
schema:
$ref: '#/components/schemas/EsaSignalResponse'
'201':
description: Create or dry-run a signal for an ad server source
content:
application/json:
schema:
$ref: '#/components/schemas/EsaSignalResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/esa/{esaId}/signals/adapter-capabilities:
get:
operationId: getEsaSignalAdapterCapabilities
summary: Get signal capabilities for an ad server source
description: 'Describe what the source''s ad-server adapter supports for signals: available targeting types and the adapter config shape. The response body is the upstream adapter''s payload and varies by ad server.'
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
responses:
'200':
description: Get signal capabilities for an ad server source
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/esa/{esaId}/signals/candidates:
get:
operationId: listEsaSignalCandidates
summary: List ad-server targeting for signal authoring
description: Browse source-native ad-server targeting (audience segments, targeting keys, and values) that can back a signal. The API wire objects are named `candidate`; the response is the upstream adapter's paginated payload and varies by ad server.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: query
name: candidateType
schema:
description: Filter to one adapter-defined candidate type.
type: string
description: Filter to one adapter-defined candidate type.
- in: query
name: q
schema:
description: Candidate name/keyword search.
type: string
description: Candidate name/keyword search.
- in: query
name: parentId
schema:
description: Restrict to children of this candidate.
type: string
description: Restrict to children of this candidate.
- in: query
name: limit
schema:
type: integer
maximum: 100
minimum: 1
- in: query
name: cursor
schema:
type: string
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
responses:
'200':
description: List ad-server targeting for signal authoring
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/esa/{esaId}/signals/{signalId}:
get:
operationId: getEsaSignal
summary: Get a signal for an ad server source
description: Get a single signal from the ad server source's upstream tenant. The API wire object is named `signal`; its shape is the upstream adapter's payload and varies by ad server.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
- in: path
name: signalId
schema:
description: Signal id. The wire field remains `signalId` for API compatibility.
example: sig_abc
type: string
minLength: 1
required: true
description: Signal id. The wire field remains `signalId` for API compatibility.
responses:
'200':
description: Get a signal for an ad server source
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No ad server source or signal with this id, or the source is deactivated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
operationId: updateEsaSignal
summary: Replace or dry-run a signal for an ad server source
description: Replace a complete signal mapping on the upstream ad-server tenant. The body signalId must match the path. Set dry_run=true to validate and preview without persisting.
tags:
- Storefront Ad Server Catalog
security:
- bearerAuth: []
parameters:
- in: query
name: dry_run
schema:
description: Validate and preview the upstream signal without persisting it.
type: string
enum:
- 'true'
description: Validate and preview the upstream signal without persisting it.
- in: path
name: esaId
schema:
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
example: 123
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: Ad server source connection id. The wire field remains `esaId` for API compatibility.
- in: path
name: signalId
schema:
description: Signal id. The wire field remains `signalId` for API compatibility.
example: sig_abc
type: string
minLength: 1
required: true
description: Signal id. The wire field remains `signalId` for API compatibility.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
signalId:
type: string
pattern: ^[A-Za-z0-9_-]+$
name:
type: string
minLength: 1
valueType:
type: string
enum:
- binary
- categorical
- numeric
adapterConfig:
type: object
additionalProperties: {}
description:
type:
- string
- 'null'
categories:
type: array
items:
type: string
range:
type:
- object
- 'null'
properties:
min:
anyOf:
- type: number
- type: string
max:
anyOf:
- type: number
- type: string
additionalProperties: {}
targetingDimension:
type:
- string
- 'null'
signalType:
type: string
enum:
- generic
- property
- age
ageDetermination:
type: string
enum:
- survey_based
- assumptive
- user_provided
- user_verified
dataProvider:
type:
- string
- 'null'
tags:
type: array
items:
type: string
pricing_options:
type: array
items:
$ref: '#/components/schemas/VendorPricingOption'
require
# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/scope3/refs/heads/main/openapi/scope3-storefront-ad-server-catalog-api-openapi.yml