> ## 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.

# List buyer account relationships

> List the seller-owned operator-and-brand relationships and their private coverage across active inventory sources.



## OpenAPI

````yaml /v2/storefront-api-v2.yaml get /account-mappings
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:
  /account-mappings:
    get:
      tags:
        - Storefront
      summary: List buyer account relationships
      description: >-
        List the seller-owned operator-and-brand relationships and their private
        coverage across active inventory sources.
      operationId: listSellerAccountRelationships
      parameters:
        - in: query
          name: offset
          schema:
            default: 0
            type: integer
            minimum: 0
            maximum: 9007199254740991
        - in: query
          name: limit
          schema:
            default: 50
            type: integer
            minimum: 1
            maximum: 100
        - in: query
          name: search
          schema:
            type: string
            maxLength: 200
        - in: query
          name: relationshipId
          schema:
            type: string
            minLength: 1
            maxLength: 255
      responses:
        '200':
          description: List buyer account relationships
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SellerAccountMappingList'
        '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'
      security:
        - bearerAuth: []
components:
  schemas:
    SellerAccountMappingList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/SellerAccountMappingItem'
        sources:
          type: array
          items:
            $ref: '#/components/schemas/SellerAccountMappingSource'
        page:
          type: object
          properties:
            offset:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            limit:
              type: integer
              minimum: 1
              maximum: 100
            total:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            hasMore:
              type: boolean
          required:
            - offset
            - limit
            - total
            - hasMore
          additionalProperties: false
        totals:
          $ref: '#/components/schemas/SellerAccountMappingTotals'
        dsEnabled:
          default: true
          description: >-
            Deprecated: always true. The design-system view is now the only view
            (the ds-widgets flag was retired). Retained as a required response
            field so released clients and cached widget bundles that read it
            keep deserializing; removed in a future major version.
          type: boolean
      required:
        - items
        - sources
        - page
        - totals
        - dsEnabled
      additionalProperties: false
    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
    SellerAccountMappingItem:
      type: object
      properties:
        accountId:
          type: string
        relationshipId:
          type: string
        operatorDomain:
          type: string
        brandDomain:
          type: string
        displayName:
          type: string
        sandbox:
          type: boolean
        billingGate:
          $ref: '#/components/schemas/ReadyToInvoiceGate'
        grants:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
              billing:
                nullable: true
                type: string
              count:
                type: integer
                minimum: 0
                maximum: 9007199254740991
            required:
              - status
              - billing
              - count
            additionalProperties: false
        pendingIntakeCount:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        pendingReviewCount:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        pendingExternalCount:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        pendingRequests:
          type: array
          items:
            type: object
            properties:
              requestId:
                type: string
              authority:
                type: string
                enum:
                  - seller
                  - external_agent
                  - account_input
              authorityRef:
                nullable: true
                type: string
              requestedBilling:
                type: string
                enum:
                  - operator
                  - agent
                  - advertiser
              billingReady:
                type: boolean
              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))$
              updatedAt:
                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))$
              allowedActions:
                type: object
                properties:
                  accept:
                    type: boolean
                  linkExisting:
                    type: boolean
                  reject:
                    type: boolean
                required:
                  - accept
                  - linkExisting
                  - reject
                additionalProperties: false
            required:
              - requestId
              - authority
              - authorityRef
              - requestedBilling
              - billingReady
              - createdAt
              - updatedAt
              - allowedActions
            additionalProperties: false
        sourceCoverage:
          type: array
          items:
            $ref: '#/components/schemas/SellerAccountMappingCoverage'
        openProposalCount:
          nullable: true
          description: >-
            Open (undecided) demand-inbox proposals for this exact
            operator/brand relationship — the same predicate the demand inbox
            itself uses, so this count and the inbox link it powers never
            disagree. Only counts a run whose latest response carries an actual
            proposal (a non-empty proposal id); a product offer, an explicit
            no-offer, or an unavailable/failed response is a real answer but not
            a proposal, and is excluded. Null when currently unavailable (a
            query failure), never a fabricated 0. The demand-inbox ledger has no
            sandbox column, so a live and a sandbox relationship sharing the
            same operator/brand domains read the same count here;
            totals.openProposals still counts that ledger total once, not once
            per relationship.
          type: integer
          minimum: 0
          maximum: 9007199254740991
        mtdSpend:
          $ref: '#/components/schemas/SellerAccountMoneyAmount'
          description: >-
            This relationship's month-to-date delivered spend (net, as
            seller-reported), attributed per media buy to this exact
            relationship via the authoritative account_relationship_id on its
            routing record (never a buyer/brand heuristic). currency is the
            SOURCE's own reported delivery currency for those buys, verified
            against the underlying delivery data itself (never assumed from the
            buyer's confirmed currency, which can genuinely differ from what the
            source actually delivered in). Null when this relationship placed no
            attributable media buy this month, its media buys report more than
            one source currency (or a buy's own currency couldn't be verified at
            all), or the figure is currently unavailable.
      required:
        - accountId
        - relationshipId
        - operatorDomain
        - brandDomain
        - displayName
        - sandbox
        - billingGate
        - grants
        - pendingIntakeCount
        - pendingReviewCount
        - pendingExternalCount
        - pendingRequests
        - sourceCoverage
        - openProposalCount
        - mtdSpend
      additionalProperties: false
    SellerAccountMappingSource:
      type: object
      properties:
        inventorySourceId:
          type: string
        inventorySourceKey:
          type: string
        name:
          type: string
        executionType:
          type: string
        supportsNativeAccounts:
          type: boolean
        lifecycleAuthority:
          type: string
          enum:
            - seller
            - upstream_agent
        controls:
          type: object
          properties:
            observe:
              type: boolean
            map:
              type: boolean
            approve:
              type: boolean
            create:
              type: boolean
          required:
            - observe
            - map
            - approve
            - create
          additionalProperties: false
        reconciliation:
          type: object
          properties:
            state:
              type: string
              enum:
                - never
                - running
                - complete
                - incomplete
                - failed
            attemptGeneration:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            lastAttemptAt:
              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))$
            lastCompleteAt:
              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))$
            observedCount:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            archivedCount:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            diagnosticCode:
              nullable: true
              type: string
            diagnosticMessage:
              nullable: true
              type: string
          required:
            - state
            - attemptGeneration
            - lastAttemptAt
            - lastCompleteAt
            - observedCount
            - archivedCount
            - diagnosticCode
            - diagnosticMessage
          additionalProperties: false
      required:
        - inventorySourceId
        - inventorySourceKey
        - name
        - executionType
        - supportsNativeAccounts
        - lifecycleAuthority
        - controls
        - reconciliation
      additionalProperties: false
    SellerAccountMappingTotals:
      type: object
      properties:
        buyersCount:
          nullable: true
          description: >-
            Distinct operator domains across every non-rejected relationship on
            this storefront (a relationship whose every grant is rejected is not
            counted as a buyer). Null when currently unavailable.
          type: integer
          minimum: 0
          maximum: 9007199254740991
        openProposals:
          nullable: true
          description: >-
            The demand-inbox ledger's open-proposal count (see
            items[].openProposalCount for what counts as a proposal) for every
            distinct operator/brand domain pair on this storefront, summed once
            per domain pair (not just this page). NOT the sum of
            items[].openProposalCount: the ledger has no sandbox column, so a
            live and a sandbox relationship sharing the same domains both report
            that domain pair's full count on their own item — summing per item
            would double it. Null when currently unavailable.
          type: integer
          minimum: 0
          maximum: 9007199254740991
        activeThisMonth:
          $ref: '#/components/schemas/SellerAccountMoneyAmount'
          description: >-
            Sum of every relationship's mtdSpend on this storefront — each
            attributed media buy is counted toward exactly one relationship, so
            this never double-counts. currency follows the same
            source-delivery-currency rule as items[].mtdSpend. Null when the
            resolved relationships span more than one currency (summed money
            never mixes currencies), any relationship had real spend whose own
            currency couldn't be verified, or the figure is currently
            unavailable.
      required:
        - buyersCount
        - openProposals
        - activeThisMonth
      additionalProperties: false
    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
    ReadyToInvoiceGate:
      type: object
      properties:
        required:
          type: boolean
        status:
          type: string
          enum:
            - not_required
            - pending
            - ready
            - revoked
        assertionId:
          nullable: true
          type: string
        billingEntity:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ReadyToInvoiceGateBillingEntity'
      required:
        - required
        - status
        - assertionId
        - billingEntity
      additionalProperties: false
    SellerAccountMappingCoverage:
      type: object
      properties:
        inventorySourceKey:
          type: string
        coverage:
          type: string
          enum:
            - bound
            - not_required
            - missing
            - ambiguous
            - stale
        sourceExternalAccountId:
          nullable: true
          type: string
        bindingVersion:
          nullable: true
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        nativeAccountGeneration:
          nullable: true
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        nativeAccountStatus:
          nullable: true
          type: string
        listingVersion:
          nullable: true
          type: string
        lastSeenAt:
          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))$
        candidateCount:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        candidates:
          maxItems: 5
          type: array
          items:
            $ref: '#/components/schemas/SellerAccountMappingCandidate'
      required:
        - inventorySourceKey
        - coverage
        - sourceExternalAccountId
        - bindingVersion
        - nativeAccountGeneration
        - nativeAccountStatus
        - listingVersion
        - lastSeenAt
        - candidateCount
        - candidates
      additionalProperties: false
    SellerAccountMoneyAmount:
      nullable: true
      type: object
      properties:
        amount:
          type: number
        currency:
          type: string
      required:
        - amount
        - currency
      additionalProperties: false
    ReadyToInvoiceGateBillingEntity:
      type: object
      properties:
        legalName:
          type: string
        vatId:
          nullable: true
          type: string
        taxId:
          nullable: true
          type: string
        registrationNumber:
          nullable: true
          type: string
      required:
        - legalName
        - vatId
        - taxId
        - registrationNumber
      additionalProperties: false
    SellerAccountMappingCandidate:
      type: object
      properties:
        sourceExternalAccountId:
          type: string
        displayLabel:
          nullable: true
          type: string
        lastSeenAt:
          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))$
        reason:
          type: string
          enum:
            - operator_brand_sandbox_match
      required:
        - sourceExternalAccountId
        - displayLabel
        - lastSeenAt
        - reason
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or access token

````