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

# Attach creative collection to campaign

> Attach a creative collection to the campaign as a library, source asset set, approved set, or testing set.



## OpenAPI

````yaml /v2/buyer-api-v2.yaml post /campaigns/{campaignId}/creative-collections/{collectionId}/attach
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:
  /campaigns/{campaignId}/creative-collections/{collectionId}/attach:
    post:
      tags:
        - Creatives
      summary: Attach creative collection to campaign
      description: >-
        Attach a creative collection to the campaign as a library, source asset
        set, approved set, or testing set.
      operationId: attachCreativeCollectionToCampaign
      parameters:
        - in: path
          name: campaignId
          schema:
            type: string
            minLength: 1
          required: true
        - in: path
          name: collectionId
          schema:
            type: string
            minLength: 1
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AttachCreativeCollectionBody'
      responses:
        '200':
          description: Attach creative collection to campaign
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreativeCollectionMutationResponse'
        '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:
    AttachCreativeCollectionBody:
      description: >-
        Attach collection metadata to the campaign workspace. This does not
        launch or sync creatives by itself.
      type: object
      properties:
        role:
          default: creative_library
          description: >-
            How a campaign uses the collection: working creative library, source
            assets, approved launch set, or testing set.
          type: string
          enum:
            - creative_library
            - source_assets
            - approved_set
            - test_set
        sync_policy:
          default: manual
          description: >-
            Whether campaign attachment changes are manual or automatically
            include new collection members.
          type: string
          enum:
            - manual
            - auto_include_new_members
        metadata:
          default: {}
          type: object
          additionalProperties: {}
    CreativeCollectionMutationResponse:
      description: Mutation response for collection management.
      type: object
      properties:
        collection:
          $ref: '#/components/schemas/CreativeCollectionSummary'
        added_count:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        removed_count:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        attached:
          allOf:
            - $ref: '#/components/schemas/CampaignCreativeCollectionAttachment'
        assigned_count:
          description: Number of creative_manifest_campaign rows created by this operation.
          type: integer
          minimum: 0
          maximum: 9007199254740991
        legacy_members_excluded:
          description: >-
            Creative members skipped because their manifest lacks format_kind
            (upgrade required).
          type: integer
          minimum: 0
          maximum: 9007199254740991
      required:
        - collection
      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
    CreativeCollectionSummary:
      description: >-
        A creative collection owned by an advertiser, campaign, or customer
        workspace.
      type: object
      properties:
        collection_id:
          type: string
        campaign_id:
          type: string
        advertiser_id:
          description: >-
            Advertiser that owns this collection. Present when owner_scope is
            advertiser.
          type: string
        owner_scope:
          description: >-
            Derived scope: advertiser when advertiser_id is set, campaign when
            campaign_id is set, otherwise customer.
          type: string
          enum:
            - advertiser
            - campaign
            - customer
        name:
          type: string
        description:
          nullable: true
          type: string
        metadata:
          type: object
          additionalProperties: {}
        member_count:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        creative_count:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        asset_count:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        attached_campaign_count:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        members:
          type: array
          items:
            $ref: '#/components/schemas/CreativeCollectionMemberSummary'
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/CampaignCreativeCollectionAttachment'
        created_at:
          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))$
        updated_at:
          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:
        - collection_id
        - name
        - member_count
        - creative_count
        - asset_count
        - attached_campaign_count
        - created_at
        - updated_at
      additionalProperties: false
    CampaignCreativeCollectionAttachment:
      description: Campaign attachment metadata for a creative collection.
      type: object
      properties:
        campaign_id:
          type: string
        collection_id:
          type: string
        role:
          description: >-
            How a campaign uses the collection: working creative library, source
            assets, approved launch set, or testing set.
          type: string
          enum:
            - creative_library
            - source_assets
            - approved_set
            - test_set
        sync_policy:
          description: >-
            Whether campaign attachment changes are manual or automatically
            include new collection members.
          type: string
          enum:
            - manual
            - auto_include_new_members
        metadata:
          type: object
          additionalProperties: {}
        created_at:
          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))$
        updated_at:
          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:
        - campaign_id
        - collection_id
        - role
        - sync_policy
        - created_at
        - updated_at
      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
    CreativeCollectionMemberSummary:
      description: >-
        A collection member with an optional creative summary when the member
        references a saved creative.
      type: object
      properties:
        member_type:
          description: >-
            Type of item in a creative collection. Creative members are saved
            campaign creatives; asset members are raw/source/brand/generated
            assets.
          type: string
          enum:
            - creative
            - asset
        member_id:
          type: string
        label:
          nullable: true
          type: string
        metadata:
          type: object
          additionalProperties: {}
        creative:
          allOf:
            - $ref: '#/components/schemas/CreativeManifestSummary'
        created_at:
          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))$
        updated_at:
          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:
        - member_type
        - member_id
        - created_at
        - updated_at
      additionalProperties: false
    CreativeManifestSummary:
      description: >-
        Compact creative-manifest view returned by list endpoints. Use
        `get_creative` for the full resource.
      type: object
      properties:
        creative_id:
          description: Creative manifest ID
          type: string
        campaign_id:
          description: Campaign ID (omitted for advertiser-level masters)
          type: string
        name:
          description: Manifest name
          type: string
        format_id:
          description: ADCP format identifier
          type: object
          properties:
            id:
              type: string
            agent_url:
              type: string
            width:
              type: number
            height:
              type: number
            duration_ms:
              type: number
          required:
            - id
            - agent_url
          additionalProperties: {}
        format_kind:
          description: AdCP 3.1 canonical format kind (e.g. image_carousel, video_hosted)
          type: string
        template_id:
          description: Creative template used for this manifest
          type: string
        brand_domain:
          description: Brand domain (auto-resolved)
          type: string
        preview_url:
          description: URL to preview the processed creative (processed HTML hosted in GCS)
          type: string
          format: uri
        requires_upgrade:
          description: >-
            True when this creative has no format_kind and must be upgraded
            before it can be assigned to new media buys. Call POST .../upgrade
            to set format_kind and clear this flag.
          type: boolean
        reuse_count:
          description: >-
            Number of campaigns this creative is actively attached to. A reuse
            signal for the advertiser library (returned on the advertiser-scoped
            list); omitted on single-manifest reads.
          type: integer
          minimum: 0
          maximum: 9007199254740991
        creative_role:
          description: >-
            Advertiser-library role (evergreen or reference). Absent for
            flight-specific creatives that live on their campaign.
          allOf:
            - $ref: '#/components/schemas/CreativeRole'
        creative_source:
          description: >-
            Provenance of the creative (uploaded/generated/connected). Today
            always "uploaded".
          allOf:
            - $ref: '#/components/schemas/CreativeSource'
        platform_links:
          description: >-
            Provider/sales-agent creative identifiers captured from
            sync_creatives for round-trip comparison.
          type: array
          items:
            $ref: '#/components/schemas/CreativeManifestPlatformLink'
        created_at:
          description: Created timestamp
          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))$
        updated_at:
          description: Updated timestamp
          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))$
        asset_count:
          description: >-
            Number of uploaded assets in this manifest. Replaces the embedded
            `assets[]` array on summary rows.
          example: 3
          type: integer
          minimum: 0
          maximum: 9007199254740991
        primary_asset_type:
          description: >-
            The dominant media asset type (VIDEO > AUDIO > IMAGE/HTML) — lets
            clients classify a creative by medium even when format_kind is
            absent (e.g. a bare upload). Omitted when the manifest has no media
            asset.
          type: string
          enum:
            - IMAGE
            - VIDEO
            - AUDIO
            - HTML
            - JAVASCRIPT
            - CSS
            - TEXT
            - URL
            - VAST
            - FONT
            - LOGO
            - DOCUMENT
        sync_status:
          description: >-
            Compact sync status across sales agents. Use `get_creative` for the
            full sync metadata (including `last_synced_at`).
          type: object
          properties:
            synced:
              description: True when the manifest is synced with at least one agent
              type: boolean
            agent_count:
              description: Number of sales agents the manifest is synced with
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
          required:
            - synced
            - agent_count
          additionalProperties: false
        target_format_ids:
          description: >-
            Additional format IDs this creative covers beyond its primary
            format_id.
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              agent_url:
                type: string
              width:
                type: number
              height:
                type: number
              duration_ms:
                type: number
            required:
              - id
              - agent_url
            additionalProperties: {}
        placements:
          description: >-
            Resolved placements this creative maps to (primary + target
            formats), named against the campaign's required placements.
            Populated by the campaign creative-manifest list.
          type: array
          items:
            type: object
            properties:
              placement_id:
                type: string
              placement_name:
                type: string
            required:
              - placement_id
              - placement_name
            additionalProperties: false
      required:
        - creative_id
        - name
        - created_at
        - updated_at
        - asset_count
      additionalProperties: false
    CreativeRole:
      description: >-
        Advertiser creative-library role: evergreen (serve-ready, reusable
        across campaigns) or reference (a generation input, not served). Absent
        for flight-specific creatives.
      type: string
      enum:
        - evergreen
        - reference
    CreativeSource:
      description: >-
        Origin of the creative: uploaded (bring-your-own), generated (by a
        creative agent), or connected (from a 3p platform).
      type: string
      enum:
        - uploaded
        - generated
        - connected
    CreativeManifestPlatformLink:
      description: >-
        Readback linkage between a campaign creative and the sales
        agent/provider creative created during sync.
      type: object
      properties:
        agent_id:
          description: Stable ADCP sales-agent identifier used for the sync.
          type: string
        agent_name:
          description: Human-readable sales-agent or platform adapter name.
          type: string
        platform_id:
          description: >-
            Provider-assigned creative identifier returned by sync_creatives,
            when available.
          type: string
        status:
          description: Latest sync status reported for this agent.
          type: string
        approval_status:
          description: Latest provider or seller approval status, when available.
          type: string
        synced_at:
          description: Timestamp of the latest completed sync.
          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:
        - agent_id
        - agent_name
        - status
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or access token

````