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

# List planning briefs

> List planning briefs (prospective briefs) the caller customer has shared with publishers. Returns the buyer-facing view — the internal `matchScore` aggregate is never exposed on the buy side.



## OpenAPI

````yaml /v2/buyer-api-v2.yaml get /planning-briefs
openapi: 3.0.0
info:
  title: Scope3 Buyer API
  version: 2.0.0
  description: |-
    REST API for advertisers to manage advertisers, campaigns, and reporting.

    ## Authentication

    All endpoints require a Bearer token in the Authorization header:
    ```
    Authorization: Bearer your-api-key
    ```

    ## Base URL

    `https://api.interchange.io/api/v2/buyer`

    ## For AI Agents

    AI agents can use the MCP endpoint at `/mcp/v2/buyer` 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/buyer
    description: Production server
security: []
tags:
  - name: Account
    description: Account management, service tokens, and preferences
  - name: Advertisers
    description: Manage advertisers
  - name: Product Discovery
    description: Discover and select products
  - name: Campaigns
    description: Manage advertising campaigns
  - name: Creatives
    description: Build, manage, and sync campaign creatives via AdCP Creative Protocol
  - name: Reporting
    description: Access performance metrics
  - name: Event Sources
    description: >-
      Manage event source configurations and log conversion/marketing events for
      attribution
  - name: Property Lists
    description: Validate property lists against AAO registry
  - name: Sales Agents
    description: View and connect sales agents
  - name: Measurement
    description: Measurement sources, records, context, and freshness
  - name: Syndication
    description: Syndicate resources to ADCP agents
  - name: Tasks
    description: Track async operation status
  - name: Planning Briefs
    description: >-
      Share prospective briefs with publishers and collect their
      fit/quote/clarify/decline/book responses (gated by the
      demand-supply-signals flag).
  - name: Buyer Billing
    description: >-
      Consolidated invoicing for buyers — invoices and pending invoice items
      issued by Scope3 across the buyer customer.
  - name: MCP
    description: Model Context Protocol endpoints for AI agents
