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

# Adopt a managed video source into a creative

> Adopt a promoted managed video source into a creative manifest. The bounded hosted HTTPS URL is issued server-side, so the caller names a source rather than a URL. Optionally attaches the creative to a campaign and its media-buy packages. Requires managed video upload to be enabled for the customer.



## OpenAPI

````yaml /v2/buyer-api-v2.yaml post /creatives/adopt-managed-video-source
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: Signup
    description: Request reviewed access to Interchange
  - 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: 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: 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:
  /creatives/adopt-managed-video-source:
    post:
      tags:
        - Creatives
      summary: Adopt a managed video source into a creative
      description: >-
        Adopt a promoted managed video source into a creative manifest. The
        bounded hosted HTTPS URL is issued server-side, so the caller names a
        source rather than a URL. Optionally attaches the creative to a campaign
        and its media-buy packages. Requires managed video upload to be enabled
        for the customer.
      operationId: adoptManagedVideoSource
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdoptManagedVideoSourceBody'
      responses:
        '201':
          description: Adopt a managed video source into a creative
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdoptManagedVideoSourceResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            The credential lacks `interchange:write`, or the session cannot be
            attributed to a durable actor (a simulated staff session is refused
            outright).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            No promoted video source with this `source_uid` is owned by the
            given buyer, advertiser, and storefront. An unowned source and a
            nonexistent one are deliberately indistinguishable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: >-
            A creative already holds the requested name, the source is already
            adopted under a different name, the source's delivery was revoked or
            deletion-requested, an earlier adoption never finalized, the adopted
            creative's video asset was replaced or removed, or the
            source-identity state is still settling. `details.reason`
            distinguishes them: `name_taken`, `name_creation_in_progress`,
            `name_creation_abandoned`, `adoption_in_progress`,
            `adoption_abandoned`, `adoption_asset_unavailable`,
            `adoption_name_mismatch`, `source_delivery_revoked`,
            `source_deletion_requested`. `name_creation_in_progress` means a
            name writer is still running; `adoption_in_progress` means another
            adoption is completing or its blocker changed during classification.
            Those two are retryable. `adoption_abandoned` means a stale creation
            marker never cleared, even if an asset row landed. For the rest,
            choose or free a name as directed, or upload a new source after
            revocation/deletion. Branch on `details.reason`, not the message.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: >-
            Managed video source delivery is not enabled in this environment,
            managed video upload is not enabled for this customer, the source is
            not promoted (a source whose deletion was requested leaves the
            promoted state, so it arrives here), its retention window has ended,
            or the campaign belongs to a different advertiser.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: >-
            The managed video source delivery origin is misconfigured, so no
            bounded URL can be issued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    AdoptManagedVideoSourceBody:
      type: object
      properties:
        source_uid:
          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)$
          description: >-
            Opaque owner-scoped reference returned when the managed video source
            was promoted.
        advertiser_id:
          type: string
          pattern: ^[1-9][0-9]*$
          description: >-
            Advertiser that owns the source and will own the creative. A
            positive integer within the signed 64-bit range.
        storefront_id:
          type: string
          pattern: ^[1-9][0-9]*$
          description: >-
            Storefront the source was uploaded against. A positive integer
            within the signed 64-bit range.
        name:
          type: string
          minLength: 1
          maxLength: 255
          description: Buyer-facing creative name.
        campaign_id:
          description: >-
            Attach the creative to this campaign in the same call. This confirms
            campaign attachment only — the campaign's live media-buy packages
            are synced to sellers in the background, and that sync is not part
            of what the response confirms. Omit to leave the creative
            advertiser-scoped.
          type: string
          minLength: 1
          maxLength: 64
      required:
        - source_uid
        - advertiser_id
        - storefront_id
        - name
      additionalProperties: false
      description: >-
        Create or adopt a Creative Manifest from a promoted managed video
        source.
    AdoptManagedVideoSourceResponse:
      type: object
      properties:
        creative_id:
          type: string
          description: Creative manifest that now carries the managed video.
        source_uid:
          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)$
          description: The managed video source that was adopted.
        publication_uid:
          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)$
          description: >-
            Bounded hosted publication backing the creative asset. Revoking it
            revokes delivery.
        delivery_url:
          type: string
          description: >-
            Public HTTPS URL stored as the creative asset. Expires with the
            source retention window.
        campaign_id:
          description: >-
            A campaign the creative is attached to. Returned when the request
            named one, and on a replay when the creative is already attached to
            at least one campaign.
          type: string
        name:
          type: string
          description: >-
            Buyer-facing name of the creative. Adoption never renames an
            existing creative, so a replay returns the name it already had.
        created:
          type: boolean
          description: >-
            True only when this call created the creative. False means an
            existing adoption for this source was returned. Either way, a 2xx
            response with a requested `campaign_id` means the creative is
            attached to that campaign — not that sellers have accepted it into
            their media-buy packages, which sync in the background and are not
            confirmed here. Attachment is idempotent, so a retry finishes an
            attachment an earlier call left undone.
      required:
        - creative_id
        - source_uid
        - publication_uid
        - delivery_url
        - name
        - created
      additionalProperties: false
      description: Result of adopting a managed video source into a creative.
    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
    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
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or access token

````