Scope3 Storefront Ad Server Catalog API

The Storefront Ad Server Catalog API from Scope3 — 11 operation(s) for storefront ad server catalog.

Operations 18

POST /esa/{esaId}/products Create a product for an ad server source #
GET /esa/{esaId}/products List products for an ad server source #
POST /esa/{esaId}/products:validate Validate a product draft for an ad server source #
GET /esa/{esaId}/products/{productId} Get a product for an ad server source #
PUT /esa/{esaId}/products/{productId} Update a product for an ad server source #
PATCH /esa/{esaId}/products/{productId} Change only the named fields of a product for an ad server source #
DELETE /esa/{esaId}/products/{productId} Delete a product for an ad server source #
GET /esa/{esaId}/signals List signals for an ad server source #
POST /esa/{esaId}/signals Create or dry-run a signal for an ad server source #
GET /esa/{esaId}/signals/adapter-capabilities Get signal capabilities for an ad server source #
GET /esa/{esaId}/signals/candidates List ad-server targeting for signal authoring #
GET /esa/{esaId}/signals/{signalId} Get a signal for an ad server source #
PUT /esa/{esaId}/signals/{signalId} Replace or dry-run a signal for an ad server source #
DELETE /esa/{esaId}/signals/{signalId} Delete a signal for an ad server source #
GET /esa/{esaId}/inventory/capabilities Get inventory capabilities for an ad server source #
GET /esa/{esaId}/inventory/publisher-properties List publisher properties for an ad server source #
GET /esa/{esaId}/inventory/selectors Search inventory selectors for an ad server source #
GET /esa/{esaId}/creative-formats List creative formats for an ad server source #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/scope3-storefront-ad-server-catalog-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

scope3-storefront-ad-server-catalog-api-openapi.yml Raw ↑
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