{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "/schemas/3.0.0-rc.3/creative/asset-types/index.json",
  "title": "AdCP Asset Type Registry",
  "description": "Registry of asset types used in AdCP creative manifests. Each asset type defines the structure of actual content payloads (what you send), not requirements or constraints (which belong in format specifications).",
  "version": "1.0.0",
  "lastUpdated": "2026-04-01",
  "asset_types": {
    "image": {
      "description": "Static image asset (JPG, PNG, GIF, WebP, SVG)",
      "schema": "/schemas/core/assets/image-asset.json",
      "typical_use": "Hero images, logos, product photos, backgrounds"
    },
    "video": {
      "description": "Hosted video file asset (MP4, WebM, MOV)",
      "schema": "/schemas/core/assets/video-asset.json",
      "typical_use": "Video ads, product demos, brand stories"
    },
    "audio": {
      "description": "Audio file asset (MP3, AAC, M4A, WAV, OGG)",
      "schema": "/schemas/core/assets/audio-asset.json",
      "typical_use": "Audio ads for streaming, podcasts, radio"
    },
    "vast": {
      "description": "VAST XML tag for third-party video ad serving",
      "schema": "/schemas/core/assets/vast-asset.json",
      "typical_use": "Third-party served video ads with VAST 2.0-4.2"
    },
    "daast": {
      "description": "DAAST XML tag for third-party audio ad serving",
      "schema": "/schemas/core/assets/daast-asset.json",
      "typical_use": "Third-party served audio ads with DAAST 1.0-1.1"
    },
    "text": {
      "description": "Plain text content asset",
      "schema": "/schemas/core/assets/text-asset.json",
      "typical_use": "Headlines, descriptions, CTAs, body copy, disclaimers"
    },
    "markdown": {
      "description": "Markdown-formatted text content (CommonMark/GFM)",
      "schema": "/schemas/core/assets/markdown-asset.json",
      "typical_use": "Product specifications, format documentation, rich descriptions, structured content"
    },
    "url": {
      "description": "URL asset for clickthrough, tracking, landing pages",
      "schema": "/schemas/core/assets/url-asset.json",
      "typical_use": "Clickthrough URLs, tracking pixels, impression trackers"
    },
    "html": {
      "description": "HTML5 creative asset for interactive ads",
      "schema": "/schemas/core/assets/html-asset.json",
      "typical_use": "HTML5 display banners, rich media, interactive ads"
    },
    "css": {
      "description": "CSS stylesheet asset for styling",
      "schema": "/schemas/core/assets/css-asset.json",
      "typical_use": "Stylesheets for HTML5 creatives, custom styling"
    },
    "webhook": {
      "description": "Server-side webhook for dynamic creative rendering",
      "schema": "/schemas/core/assets/webhook-asset.json",
      "typical_use": "DCO (Dynamic Creative Optimization), real-time personalization, server-side rendering"
    },
    "javascript": {
      "description": "JavaScript code for dynamic creative logic",
      "schema": "/schemas/core/assets/javascript-asset.json",
      "typical_use": "Third-party tags, custom interaction logic, analytics"
    },
    "brief": {
      "description": "Campaign-level creative context (creative brief)",
      "schema": "/schemas/core/assets/brief-asset.json",
      "typical_use": "Campaign briefs with objective, messaging, compliance requirements"
    },
    "catalog": {
      "description": "Typed data feed (products, stores, jobs, etc.)",
      "schema": "/schemas/core/assets/catalog-asset.json",
      "typical_use": "Product catalogs, store locators, job feeds for dynamic creatives"
    }
  },
  "architecture": {
    "payload_vs_requirements": {
      "description": "Asset schemas define PAYLOAD structure (what you send), not constraints or requirements",
      "payload_examples": [
        "url, width, height, content, duration_ms, format"
      ],
      "requirement_examples": [
        "max_file_size, required: true/false, min_duration, max_duration"
      ],
      "where_requirements_go": "Format specifications contain all constraints in the 'requirements' field of each asset_required item"
    },
    "format_aware_validation": {
      "description": "Creative manifests are validated in the context of their format specification",
      "process": [
        "1. Read format_id from manifest",
        "2. Fetch format specification",
        "3. For each asset in manifest, look up asset_id in format's assets array",
        "4. Validate asset matches the type and requirements defined in the format"
      ]
    }
  },
  "usage_notes": {
    "format_specs": "Format specifications define what asset_ids are required (e.g., 'hero_image', 'logo'). Each defines its asset type and constraints (dimensions, file size, etc.).",
    "creative_manifests": "Creative manifests provide actual asset content, keyed by asset_id from the format. Asset type is determined by the format specification, not declared in the payload.",
    "example_flow": "Format says 'hero_image' must be type 'image' with width 1200, height 627. Manifest provides hero_image: {url: '...', width: 1200, height: 627}. The format spec tells us it's an image type."
  },
  "adcp_version": "3.0.0-rc.3",
  "baseUrl": "/schemas/3.0.0-rc.3",
  "versioning": {
    "note": "AdCP uses build-time versioning. This directory contains schemas for AdCP 3.0.0-rc.3. Full semantic versions are available at /schemas/{version}/ (e.g., /schemas/2.5.0/). Major version aliases point to the latest release: /schemas/v3/ → /schemas/3.0.0-rc.3/."
  }
}