paths:
  /planning-briefs:
    get:
      tags:
        - Planning Briefs
      summary: List planning briefs
      description: >-
        List planning briefs (prospective briefs) the caller customer has shared
        with publishers. Returns the buyer-facing view — the internal
        `matchScore` aggregate is never exposed on the buy side.
      operationId: listBuyerPlanningBriefs
      parameters:
        - in: query
          name: status
          schema:
            description: >-
              Lifecycle of a demand signal. `SEARCHING` on create; `QUOTED` when
              at least one seller responds; `BOOKED` when at least one target
              converts to a deal; `ABANDONED` after idle; `DECLINED` if every
              target declined.
            type: string
            enum:
              - SEARCHING
              - QUOTED
              - BOOKED
              - ABANDONED
              - DECLINED
        - in: query
          name: advertiserId
          schema:
            type: integer
            maximum: 9007199254740991
            minimum: 1
        - in: query
          name: limit
          schema:
            type: integer
            maximum: 100
            minimum: 1
        - in: query
          name: offset
          schema:
            type: integer
            minimum: 0
            maximum: 9007199254740991
      responses:
        '200':
          description: List planning briefs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DemandSignalList'
        '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:
    DemandSignalList:
      description: Paginated list of demand signals owned by the buyer customer.
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/DemandSignal'
        total:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        hasMore:
          type: boolean
        nextOffset:
          nullable: true
          type: integer
          minimum: 0
          maximum: 9007199254740991
      required:
        - items
        - total
        - hasMore
        - nextOffset
      additionalProperties: false
    ErrorResponse:
      description: Standard error response
      type: object
      properties:
        data:
          type: string
          nullable: true
          enum:
            - null
        error:
          $ref: '#/components/schemas/ApiError'
      required:
        - data
        - error
      additionalProperties: false
    DemandSignal:
      description: >-
        Buyer-facing view of a demand signal. Excludes the internal `matchScore`
        field; sellers see that on their augmented view in the storefront API.
      type: object
      properties:
        id:
          type: string
        customerId:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        advertiserId:
          nullable: true
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        brandDomain:
          nullable: true
          type: string
        buyerName:
          type: string
        advertiserName:
          type: string
        campaignName:
          nullable: true
          type: string
        audience:
          type: string
        geo:
          type: string
        channels:
          type: array
          items:
            description: >-
              Channel the buyer wants to reach. Maps to ADCP MediaType.
              Lower-case to match the AdCP wire format; only Postgres-enum types
              use UPPERCASE.
            type: string
            enum:
              - display
              - native
              - video
              - audio
              - ctv
              - dooh
              - newsletter
              - podcast
        exclusions:
          type: array
          items:
            $ref: '#/components/schemas/DemandSignalExclusionOutput'
        startDate:
          type: string
        endDate:
          type: string
        flexibility:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/DemandSignalFlexibilityOutput'
        statedBudget:
          type: number
        currency:
          type: string
        primaryKpi:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/DemandSignalKpiOutput'
        priceExpect:
          nullable: true
          type: number
        creativeReady:
          nullable: true
          type: boolean
        rawPrompt:
          nullable: true
          type: string
        status:
          description: >-
            Lifecycle of a demand signal. `SEARCHING` on create; `QUOTED` when
            at least one seller responds; `BOOKED` when at least one target
            converts to a deal; `ABANDONED` after idle; `DECLINED` if every
            target declined.
          type: string
          enum:
            - SEARCHING
            - QUOTED
            - BOOKED
            - ABANDONED
            - DECLINED
        targetingMode:
          description: >-
            `DIRECT` = buyer named the seller(s). `FILTERED` = matched ≤5
            candidates. `BROAD` = >5.
          type: string
          enum:
            - DIRECT
            - FILTERED
            - BROAD
        qualifiedBudget:
          nullable: true
          type: number
        recommendedProducts:
          type: array
          items:
            $ref: '#/components/schemas/DemandSignalRecommendedProduct'
        createdAt:
          type: string
        updatedAt:
          type: string
        targetCount:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        responseSummary:
          allOf:
            - $ref: '#/components/schemas/DemandSignalResponseSummary'
      required:
        - id
        - customerId
        - advertiserId
        - brandDomain
        - buyerName
        - advertiserName
        - campaignName
        - audience
        - geo
        - channels
        - exclusions
        - startDate
        - endDate
        - flexibility
        - statedBudget
        - currency
        - primaryKpi
        - priceExpect
        - creativeReady
        - rawPrompt
        - status
        - targetingMode
        - qualifiedBudget
        - recommendedProducts
        - createdAt
        - updatedAt
      additionalProperties: false
    ApiError:
      description: Structured error object
      type: object
      properties:
        code:
          description: Machine-readable error code
          type: string
        message:
          description: Human-readable error message
          type: string
        field:
          description: Field path associated with the error
          type: string
        details:
          description: Additional error context
          type: object
          additionalProperties: {}
      required:
        - code
        - message
      additionalProperties: false
    DemandSignalExclusionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - category
            - adjacency
            - competitor
            - domain
            - keyword
            - raw
        values:
          default: []
          type: array
          items:
            type: string
            minLength: 1
        raw:
          type: string
      required:
        - type
        - values
      additionalProperties: false
    DemandSignalFlexibilityOutput:
      type: object
      properties:
        mode:
          type: string
          enum:
            - firm
            - flexible
            - open
        days:
          type: integer
          minimum: 0
          maximum: 9007199254740991
      required:
        - mode
      additionalProperties: false
    DemandSignalKpiOutput:
      type: object
      properties:
        raw:
          type: string
        parsed:
          type: object
          properties:
            kpi:
              description: Primary KPI buyer is optimizing for (v1 enum).
              type: string
              enum:
                - attention_seconds
                - viewability_pct
                - ctr
                - vcr
                - vtr
                - reach
                - frequency_cap
                - sov
                - brand_lift
                - cpa
            op:
              type: string
              enum:
                - gt
                - gte
                - eq
                - lte
                - lt
            value:
              type: number
          required:
            - kpi
            - op
            - value
          additionalProperties: false
      required:
        - raw
      additionalProperties: false
    DemandSignalRecommendedProduct:
      type: object
      properties:
        productId:
          type: string
        name:
          type: string
        estimatedCpm:
          type: number
        estimatedImpressions:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        estimatedReach:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        matchPct:
          type: number
          minimum: 0
          maximum: 100
        rationale:
          type: string
      required:
        - productId
        - name
      additionalProperties: false
    DemandSignalResponseSummary:
      type: object
      properties:
        quotes:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        clarifies:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        declines:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        books:
          type: integer
          minimum: 0
          maximum: 9007199254740991
      required:
        - quotes
        - clarifies
        - declines
        - books
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or access token

````