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

# Create advertiser creative master

> Create a creative manifest scoped to an advertiser without requiring a campaign. The resulting master can be assigned to one or more campaigns.



## OpenAPI

````yaml /v2/buyer-api-v2.yaml post /advertisers/{advertiserId}/creatives/create
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: 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:
  /advertisers/{advertiserId}/creatives/create:
    post:
      tags:
        - Creatives
      summary: Create advertiser creative master
      description: >-
        Create a creative manifest scoped to an advertiser without requiring a
        campaign. The resulting master can be assigned to one or more campaigns.
      operationId: createAdvertiserCreative
      parameters:
        - in: path
          name: advertiserId
          schema:
            description: Advertiser ID
            type: string
            minLength: 1
          required: true
          description: Advertiser ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCreativeManifestMetadata'
      responses:
        '200':
          description: Create advertiser creative master
          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:
    CreateCreativeManifestMetadata:
      description: JSON metadata for creating a creative manifest
      type: object
      properties:
        name:
          description: Manifest name (auto-generated if omitted)
          type: string
          minLength: 1
          maxLength: 255
        message:
          description: Creative brief / direction text
          type: string
          minLength: 1
          maxLength: 5000
        url_asset:
          description: >-
            Add a single URL asset (per AdCP url-asset spec). For multi-slot
            formats (e.g. native), use `url_assets` instead.
          type: object
          properties:
            url:
              description: URL to add as asset (must be http/https)
              type: string
              format: uri
            url_type:
              description: URL type classification
              type: string
              enum:
                - clickthrough
                - tracker_pixel
                - tracker_script
                - vast
          required:
            - url
            - url_type
        url_assets:
          description: >-
            URL assets bound to specific AdCP format slots (e.g. native
            landing_page, click trackers). Each entry pairs a slot `asset_id`
            with a URL.
          maxItems: 50
          type: array
          items:
            $ref: '#/components/schemas/UrlAssetSlotInput'
        text_assets:
          description: >-
            Text assets bound to specific AdCP format slots (e.g. native
            headline, long_headline, description, business_name, disclosure).
            Each entry pairs a slot `asset_id` with content.
          maxItems: 50
          type: array
          items:
            $ref: '#/components/schemas/TextAssetSlotInput'
        webhook_asset:
          description: Add a webhook asset for DCO (dynamic content).
          type: object
          properties:
            url:
              description: URL to add as asset (must be http/https)
              type: string
              format: uri
            method:
              type: string
              enum:
                - GET
                - POST
            timeout_ms:
              type: integer
              minimum: 10
              maximum: 5000
            response_type:
              type: string
              enum:
                - html
                - json
                - xml
                - javascript
            security:
              type: object
              properties:
                method:
                  type: string
                  enum:
                    - hmac_sha256
                    - api_key
                    - none
                hmac_header:
                  type: string
                api_key_header:
                  type: string
              required:
                - method
          required:
            - url
            - response_type
            - security
        format_id:
          description: >-
            Legacy-v1 ADCP named-format ref for this creative (auto-resolved
            from template if omitted). Use format_kind for AdCP 3.1 canonical
            formats.
          type: object
          properties:
            agent_url:
              type: string
            id:
              type: string
              pattern: ^[a-zA-Z0-9_-]+$
            width:
              type: number
              minimum: 1
            height:
              type: number
              minimum: 1
            duration_ms:
              type: number
              minimum: 1
          required:
            - agent_url
            - id
          additionalProperties: {}
        format_kind:
          description: >-
            AdCP 3.1 canonical format kind (e.g. image_carousel, video_hosted).
            Alternative to format_id for canonical formats.
          anyOf:
            - type: string
              enum:
                - image
            - type: string
              enum:
                - html5
            - type: string
              enum:
                - display_tag
            - type: string
              enum:
                - image_carousel
            - type: string
              enum:
                - video_hosted
            - type: string
              enum:
                - video_vast
            - type: string
              enum:
                - audio_hosted
            - type: string
              enum:
                - audio_daast
            - type: string
              enum:
                - sponsored_placement
            - type: string
              enum:
                - native_in_feed
            - type: string
              enum:
                - responsive_creative
            - type: string
              enum:
                - agent_placement
            - type: string
              enum:
                - custom
        format_option_ref:
          description: >-
            Pins this manifest to a specific format_options[] entry on a
            product, identified by format_option_id. Use scope:"publisher" with
            publisher_domain for catalog-backed options, scope:"product" for
            product-inline options.
          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
        industry_identifiers:
          description: >-
            Industry identifiers (Ad-ID, ISCI, Clearcast clock number, IDcrea)
            per AdCP spec.
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - ad_id
                  - isci
                  - clearcast_clock
                  - idcrea
              value:
                type: string
            required:
              - type
              - value
        template_id:
          description: >-
            Creative template ID — legacy-v1 ADCP named-format id (e.g.,
            "display_image", "display_html", "video_standard") or vendor tag
            (e.g., "vendor_dcm_tag")
          type: string
        assets:
          description: >-
            Multipart REST metadata only: each filename must match a file
            uploaded in the same multipart request. Murph chat attachments are
            not multipart files; represent them as linked_assets[].data_url
            using the murph-attachment://N placeholder instead. If omitted,
            multipart files are auto-classified.
          type: array
          items:
            type: object
            properties:
              filename:
                description: Must match an uploaded file's originalname
                type: string
                minLength: 1
              asset_type:
                description: Asset type (auto-detected from MIME if omitted)
                type: string
                enum:
                  - IMAGE
                  - VIDEO
                  - AUDIO
                  - HTML
                  - JAVASCRIPT
                  - CSS
                  - TEXT
                  - URL
                  - VAST
                  - FONT
                  - LOGO
                  - DOCUMENT
              label:
                description: >-
                  Label/key for this asset in the manifest (auto-generated if
                  omitted)
                type: string
              slot_asset_id:
                description: >-
                  AdCP format slot asset_id to bind this file to (used by
                  multi-slot formats like native).
                type: string
                minLength: 1
                maxLength: 255
              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
            required:
              - filename
        linked_assets:
          description: >-
            URL-backed or inline media assets from a chat attachment, DAM,
            catalog, product page, or creative generator. For every Murph chat
            attachment, use linked_assets[].data_url = murph-attachment://N;
            never put its filename in assets[] because buyer_api_call does not
            send multipart file bytes.
          maxItems: 50
          type: array
          items:
            $ref: '#/components/schemas/LinkedCreativeAssetInput'
        brandAgentId:
          description: >-
            Advertiser ID (parameter name kept for wire compatibility). Required
            when creating an advertiser-level master without a campaign. Ignored
            when the manifest is created under a campaign (resolved from
            campaign context).
          type: string
        frequencyCaps:
          description: >-
            Buyer-defined frequency caps for this creative. When provided, sets
            the full list.
          type: array
          items:
            $ref: '#/components/schemas/FrequencyCapConfigInput'
        cards:
          description: >-
            Carousel cards (image_carousel format). Min 2, max 10. Each card
            needs filename (for an uploaded file) or url (for a pre-hosted
            asset), plus optional headline, description, cta, landing_page_url.
          minItems: 2
          maxItems: 10
          type: array
          items:
            $ref: '#/components/schemas/CardInput'
    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
    UrlAssetSlotInput:
      description: >-
        URL asset bound to an AdCP format slot. The slot asset_id is the key in
        the creative manifest assets map.
      type: object
      properties:
        asset_id:
          description: AdCP format slot asset_id (e.g. "landing_page", "click_url")
          type: string
          minLength: 1
          maxLength: 255
        url:
          description: URL to add as asset (must be http/https)
          type: string
          format: uri
        url_type:
          description: >-
            URL type classification. Optional — the server derives the canonical
            url_type from `asset_id` (e.g. "landing_page" → clickthrough,
            "impression_tracker" → tracker_pixel). Any client-provided value is
            treated as a hint, not authoritative.
          type: string
          enum:
            - clickthrough
            - tracker_pixel
            - tracker_script
            - vast
      required:
        - asset_id
        - url
    TextAssetSlotInput:
      description: >-
        Text asset bound to an AdCP format slot. The slot asset_id is the key in
        the creative manifest assets map.
      type: object
      properties:
        asset_id:
          description: AdCP format slot asset_id (e.g. "headline", "description")
          type: string
          minLength: 1
          maxLength: 255
        content:
          description: Text content for this slot
          type: string
          minLength: 1
          maxLength: 5000
      required:
        - asset_id
        - content
    LinkedCreativeAssetInput:
      description: >-
        A linked or inline generated creative asset that can be saved into the
        manifest asset store without multipart file upload.
      type: object
      properties:
        url:
          description: >-
            Publicly reachable URL for a hosted creative asset from a DAM,
            catalog, product page, or creative generator.
          type: string
          format: uri
        data_url:
          description: >-
            Inline generated creative asset as a base64 data URL. Use when a
            local/dev creative adapter returns inline assets because no asset
            store is configured.
          type: string
          pattern: >-
            ^data:(image|video|audio|text\/html|application\/xml|text\/plain)[^;]*;base64,[A-Za-z0-9+/=]+$
        asset_type:
          description: >-
            Creative asset type represented by the linked URL (IMAGE, VIDEO,
            AUDIO, HTML, VAST, etc.).
          type: string
          enum:
            - IMAGE
            - VIDEO
            - AUDIO
            - HTML
            - JAVASCRIPT
            - CSS
            - TEXT
            - URL
            - VAST
            - FONT
            - LOGO
            - DOCUMENT
        label:
          description: Human-readable label for this linked asset.
          type: string
          minLength: 1
          maxLength: 255
        slot_asset_id:
          description: >-
            Optional AdCP format slot asset_id to bind this linked asset to (for
            example, "image", "video", or "audio").
          type: string
          minLength: 1
          maxLength: 255
        content_type:
          description: >-
            Optional MIME type. If omitted, the server infers a sensible default
            from asset_type and URL extension.
          type: string
          minLength: 1
          maxLength: 255
        duration_ms:
          description: >-
            Duration in milliseconds for time-based assets (VIDEO, AUDIO, VAST).
            Persisted so the media-buy compatibility gate can verify the
            creative fits a slot's required duration before syncing it to a
            source.
          type: integer
          minimum: 0
          maximum: 9007199254740991
        declared_sizes:
          description: >-
            Buyer-declared display sizes (width×height in pixels) for an HTML ad
            tag whose markup doesn't declare one — supplied out-of-band via a
            CSV/manifest. Persisted so the tag can still auto-map to placements
            when assigned to a campaign in a later turn. Ignored for non-HTML
            assets (images/video carry probed dimensions).
          maxItems: 30
          type: array
          items:
            type: object
            properties:
              width:
                type: integer
                maximum: 9007199254740991
                minimum: 1
              height:
                type: integer
                maximum: 9007199254740991
                minimum: 1
            required:
              - width
              - height
        make_primary:
          description: >-
            When true, make this URL-backed asset the primary renderable
            creative source. Only one linked asset may be primary.
          type: boolean
        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
      required:
        - asset_type
    FrequencyCapConfigInput:
      description: >-
        Frequency cap entry supplied inside a parent
        advertiser/campaign/creative request body. On PUT, the full array
        replaces all existing caps for that target.
      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'
      required:
        - max_impressions
        - window
      additionalProperties: {}
    CardInput:
      description: >-
        Per-card input for carousel creatives. Provide filename for multipart
        file uploads or url for pre-hosted assets.
      type: object
      properties:
        filename:
          description: >-
            Filename of an uploaded file for this card's media. Must match the
            file's originalname in the multipart upload.
          type: string
          minLength: 1
        url:
          description: >-
            URL of a hosted image or video for this card's media. Use instead of
            filename for pre-hosted assets.
          type: string
          format: uri
        headline:
          description: Card headline text
          type: string
          maxLength: 255
        description:
          description: Card body copy
          type: string
          maxLength: 2000
        cta:
          description: Call-to-action label (e.g. "Shop Now")
          type: string
          maxLength: 50
        landing_page_url:
          description: Destination URL when the card is clicked
          type: string
          format: uri
        platform_extensions:
          description: Platform-specific card attributes
          type: array
          items:
            type: object
            additionalProperties: {}
    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
    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: {}
    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
    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

````