{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "/schemas/3.1.0-rc.4/media-buy/list-creative-formats-request.json",
  "title": "List Creative Formats Request",
  "description": "Request parameters for discovering supported creative formats",
  "type": "object",
  "allOf": [
    {
      "$ref": "/schemas/3.1.0-rc.4/core/version-envelope.json"
    }
  ],
  "properties": {
    "format_ids": {
      "type": "array",
      "description": "Return only these specific format IDs (e.g., from get_products response)",
      "items": {
        "$ref": "/schemas/3.1.0-rc.4/core/format-id.json"
      },
      "minItems": 1
    },
    "asset_types": {
      "type": "array",
      "description": "Filter to formats that include these asset types. For third-party tags, search for 'html' or 'javascript'. E.g., ['image', 'text'] returns formats with images and text, ['javascript'] returns formats accepting JavaScript tags.",
      "items": {
        "$ref": "/schemas/3.1.0-rc.4/enums/asset-content-type.json"
      },
      "minItems": 1
    },
    "max_width": {
      "type": "integer",
      "description": "Maximum width in pixels (inclusive). Returns formats where ANY render has width <= this value. For multi-render formats, matches if at least one render fits."
    },
    "max_height": {
      "type": "integer",
      "description": "Maximum height in pixels (inclusive). Returns formats where ANY render has height <= this value. For multi-render formats, matches if at least one render fits."
    },
    "min_width": {
      "type": "integer",
      "description": "Minimum width in pixels (inclusive). Returns formats where ANY render has width >= this value."
    },
    "min_height": {
      "type": "integer",
      "description": "Minimum height in pixels (inclusive). Returns formats where ANY render has height >= this value."
    },
    "is_responsive": {
      "type": "boolean",
      "description": "Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions."
    },
    "name_search": {
      "type": "string",
      "description": "Search for formats by name (case-insensitive partial match)"
    },
    "publisher_domain": {
      "type": "string",
      "description": "Filter to formats supported by the named publisher. Agents resolve via the three-tier order documented in `docs/creative/canonical-formats.mdx#format-discovery` (publisher's hosted adagents.json → AAO community mirror → agent-derived from own products' format_options). All fetches in the chain MUST follow the same transport contract as `format_schema` (https-only, SSRF guards, ≤5s timeout, 1 MiB cap, no redirects — see `static/schemas/source/core/product-format-declaration.json#format_schema`). Response carries `source: \"publisher\" | \"aao_mirror\" | \"agent_derived\"` so buyers know which tier produced the list. The pattern below is a syntactic floor — NOT an SSRF guard; agents MUST resolve the hostname and reject private/loopback/link-local/metadata IPs before fetching.",
      "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
    },
    "property_id": {
      "$ref": "/schemas/3.1.0-rc.4/core/property-id.json",
      "description": "Filter to formats supported on the named property within the publisher's catalog. Resolves to a property in the publisher's `adagents.json` `properties[]`; the agent returns only `formats[]` entries whose `applies_to_property_ids` includes this property (or entries with no scope, which apply to all properties). Typically used in combination with `publisher_domain`."
    },
    "wcag_level": {
      "$ref": "/schemas/3.1.0-rc.4/enums/wcag-level.json",
      "description": "Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)"
    },
    "disclosure_positions": {
      "type": "array",
      "description": "Filter to formats that support all of these disclosure positions. When a format has disclosure_capabilities, match against those positions. Otherwise fall back to supported_disclosure_positions. Use to find formats compatible with a brief's compliance requirements.",
      "items": {
        "$ref": "/schemas/3.1.0-rc.4/enums/disclosure-position.json"
      },
      "minItems": 1,
      "uniqueItems": true
    },
    "disclosure_persistence": {
      "type": "array",
      "description": "Filter to formats where each requested persistence mode is supported by at least one position in disclosure_capabilities. Different positions may satisfy different modes. Use to find formats compatible with jurisdiction-specific persistence requirements (e.g., continuous for EU AI Act).",
      "items": {
        "$ref": "/schemas/3.1.0-rc.4/enums/disclosure-persistence.json"
      },
      "minItems": 1,
      "uniqueItems": true
    },
    "output_format_ids": {
      "type": "array",
      "description": "Filter to formats whose output_format_ids includes any of these format IDs. Returns formats that can produce these outputs — inspect each result's input_format_ids to see what inputs they accept.",
      "items": {
        "$ref": "/schemas/3.1.0-rc.4/core/format-id.json"
      },
      "minItems": 1
    },
    "input_format_ids": {
      "type": "array",
      "description": "Filter to formats whose input_format_ids includes any of these format IDs. Returns formats that accept these creatives as input — inspect each result's output_format_ids to see what they can produce.",
      "items": {
        "$ref": "/schemas/3.1.0-rc.4/core/format-id.json"
      },
      "minItems": 1
    },
    "pagination": {
      "$ref": "/schemas/3.1.0-rc.4/core/pagination-request.json"
    },
    "context": {
      "$ref": "/schemas/3.1.0-rc.4/core/context.json"
    },
    "ext": {
      "$ref": "/schemas/3.1.0-rc.4/core/ext.json"
    }
  },
  "additionalProperties": true
}
