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

# Duplicate creative

> Create a copy of an existing creative manifest (including its assets) within the same campaign. Returns the new manifest.



## OpenAPI

````yaml /v2/buyer-api-v2.yaml post /campaigns/{campaignId}/creatives/{creativeId}/duplicate
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}/creatives/{creativeId}/duplicate:
    post:
      tags:
        - Creatives
      summary: Duplicate creative
      description: >-
        Create a copy of an existing creative manifest (including its assets)
        within the same campaign. Returns the new manifest.
      operationId: duplicateCreative
      parameters:
        - in: path
          name: campaignId
          schema:
            description: Campaign ID
            type: string
            minLength: 1
          required: true
          description: Campaign ID
        - in: path
          name: creativeId
          schema:
            description: Creative manifest ID
            type: string
            minLength: 1
          required: true
          description: Creative manifest ID
      responses:
        '201':
          description: Duplicate creative
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreativeManifestResponse'
        '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:
    CreativeManifestResponse:
      description: Creative manifest with inline assets
      type: object
      properties:
        creative_id:
          description: Creative manifest ID
          type: string
        name:
          description: Manifest name
          type: string
        message:
          description: Creative brief text
          type: string
        brand_domain:
          description: Brand domain (auto-resolved)
          type: string
        template_id:
          description: Creative template used for this manifest
          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
        format_option_ref:
          description: AdCP 3.1 scope-discriminated format option reference.
          oneOf:
            - type: object
              properties:
                scope:
                  type: string
                  enum:
                    - publisher
                publisher_domain:
                  type: string
                format_option_id:
                  type: string
              required:
                - scope
                - publisher_domain
                - format_option_id
              additionalProperties: false
            - type: object
              properties:
                scope:
                  type: string
                  enum:
                    - product
                format_option_id:
                  type: string
              required:
                - scope
                - format_option_id
              additionalProperties: false
          type: object
        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
        industry_identifiers:
          description: Industry identifiers (Ad-ID, ISCI, Clearcast clock, IDcrea)
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - ad_id
                  - isci
                  - clearcast_clock
                  - idcrea
              value:
                type: string
            required:
              - type
              - value
            additionalProperties: false
        target_format_ids:
          description: Target format IDs (from campaign products)
          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: {}
        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'
        preview_url:
          description: URL to preview the processed creative (processed HTML hosted in GCS)
          type: string
          format: uri
        assets:
          description: Uploaded assets in this manifest
          type: array
          items:
            $ref: '#/components/schemas/ManifestAssetResponse'
        carousel_cards:
          description: Carousel card definitions for image_carousel creatives.
          type: array
          items:
            type: object
            properties:
              card_index:
                type: integer
                minimum: 0
                maximum: 9007199254740991
              media_asset_id:
                type: string
              headline:
                type: string
              description:
                type: string
              cta:
                type: string
              landing_page_url:
                type: string
              platform_extensions:
                type: array
                items:
                  type: object
                  additionalProperties: {}
            required:
              - card_index
              - media_asset_id
            additionalProperties: false
        html_processing:
          description: Result of HTML processing (CDN URL rewriting + macro insertion)
          type: object
          properties:
            processed_html:
              description: Full processed HTML (only included in create response, not GET)
              type: string
            processed_html_url:
              description: URL to processed HTML in GCS (for preview)
              type: string
              format: uri
            rewritten_refs:
              description: Asset references rewritten to CDN URLs
              type: array
              items:
                type: object
                properties:
                  original:
                    type: string
                  cdn_url:
                    type: string
                required:
                  - original
                  - cdn_url
                additionalProperties: false
            unresolved_refs:
              description: >-
                Local references found in HTML that did not match any uploaded
                asset
              type: array
              items:
                type: string
            inserted_macros:
              description: ADCP macros that were inserted
              type: array
              items:
                type: string
          required:
            - rewritten_refs
            - unresolved_refs
            - inserted_macros
          additionalProperties: false
        auto_detected_template:
          description: >-
            Auto-detected template info (populated when template_id was not
            explicitly provided)
          type: object
          properties:
            template_id:
              type: string
            template_name:
              type: string
            method:
              type: string
              enum:
                - tag_hints
                - html_analysis
                - file_analysis
                - none
          required:
            - template_id
            - template_name
            - method
          additionalProperties: false
        creative_manifest:
          description: Full ADCP creative manifest (built for sync)
        sync_status:
          description: Sync status across sales agents
          allOf:
            - $ref: '#/components/schemas/CreativeManifestSyncStatus'
        platform_links:
          description: >-
            Provider/sales-agent creative identifiers captured from
            sync_creatives for round-trip comparison.
          type: array
          items:
            $ref: '#/components/schemas/CreativeManifestPlatformLink'
        tracking:
          description: >-
            Auto-generated Scope3 tracking URLs for impression and click
            measurement
          type: object
          properties:
            impression_tracker_url:
              description: Scope3 impression tracker pixel URL with macro placeholders
              type: string
            click_tracker_url:
              description: >-
                Scope3 click tracker URL wrapping the original clickthrough with
                macro placeholders
              type: string
            supported_macros:
              description: >-
                ADCP macros supported by this creative format (filled at ad
                serving time)
              type: array
              items:
                type: string
          required:
            - supported_macros
          additionalProperties: false
        campaign_id:
          description: Campaign ID (omitted for advertiser-level masters)
          type: string
        advertiser_id:
          description: Advertiser ID this manifest belongs to
          type: string
        frequencyCaps:
          description: Buyer-defined frequency caps configured for this creative
          type: array
          items:
            $ref: '#/components/schemas/FrequencyCapConfig'
        already_exists:
          description: >-
            True when create returned a pre-existing manifest with the same
            (campaign_id, name) instead of inserting a new one. Only set on
            create responses.
          type: boolean
        ignored_files:
          description: >-
            Number of files in the create request that were ignored because the
            request hit the (campaign_id, name) dedupe path and returned a
            pre-existing manifest. Use the update endpoint to add or replace
            assets on the existing manifest. Only set when already_exists is
            true.
          type: integer
          minimum: 0
          maximum: 9007199254740991
        warnings:
          description: >-
            Format compatibility warnings emitted when an explicit format_id
            does not match any format accepted by the campaign products. Only
            set on update responses when a mismatch is detected. The creative
            was saved; reassign it or update the product configuration before
            executing.
          type: array
          items:
            type: string
        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))$
      required:
        - creative_id
        - name
        - assets
        - created_at
        - updated_at
      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
    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
    ManifestAssetResponse:
      description: Asset within a creative manifest
      type: object
      properties:
        asset_id:
          description: Asset ID
          type: string
        name:
          description: Display name
          type: string
        original_filename:
          description: Original uploaded filename
          type: string
        asset_type:
          description: Asset type
          type: string
          enum:
            - IMAGE
            - VIDEO
            - AUDIO
            - HTML
            - JAVASCRIPT
            - CSS
            - TEXT
            - URL
            - VAST
            - FONT
            - LOGO
            - DOCUMENT
        content_type:
          description: MIME type
          type: string
        file_size:
          description: File size in bytes
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        public_url:
          description: Public URL
          type: string
          format: uri
        asset_source:
          description: >-
            Whether this asset was uploaded by the user or generated by the
            system
          type: string
          enum:
            - CREATIVE_SOURCE
            - USER_UPLOADED
            - SYSTEM_PROCESSED
        slot_asset_id:
          description: >-
            AdCP format slot asset_id this asset is bound to, when applicable.
            The slot asset_id is the key under which the asset appears in the
            AdCP creative manifest.
          type: string
        asset_control:
          description: >-
            Optional fidelity controls for supplied assets that should be
            preserved by creative generators, renderers, and evaluators.
          allOf:
            - $ref: '#/components/schemas/CreativeAssetControl'
        width:
          description: Actual width in pixels (image and video assets only)
          type: integer
          maximum: 9007199254740991
          minimum: 1
        height:
          description: Actual height in pixels (image and video assets only)
          type: integer
          maximum: 9007199254740991
          minimum: 1
        declared_sizes:
          description: >-
            Buyer-declared display sizes for an HTML ad tag, supplied
            out-of-band via a CSV/manifest at upload. Declared, not probed —
            distinct from width/height, which hold measured dimensions.
          type: array
          items:
            type: object
            properties:
              width:
                type: integer
                maximum: 9007199254740991
                minimum: 1
              height:
                type: integer
                maximum: 9007199254740991
                minimum: 1
            required:
              - width
              - height
            additionalProperties: false
        duration_ms:
          description: >-
            Detected duration in milliseconds, probed at upload (video and audio
            assets)
          type: integer
          maximum: 9007199254740991
          minimum: 1
        codec:
          description: >-
            Detected codec, normalized at upload, e.g. "h264", "aac", "mp3"
            (video and audio assets)
          type: string
        bitrate_kbps:
          description: >-
            Detected average overall bitrate in kilobits per second (video and
            audio assets)
          type: integer
          maximum: 9007199254740991
          minimum: 1
        frame_rate:
          description: Detected frames per second, e.g. 30 or 29.97 (video assets)
          type: number
          minimum: 0
          exclusiveMinimum: true
        sample_rate:
          description: Detected audio sampling rate in hertz, e.g. 44100 (audio assets)
          type: integer
          maximum: 9007199254740991
          minimum: 1
        container:
          description: >-
            Detected container/format family, e.g. "mp4", "mp3", "wav" (video
            and audio assets)
          type: string
        warnings:
          description: >-
            Dimensional inconsistencies detected at upload time. Present only
            when a problem was found.
          type: array
          items:
            $ref: '#/components/schemas/AssetDimensionWarning'
        created_at:
          description: Upload 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))$
      required:
        - asset_id
        - name
        - original_filename
        - asset_type
        - content_type
        - file_size
        - public_url
        - asset_source
        - created_at
      additionalProperties: false
    CreativeManifestSyncStatus:
      description: Sync status across sales agents for a creative manifest.
      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
        last_synced_at:
          description: Timestamp of the most recent successful 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:
        - synced
        - agent_count
      additionalProperties: false
    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
    FrequencyCapConfig:
      description: Buyer-side frequency cap configuration
      type: object
      properties:
        max_impressions:
          description: Maximum number of impressions allowed within the window
          example: 3
          type: integer
          maximum: 9007199254740991
          minimum: 1
        window:
          $ref: '#/components/schemas/FrequencyCapWindow'
        id:
          description: Unique identifier for the frequency cap config
          example: '12345'
          type: string
        targetLevel:
          description: Level of the entity the cap applies to
          allOf:
            - $ref: '#/components/schemas/FrequencyCapTargetLevel'
        targetId:
          description: >-
            Identifier of the entity at the chosen target level: advertiser_id
            when targetLevel is ADVERTISER, campaign_id when CAMPAIGN,
            creative_id when CREATIVE.
          example: camp_abc123
          type: string
        createdAt:
          description: ISO 8601 creation timestamp
          type: string
        updatedAt:
          description: ISO 8601 last-updated timestamp
          type: string
        archivedAt:
          description: ISO 8601 archive timestamp; null for active configs
          nullable: true
          type: string
      required:
        - max_impressions
        - window
        - id
        - targetLevel
        - targetId
        - createdAt
        - updatedAt
      additionalProperties: {}
    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
    CreativeAssetControl:
      description: >-
        Renderer/evaluator guidance for supplied creative assets that must
        retain visual fidelity through generation and refinement.
      type: object
      properties:
        locked_asset:
          description: >-
            When true, creative generation and rendering should preserve this
            supplied asset rather than redraw or reinterpret it.
          type: boolean
        asset_role:
          description: >-
            Role of the supplied asset, such as product, package, logo, brand,
            reference, or scene.
          type: string
          enum:
            - product
            - package
            - logo
            - brand
            - reference
            - scene
            - other
        can_transform:
          description: >-
            Whether the asset may be transformed. Set false for exact product
            imagery, packaging, logos, book covers, or regulated artwork.
          type: boolean
        preservation_notes:
          description: >-
            Human-readable instructions for preserving asset fidelity, e.g.
            "Preserve cover typography and portrait exactly."
          type: string
          minLength: 1
          maxLength: 1000
        source_asset_id:
          description: >-
            Raw/source creative-session asset ID used to derive this linked
            asset, when the asset is a rendition or locked composite.
          type: string
          minLength: 1
          maxLength: 255
        rendition_asset_id:
          description: >-
            Creative-session rendition asset ID used in the final creative
            manifest.
          type: string
          minLength: 1
          maxLength: 255
      additionalProperties: false
    AssetDimensionWarning:
      description: Dimensional inconsistency detected on an uploaded asset
      type: object
      properties:
        code:
          description: >-
            FILENAME_DIMENSION_MISMATCH = actual pixel dimensions differ from
            what the filename claims; UNLIKELY_PRIMARY_CREATIVE = asset is
            unusually small to be the primary creative
          type: string
          enum:
            - FILENAME_DIMENSION_MISMATCH
            - UNLIKELY_PRIMARY_CREATIVE
        message:
          description: Human-readable description
          type: string
      required:
        - code
        - message
      additionalProperties: false
    FrequencyCapWindow:
      description: >-
        Rolling time window over which max_impressions applies (AdCP Duration
        shape).
      type: object
      properties:
        interval:
          type: number
          minimum: 1
        unit:
          anyOf:
            - type: string
              enum:
                - seconds
            - type: string
              enum:
                - minutes
            - type: string
              enum:
                - hours
            - type: string
              enum:
                - days
            - type: string
              enum:
                - campaign
      required:
        - interval
        - unit
      additionalProperties: {}
    FrequencyCapTargetLevel:
      description: Level of the entity the frequency cap applies to
      type: string
      enum:
        - ADVERTISER
        - CAMPAIGN
        - CREATIVE
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or access token

````