> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apostra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a merchandising simulation scenario

> Read one tenant-scoped scenario with every immutable revision and declared variant generation. Replay inputs are never returned.



## OpenAPI

````yaml /v2/storefront-api-v2.yaml get /simulator/scenarios/{scenarioId}
openapi: 3.0.0
info:
  title: Scope3 Storefront API
  version: 2.0.0
  description: >-
    REST API for partners to manage Seller Accounts, 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
security: []
tags:
  - name: Account
    description: Account management, service tokens, and preferences
  - name: Asks
    description: >-
      What you are waiting on Scope3 for — support, product, and supply asks in
      one list
  - name: Storefront
    description: Manage storefront and inventory sources
  - name: Storefront Agents
    description: List and manage registered sales, signals, and outcomes agents
  - name: Storefront Activity
    description: Audit log of configuration and inventory changes on the storefront
  - name: Storefront Billing
    description: Payout bank details and billing configuration for Seller Accounts
  - name: AI Usage
    description: Seller Account AI token usage visibility by model
  - name: MCP
    description: Model Context Protocol endpoints
paths:
  /simulator/scenarios/{scenarioId}:
    get:
      tags:
        - Storefront
      summary: Get a merchandising simulation scenario
      description: >-
        Read one tenant-scoped scenario with every immutable revision and
        declared variant generation. Replay inputs are never returned.
      operationId: getMerchandisingSimulationScenario
      parameters:
        - in: path
          name: scenarioId
          schema:
            type: string
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
          required: true
      responses:
        '200':
          description: Get a merchandising simulation scenario
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    pattern: >-
                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  storefrontId:
                    type: string
                  latestTitle:
                    type: string
                  latestRevisionNumber:
                    type: integer
                    minimum: 0
                    exclusiveMinimum: true
                    maximum: 9007199254740991
                  sourceScope:
                    default:
                      mode: storefront
                      sourceId: null
                      sourceName: null
                      diagnostics:
                        includedBundleCount: 0
                        includedSignalCount: 0
                        excludedBundleCount: 0
                        excludedSignalCount: 0
                        missingLineageCount: 0
                        ambiguousLineageCount: 0
                        crossSourceLineageCount: 0
                    oneOf:
                      - type: object
                        properties:
                          mode:
                            type: string
                            enum:
                              - storefront
                          sourceId:
                            type: string
                            nullable: true
                            enum:
                              - null
                          sourceName:
                            type: string
                            nullable: true
                            enum:
                              - null
                          diagnostics:
                            type: object
                            properties:
                              includedBundleCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              includedSignalCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              excludedBundleCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              excludedSignalCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              missingLineageCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              ambiguousLineageCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              crossSourceLineageCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                            required:
                              - includedBundleCount
                              - includedSignalCount
                              - excludedBundleCount
                              - excludedSignalCount
                              - missingLineageCount
                              - ambiguousLineageCount
                              - crossSourceLineageCount
                            additionalProperties: false
                        required:
                          - mode
                          - sourceId
                          - sourceName
                          - diagnostics
                        additionalProperties: false
                      - type: object
                        properties:
                          mode:
                            type: string
                            enum:
                              - source
                          sourceId:
                            type: string
                            minLength: 1
                            maxLength: 500
                          sourceName:
                            type: string
                            minLength: 1
                            maxLength: 500
                          diagnostics:
                            type: object
                            properties:
                              includedBundleCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              includedSignalCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              excludedBundleCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              excludedSignalCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              missingLineageCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              ambiguousLineageCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              crossSourceLineageCount:
                                type: integer
                                minimum: 0
                                maximum: 9007199254740991
                            required:
                              - includedBundleCount
                              - includedSignalCount
                              - excludedBundleCount
                              - excludedSignalCount
                              - missingLineageCount
                              - ambiguousLineageCount
                              - crossSourceLineageCount
                            additionalProperties: false
                        required:
                          - mode
                          - sourceId
                          - sourceName
                          - diagnostics
                        additionalProperties: false
                    type: object
                  latestRunnableUntil:
                    type: string
                    format: date-time
                    pattern: >-
                      ^(?:(?:\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))$
                  isRunnable:
                    type: boolean
                  createdByUserId:
                    nullable: true
                    type: string
                  createdAt:
                    type: string
                    format: date-time
                    pattern: >-
                      ^(?:(?:\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))$
                  revisions:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                          pattern: >-
                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                        scenarioId:
                          type: string
                          format: uuid
                          pattern: >-
                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                        revisionNumber:
                          type: integer
                          minimum: 0
                          exclusiveMinimum: true
                          maximum: 9007199254740991
                        title:
                          type: string
                        sourceKind:
                          type: string
                          enum:
                            - sample
                            - seller_provided
                            - live_observed
                        sourceRef:
                          type: string
                        briefSnapshot:
                          type: object
                          additionalProperties:
                            $ref: >-
                              #/components/schemas/MerchandisingSimulationJsonValue
                        observedDecisionSnapshot:
                          nullable: true
                          type: object
                          additionalProperties:
                            $ref: >-
                              #/components/schemas/MerchandisingSimulationJsonValue
                        inputSummary:
                          type: object
                          additionalProperties:
                            $ref: >-
                              #/components/schemas/MerchandisingSimulationJsonValue
                        inputDigest:
                          type: string
                          pattern: ^[a-f0-9]{64}$
                        schemaVersion:
                          type: integer
                          minimum: 0
                          exclusiveMinimum: true
                          maximum: 9007199254740991
                        sourceScope:
                          default:
                            mode: storefront
                            sourceId: null
                            sourceName: null
                            diagnostics:
                              includedBundleCount: 0
                              includedSignalCount: 0
                              excludedBundleCount: 0
                              excludedSignalCount: 0
                              missingLineageCount: 0
                              ambiguousLineageCount: 0
                              crossSourceLineageCount: 0
                          oneOf:
                            - type: object
                              properties:
                                mode:
                                  type: string
                                  enum:
                                    - storefront
                                sourceId:
                                  type: string
                                  nullable: true
                                  enum:
                                    - null
                                sourceName:
                                  type: string
                                  nullable: true
                                  enum:
                                    - null
                                diagnostics:
                                  type: object
                                  properties:
                                    includedBundleCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    includedSignalCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    excludedBundleCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    excludedSignalCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    missingLineageCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    ambiguousLineageCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    crossSourceLineageCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                  required:
                                    - includedBundleCount
                                    - includedSignalCount
                                    - excludedBundleCount
                                    - excludedSignalCount
                                    - missingLineageCount
                                    - ambiguousLineageCount
                                    - crossSourceLineageCount
                                  additionalProperties: false
                              required:
                                - mode
                                - sourceId
                                - sourceName
                                - diagnostics
                              additionalProperties: false
                            - type: object
                              properties:
                                mode:
                                  type: string
                                  enum:
                                    - source
                                sourceId:
                                  type: string
                                  minLength: 1
                                  maxLength: 500
                                sourceName:
                                  type: string
                                  minLength: 1
                                  maxLength: 500
                                diagnostics:
                                  type: object
                                  properties:
                                    includedBundleCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    includedSignalCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    excludedBundleCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    excludedSignalCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    missingLineageCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    ambiguousLineageCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    crossSourceLineageCount:
                                      type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                  required:
                                    - includedBundleCount
                                    - includedSignalCount
                                    - excludedBundleCount
                                    - excludedSignalCount
                                    - missingLineageCount
                                    - ambiguousLineageCount
                                    - crossSourceLineageCount
                                  additionalProperties: false
                              required:
                                - mode
                                - sourceId
                                - sourceName
                                - diagnostics
                              additionalProperties: false
                          type: object
                        runnableUntil:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\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))$
                        isRunnable:
                          type: boolean
                        replayAvailableUntil:
                          nullable: true
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\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))$
                        variants:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                type: string
                                format: uuid
                                pattern: >-
                                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                              revisionId:
                                type: string
                                format: uuid
                                pattern: >-
                                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                              slotIndex:
                                type: integer
                                minimum: 0
                                maximum: 3
                              generation:
                                type: integer
                                minimum: 0
                                exclusiveMinimum: true
                                maximum: 9007199254740991
                              label:
                                type: string
                              isBaseline:
                                type: boolean
                              overrides:
                                anyOf:
                                  - type: object
                                    properties: {}
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      posture:
                                        type: object
                                        properties:
                                          selectedPosture:
                                            type: string
                                            enum:
                                              - direct_fit
                                              - hold_value
                                              - value_preserving_compromise
                                              - tradeoff_ladder
                                              - price_first
                                              - wholesale_mirror
                                        required:
                                          - selectedPosture
                                        additionalProperties: false
                                      pricing:
                                        type: object
                                        properties:
                                          priceAdjustmentBasisPoints:
                                            type: integer
                                            minimum: -10000
                                            maximum: 100000
                                          floorCpm:
                                            type: object
                                            properties:
                                              amount:
                                                type: number
                                                minimum: 0
                                              currency:
                                                type: string
                                                minLength: 3
                                                maxLength: 3
                                            required:
                                              - amount
                                              - currency
                                            additionalProperties: false
                                        additionalProperties: false
                                      rules:
                                        type: object
                                        properties:
                                          requiredBundleIds:
                                            maxItems: 100
                                            type: array
                                            items:
                                              type: string
                                              minLength: 1
                                          excludedBundleIds:
                                            maxItems: 100
                                            type: array
                                            items:
                                              type: string
                                              minLength: 1
                                          maxProducts:
                                            type: integer
                                            minimum: 0
                                            exclusiveMinimum: true
                                            maximum: 100
                                        additionalProperties: false
                                    additionalProperties: false
                              overrideDigest:
                                type: string
                                pattern: ^[a-f0-9]{64}$
                              supersedesVariantId:
                                nullable: true
                                type: string
                                format: uuid
                                pattern: >-
                                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                              createdByUserId:
                                nullable: true
                                type: string
                              createdAt:
                                type: string
                                format: date-time
                                pattern: >-
                                  ^(?:(?:\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))$
                              executions:
                                default: []
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                      format: uuid
                                      pattern: >-
                                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                    revisionId:
                                      type: string
                                      format: uuid
                                      pattern: >-
                                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                    variantId:
                                      type: string
                                      format: uuid
                                      pattern: >-
                                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                    intelligenceRunId:
                                      type: string
                                    attemptNumber:
                                      type: integer
                                      minimum: 0
                                      exclusiveMinimum: true
                                      maximum: 9007199254740991
                                    status:
                                      type: string
                                      enum:
                                        - succeeded
                                        - failed
                                    resultCode:
                                      nullable: true
                                      type: string
                                    inputDigest:
                                      type: string
                                      pattern: ^[a-f0-9]{64}$
                                    overrideDigest:
                                      type: string
                                      pattern: ^[a-f0-9]{64}$
                                    outputDigest:
                                      type: string
                                      pattern: ^[a-f0-9]{64}$
                                    decisionRecord:
                                      $ref: >-
                                        #/components/schemas/SellerDecisionRecord
                                    sourceScope:
                                      default:
                                        mode: storefront
                                        sourceId: null
                                        sourceName: null
                                        diagnostics:
                                          includedBundleCount: 0
                                          includedSignalCount: 0
                                          excludedBundleCount: 0
                                          excludedSignalCount: 0
                                          missingLineageCount: 0
                                          ambiguousLineageCount: 0
                                          crossSourceLineageCount: 0
                                      oneOf:
                                        - type: object
                                          properties:
                                            mode:
                                              type: string
                                              enum:
                                                - storefront
                                            sourceId:
                                              type: string
                                              nullable: true
                                              enum:
                                                - null
                                            sourceName:
                                              type: string
                                              nullable: true
                                              enum:
                                                - null
                                            diagnostics:
                                              type: object
                                              properties:
                                                includedBundleCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                includedSignalCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                excludedBundleCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                excludedSignalCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                missingLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                ambiguousLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                crossSourceLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                              required:
                                                - includedBundleCount
                                                - includedSignalCount
                                                - excludedBundleCount
                                                - excludedSignalCount
                                                - missingLineageCount
                                                - ambiguousLineageCount
                                                - crossSourceLineageCount
                                              additionalProperties: false
                                          required:
                                            - mode
                                            - sourceId
                                            - sourceName
                                            - diagnostics
                                          additionalProperties: false
                                        - type: object
                                          properties:
                                            mode:
                                              type: string
                                              enum:
                                                - source
                                            sourceId:
                                              type: string
                                              minLength: 1
                                              maxLength: 500
                                            sourceName:
                                              type: string
                                              minLength: 1
                                              maxLength: 500
                                            diagnostics:
                                              type: object
                                              properties:
                                                includedBundleCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                includedSignalCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                excludedBundleCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                excludedSignalCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                missingLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                ambiguousLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                crossSourceLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                              required:
                                                - includedBundleCount
                                                - includedSignalCount
                                                - excludedBundleCount
                                                - excludedSignalCount
                                                - missingLineageCount
                                                - ambiguousLineageCount
                                                - crossSourceLineageCount
                                              additionalProperties: false
                                          required:
                                            - mode
                                            - sourceId
                                            - sourceName
                                            - diagnostics
                                          additionalProperties: false
                                      type: object
                                    createdByUserId:
                                      nullable: true
                                      type: string
                                    createdAt:
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^(?:(?:\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))$
                                  required:
                                    - id
                                    - revisionId
                                    - variantId
                                    - intelligenceRunId
                                    - attemptNumber
                                    - status
                                    - resultCode
                                    - inputDigest
                                    - overrideDigest
                                    - outputDigest
                                    - decisionRecord
                                    - sourceScope
                                    - createdByUserId
                                    - createdAt
                                  additionalProperties: false
                              executionHistory:
                                default: []
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                      format: uuid
                                      pattern: >-
                                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                    revisionId:
                                      type: string
                                      format: uuid
                                      pattern: >-
                                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                    variantId:
                                      type: string
                                      format: uuid
                                      pattern: >-
                                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                    intelligenceRunId:
                                      type: string
                                    attemptNumber:
                                      type: integer
                                      minimum: 0
                                      exclusiveMinimum: true
                                      maximum: 9007199254740991
                                    status:
                                      type: string
                                      enum:
                                        - succeeded
                                        - failed
                                    resultCode:
                                      nullable: true
                                      type: string
                                    inputDigest:
                                      type: string
                                      pattern: ^[a-f0-9]{64}$
                                    overrideDigest:
                                      type: string
                                      pattern: ^[a-f0-9]{64}$
                                    outputDigest:
                                      type: string
                                      pattern: ^[a-f0-9]{64}$
                                    sourceScope:
                                      default:
                                        mode: storefront
                                        sourceId: null
                                        sourceName: null
                                        diagnostics:
                                          includedBundleCount: 0
                                          includedSignalCount: 0
                                          excludedBundleCount: 0
                                          excludedSignalCount: 0
                                          missingLineageCount: 0
                                          ambiguousLineageCount: 0
                                          crossSourceLineageCount: 0
                                      oneOf:
                                        - type: object
                                          properties:
                                            mode:
                                              type: string
                                              enum:
                                                - storefront
                                            sourceId:
                                              type: string
                                              nullable: true
                                              enum:
                                                - null
                                            sourceName:
                                              type: string
                                              nullable: true
                                              enum:
                                                - null
                                            diagnostics:
                                              type: object
                                              properties:
                                                includedBundleCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                includedSignalCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                excludedBundleCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                excludedSignalCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                missingLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                ambiguousLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                crossSourceLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                              required:
                                                - includedBundleCount
                                                - includedSignalCount
                                                - excludedBundleCount
                                                - excludedSignalCount
                                                - missingLineageCount
                                                - ambiguousLineageCount
                                                - crossSourceLineageCount
                                              additionalProperties: false
                                          required:
                                            - mode
                                            - sourceId
                                            - sourceName
                                            - diagnostics
                                          additionalProperties: false
                                        - type: object
                                          properties:
                                            mode:
                                              type: string
                                              enum:
                                                - source
                                            sourceId:
                                              type: string
                                              minLength: 1
                                              maxLength: 500
                                            sourceName:
                                              type: string
                                              minLength: 1
                                              maxLength: 500
                                            diagnostics:
                                              type: object
                                              properties:
                                                includedBundleCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                includedSignalCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                excludedBundleCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                excludedSignalCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                missingLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                ambiguousLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                                crossSourceLineageCount:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 9007199254740991
                                              required:
                                                - includedBundleCount
                                                - includedSignalCount
                                                - excludedBundleCount
                                                - excludedSignalCount
                                                - missingLineageCount
                                                - ambiguousLineageCount
                                                - crossSourceLineageCount
                                              additionalProperties: false
                                          required:
                                            - mode
                                            - sourceId
                                            - sourceName
                                            - diagnostics
                                          additionalProperties: false
                                      type: object
                                    createdByUserId:
                                      nullable: true
                                      type: string
                                    createdAt:
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^(?:(?:\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))$
                                  required:
                                    - id
                                    - revisionId
                                    - variantId
                                    - intelligenceRunId
                                    - attemptNumber
                                    - status
                                    - resultCode
                                    - inputDigest
                                    - overrideDigest
                                    - outputDigest
                                    - sourceScope
                                    - createdByUserId
                                    - createdAt
                                  additionalProperties: false
                            required:
                              - id
                              - revisionId
                              - slotIndex
                              - generation
                              - label
                              - isBaseline
                              - overrides
                              - overrideDigest
                              - supersedesVariantId
                              - createdByUserId
                              - createdAt
                              - executions
                              - executionHistory
                            additionalProperties: false
                        createdByUserId:
                          nullable: true
                          type: string
                        createdAt:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\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))$
                      required:
                        - id
                        - scenarioId
                        - revisionNumber
                        - title
                        - sourceKind
                        - sourceRef
                        - briefSnapshot
                        - observedDecisionSnapshot
                        - inputSummary
                        - inputDigest
                        - schemaVersion
                        - sourceScope
                        - runnableUntil
                        - isRunnable
                        - replayAvailableUntil
                        - variants
                        - createdByUserId
                        - createdAt
                      additionalProperties: false
                required:
                  - id
                  - storefrontId
                  - latestTitle
                  - latestRevisionNumber
                  - sourceScope
                  - latestRunnableUntil
                  - isRunnable
                  - createdByUserId
                  - createdAt
                  - revisions
                additionalProperties: false
        '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 scenario with this id on the caller’s Storefront.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    MerchandisingSimulationJsonValue:
      description: Any JSON value captured verbatim in simulation evidence.
      anyOf:
        - type: string
        - type: number
        - type: boolean
        - type: string
          nullable: true
          enum:
            - null
        - type: array
          items:
            $ref: '#/components/schemas/MerchandisingSimulationJsonValue'
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/MerchandisingSimulationJsonValue'
    SellerDecisionRecord:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
          enum:
            - pending
            - responded
            - declined
            - failed
            - booked
            - delivered
            - rejected
            - unattributed
            - unavailable
        resolution:
          type: string
          enum:
            - offer
            - no_match
            - declined
            - failure
            - stalled
            - unavailable
        failure:
          nullable: true
          type: object
          properties:
            type:
              type: string
              enum:
                - llm
                - system
                - integration
            code:
              nullable: true
              type: string
            what:
              type: string
            why:
              type: string
            sellerAction:
              type: string
              enum:
                - retry
                - correct_configuration
          required:
            - type
            - code
            - what
            - why
            - sellerAction
          additionalProperties: false
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\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))$
        purpose:
          type: object
          properties:
            availability:
              type: string
              enum:
                - recorded
                - unavailable
            value:
              nullable: true
              allOf:
                - $ref: '#/components/schemas/IntelligenceRunPurpose'
          required:
            - availability
            - value
          additionalProperties: false
        buyer:
          type: object
          properties:
            operatorDomain:
              nullable: true
              type: string
            brandDomain:
              nullable: true
              type: string
            country:
              nullable: true
              type: string
            customerId:
              nullable: true
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            advertiser:
              nullable: true
              description: >-
                Advertiser BrandRef from the immutable request, falling back
                only to the run snapshot for legacy records.
              type: object
              properties:
                value:
                  type: string
                source:
                  type: string
                  enum:
                    - request.brand
                    - request.account.brand
                    - request.account.operator
                    - request.account.account_id
                    - compose_run
              required:
                - value
                - source
              additionalProperties: false
            buyingOperator:
              nullable: true
              description: >-
                Buying operator (including an agency or DSP where that is what
                the operator represents), kept distinct from advertiser and
                account.
              type: object
              properties:
                value:
                  type: string
                source:
                  type: string
                  enum:
                    - request.brand
                    - request.account.brand
                    - request.account.operator
                    - request.account.account_id
                    - compose_run
              required:
                - value
                - source
              additionalProperties: false
            account:
              nullable: true
              description: >-
                Opaque buyer-declared AdCP account_id when persisted. This is
                not a CRM id or seller-native account mapping.
              type: object
              properties:
                value:
                  type: string
                source:
                  type: string
                  enum:
                    - request.brand
                    - request.account.brand
                    - request.account.operator
                    - request.account.account_id
                    - compose_run
              required:
                - value
                - source
              additionalProperties: false
          required:
            - operatorDomain
            - brandDomain
            - country
            - customerId
            - advertiser
            - buyingOperator
            - account
          additionalProperties: false
        ask:
          type: object
          properties:
            brief:
              nullable: true
              type: string
            buyingMode:
              type: string
            requestAsks:
              type: array
              items:
                type: string
            inputSnapshotAvailability:
              type: string
              enum:
                - recorded
                - unavailable
          required:
            - brief
            - buyingMode
            - requestAsks
            - inputSnapshotAvailability
          additionalProperties: false
        fit:
          type: object
          properties:
            disposition:
              nullable: true
              type: string
              enum:
                - responded
                - declined_fit
                - declined_policy
                - not_live
            qualified:
              nullable: true
              type: boolean
            reasonAxis:
              nullable: true
              type: string
              enum:
                - fit
                - policy
            reason:
              nullable: true
              type: string
            policyDecision:
              nullable: true
              description: >-
                Recorded Brief Acceptance result. `needs_human_approval`
                preserves eligible inventory while requiring an operator
                decision before a transaction proceeds. Null means the
                historical run did not record this evidence.
              allOf:
                - $ref: '#/components/schemas/StorefrontApprovalPolicyDecision'
            matchedProducts:
              type: array
              items:
                $ref: '#/components/schemas/IntelligenceRunProductExplanation'
            unavailableProducts:
              type: array
              items:
                $ref: '#/components/schemas/IntelligenceRunUnpricedProductExplanation'
          required:
            - disposition
            - qualified
            - reasonAxis
            - reason
            - policyDecision
            - matchedProducts
            - unavailableProducts
          additionalProperties: false
        posture:
          type: object
          properties:
            recommended:
              nullable: true
              type: string
              enum:
                - direct_fit
                - hold_value
                - value_preserving_compromise
                - tradeoff_ladder
                - price_first
                - wholesale_mirror
            selected:
              nullable: true
              type: string
              enum:
                - direct_fit
                - hold_value
                - value_preserving_compromise
                - tradeoff_ladder
                - price_first
                - wholesale_mirror
            rationale:
              nullable: true
              type: string
            intensity:
              nullable: true
              type: string
              enum:
                - low
                - medium
                - high
            signals:
              type: array
              items:
                type: string
            guidance:
              type: array
              items:
                type: string
            matchedPricingFactIds:
              type: array
              items:
                type: string
            operatingInstructionsVersion:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            matchedBuyerInstructionIds:
              type: array
              items:
                type: string
            override:
              type: object
              properties:
                availability:
                  type: string
                  enum:
                    - recorded
                    - unavailable
                actor:
                  nullable: true
                  type: string
              required:
                - availability
                - actor
              additionalProperties: false
            acceptancePolicyVersion:
              type: object
              properties:
                availability:
                  type: string
                  enum:
                    - recorded
                    - unavailable
                value:
                  nullable: true
                  type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
              required:
                - availability
                - value
              additionalProperties: false
          required:
            - recommended
            - selected
            - rationale
            - intensity
            - signals
            - guidance
            - matchedPricingFactIds
            - operatingInstructionsVersion
            - matchedBuyerInstructionIds
            - override
            - acceptancePolicyVersion
          additionalProperties: false
        response:
          type: object
          properties:
            status:
              type: string
              enum:
                - responded
                - withheld
                - failed
                - unavailable
            summary:
              type: string
            limitations:
              description: >-
                Counter-pitch limitations shown with a response. Absence means
                the historical run did not record them.
              maxItems: 32
              type: array
              items:
                type: string
                minLength: 1
                maxLength: 2000
            exactSentState:
              type: object
              properties:
                availability:
                  type: string
                  enum:
                    - recorded
                    - unavailable
                productCount:
                  nullable: true
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                proposalHistoryAvailability:
                  type: string
                  enum:
                    - recorded
                    - unavailable
              required:
                - availability
                - productCount
                - proposalHistoryAvailability
              additionalProperties: false
            negotiationChanges:
              type: object
              properties:
                requestAsks:
                  type: array
                  items:
                    type: string
                refinementApplied:
                  nullable: true
              required:
                - requestAsks
                - refinementApplied
              additionalProperties: false
          required:
            - status
            - summary
            - exactSentState
            - negotiationChanges
          additionalProperties: false
        explanation:
          type: object
          properties:
            completeness:
              type: string
              enum:
                - complete
                - partial
            truncated:
              type: boolean
            reasons:
              maxItems: 32
              type: array
              items:
                type: object
                properties:
                  category:
                    type: string
                    enum:
                      - outside_seller_offering
                      - capability_not_offered
                      - supported_not_configured
                      - no_available_fit
                      - policy_decline
                      - waiting_for_input_or_approval
                      - execution_or_source_failure
                      - evidence_incomplete
                  reasonCode:
                    type: string
                    minLength: 1
                    maxLength: 128
                  requirement:
                    type: object
                    properties:
                      text:
                        nullable: true
                        type: string
                      sourceLocator:
                        nullable: true
                        type: string
                      importance:
                        nullable: true
                        type: string
                        enum:
                          - mandatory
                          - preference
                    required:
                      - text
                      - sourceLocator
                      - importance
                    additionalProperties: false
                  description:
                    type: string
                  evidence:
                    type: array
                    items:
                      type: object
                      properties:
                        kind:
                          type: string
                          enum:
                            - request
                            - catalog
                            - policy
                            - execution
                            - configuration
                            - response
                        ref:
                          type: string
                        revision:
                          nullable: true
                          type: string
                          pattern: ^sha256:[a-f0-9]{64}$
                        sourceLocator:
                          nullable: true
                          type: string
                        observedAt:
                          nullable: true
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\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))$
                      required:
                        - kind
                        - ref
                        - revision
                        - sourceLocator
                        - observedAt
                      additionalProperties: false
                  accountableBoundary:
                    nullable: true
                    type: string
                  responsible:
                    nullable: true
                    type: string
                  nextAction:
                    oneOf:
                      - type: object
                        properties:
                          kind:
                            type: string
                            enum:
                              - none
                          unavailableReason:
                            type: string
                        required:
                          - kind
                          - unavailableReason
                        additionalProperties: false
                      - type: object
                        properties:
                          kind:
                            type: string
                            enum:
                              - open_source_diagnostics
                          sourceId:
                            type: string
                            minLength: 1
                          sourceName:
                            nullable: true
                            type: string
                          label:
                            type: string
                        required:
                          - kind
                          - sourceId
                          - sourceName
                          - label
                        additionalProperties: false
                    type: object
                required:
                  - category
                  - reasonCode
                  - requirement
                  - description
                  - evidence
                  - accountableBoundary
                  - responsible
                  - nextAction
                additionalProperties: false
          required:
            - completeness
            - truncated
            - reasons
          additionalProperties: false
        approval:
          type: object
          properties:
            availability:
              type: string
              enum:
                - recorded
                - unavailable
            id:
              nullable: true
              type: string
            status:
              nullable: true
              type: string
              enum:
                - pending
                - approved
                - rejected
                - revoked
            reviewedBy:
              nullable: true
              type: string
            reviewedAt:
              nullable: true
              type: string
              format: date-time
              pattern: >-
                ^(?:(?:\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))$
            reviewerNotes:
              nullable: true
              type: string
            forwardedAt:
              nullable: true
              type: string
              format: date-time
              pattern: >-
                ^(?:(?:\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))$
          required:
            - availability
            - id
            - status
            - reviewedBy
            - reviewedAt
            - reviewerNotes
            - forwardedAt
          additionalProperties: false
        outcome:
          type: object
          properties:
            state:
              type: string
              enum:
                - pending
                - booked
                - delivered
                - rejected
                - failed
                - unattributed
                - unavailable
            eventType:
              nullable: true
              type: string
            eventAt:
              nullable: true
              type: string
              format: date-time
              pattern: >-
                ^(?:(?:\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))$
            mediaBuyId:
              nullable: true
              type: string
            mediaBuyStatus:
              nullable: true
              type: string
            pendingApprovalId:
              nullable: true
              type: string
            bookedBudget:
              nullable: true
              type: number
            deliveredImpressions:
              nullable: true
              type: number
            deliveredSpend:
              nullable: true
              type: number
            deliveredCurrency:
              nullable: true
              type: string
            attribution:
              type: object
              properties:
                availability:
                  type: string
                  enum:
                    - recorded
                    - unavailable
                model:
                  nullable: true
                  type: string
                matchedRunId:
                  nullable: true
                  type: string
                matchedProductIds:
                  type: array
                  items:
                    type: string
              required:
                - availability
                - model
                - matchedRunId
                - matchedProductIds
              additionalProperties: false
          required:
            - state
            - eventType
            - eventAt
            - mediaBuyId
            - mediaBuyStatus
            - pendingApprovalId
            - bookedBudget
            - deliveredImpressions
            - deliveredSpend
            - deliveredCurrency
            - attribution
          additionalProperties: false
        learning:
          type: object
          properties:
            analyticsEligibility:
              type: object
              properties:
                status:
                  type: string
                  enum:
                    - eligible
                    - ineligible
                    - unavailable
                reason:
                  type: string
              required:
                - status
                - reason
              additionalProperties: false
            postureContribution:
              type: object
              properties:
                availability:
                  type: string
                  enum:
                    - recorded
                    - unavailable
                selected:
                  nullable: true
                  type: string
                  enum:
                    - direct_fit
                    - hold_value
                    - value_preserving_compromise
                    - tradeoff_ladder
                    - price_first
                    - wholesale_mirror
                recommended:
                  nullable: true
                  type: string
                  enum:
                    - direct_fit
                    - hold_value
                    - value_preserving_compromise
                    - tradeoff_ladder
                    - price_first
                    - wholesale_mirror
              required:
                - availability
                - selected
                - recommended
              additionalProperties: false
            recommendationLineage:
              type: object
              properties:
                availability:
                  type: string
                  enum:
                    - recorded
                    - unavailable
              required:
                - availability
              additionalProperties: false
          required:
            - analyticsEligibility
            - postureContribution
            - recommendationLineage
          additionalProperties: false
        provenance:
          type: object
          properties:
            modelProvider:
              nullable: true
              type: string
            modelName:
              type: string
            operatingInstructionsVersion:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            durationMs:
              nullable: true
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
          required:
            - modelProvider
            - modelName
            - operatingInstructionsVersion
            - durationMs
          additionalProperties: false
      required:
        - id
        - status
        - resolution
        - failure
        - createdAt
        - purpose
        - buyer
        - ask
        - fit
        - posture
        - response
        - explanation
        - approval
        - outcome
        - learning
        - provenance
      additionalProperties: false
      description: >-
        Canonical seller-readable decision record projected from one storefront
        intelligence run and its attributed approval/commercial evidence.
    ErrorResponse:
      type: object
      properties:
        data:
          type: string
          nullable: true
          enum:
            - null
        error:
          $ref: '#/components/schemas/ApiError'
      required:
        - data
        - error
      additionalProperties: false
      description: Standard error response
    IntelligenceRunPurpose:
      type: string
      enum:
        - live
        - setup_test
        - simulation
        - probe
        - evaluation
      description: >-
        Trusted execution classification. Null is reserved for historical runs
        recorded before purpose was required.
    StorefrontApprovalPolicyDecision:
      type: string
      enum:
        - definitely_on_policy
        - definitely_not_on_policy
        - needs_human_approval
      description: >-
        Policy confidence for storefront approval automation.
        `definitely_on_policy` is eligible for automatic approval,
        `definitely_not_on_policy` is a clear policy conflict, and
        `needs_human_approval` is the safe default for ambiguous or incomplete
        evidence.
    IntelligenceRunProductExplanation:
      type: object
      properties:
        productId:
          nullable: true
          type: string
        name:
          nullable: true
          type: string
        description:
          nullable: true
          type: string
        reasoning:
          nullable: true
          type: string
        pricing:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/IntelligenceRunProductPricingExplanation'
        bundleIds:
          type: array
          items:
            type: string
        signalIds:
          type: array
          items:
            type: string
        formatIds:
          type: array
          items:
            $ref: '#/components/schemas/IntelligenceRunProductFormatExplanation'
      required:
        - productId
        - name
        - description
        - reasoning
        - pricing
        - bundleIds
        - signalIds
        - formatIds
      additionalProperties: false
      description: >-
        Buyer-safe explanation of one product selected for the storefront
        response.
    IntelligenceRunUnpricedProductExplanation:
      type: object
      properties:
        name:
          nullable: true
          type: string
        reasoning:
          nullable: true
          type: string
        reason:
          type: string
        bundleIds:
          type: array
          items:
            type: string
        signalIds:
          type: array
          items:
            type: string
      required:
        - name
        - reasoning
        - reason
        - bundleIds
        - signalIds
      additionalProperties: false
      description: >-
        Composition the model considered but the platform omitted because it
        could not be priced authoritatively.
    ApiError:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code
        message:
          type: string
          description: Human-readable error message
        field:
          description: Field path associated with the error
          type: string
        details:
          description: Additional error context
          type: object
          additionalProperties: {}
      required:
        - code
        - message
      additionalProperties: false
      description: Structured error object
    IntelligenceRunProductPricingExplanation:
      type: object
      properties:
        baseCpm:
          nullable: true
          type: number
        currency:
          nullable: true
          type: string
        operatorDiscount:
          nullable: true
          type: number
        finalCpm:
          nullable: true
          type: number
      required:
        - baseCpm
        - currency
        - operatorDiscount
        - finalCpm
      additionalProperties: false
      description: Server-computed CPM pricing summary for a selected composition.
    IntelligenceRunProductFormatExplanation:
      type: object
      properties:
        agentUrl:
          nullable: true
          type: string
        id:
          nullable: true
          type: string
      required:
        - agentUrl
        - id
      additionalProperties: false
      description: Creative format selected for an explained product.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or access token

````