{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/media-buy/list-proposals-request.json",
  "title": "List Proposals Request",
  "x-status": "experimental",
  "description": "Read the seller's current proposals for an account, optionally narrowed to opportunities or proposal IDs. Experimental (media_buy.open_opportunities): sellers implementing it MUST list the feature id in experimental_features. Each invocation completes synchronously and never mutates proposal or opportunity state. It is the authoritative current-state and repair read for proposal.created notifications, for proposal.offered notifications (the buy-scoped sibling for seller offers against accepted media buys, defined with media_buy.seller_offers), and for proposal records in list_account_changes; buyers use the notification or the change feed to learn that something changed, not routine polling. Results are visible to every principal the seller authorizes for the account, the same as other account-scoped reads, and never cross accounts.",
  "x-tool-summary": "List the seller's current proposals and their lifecycle state for an account or opportunity.",
  "type": "object",
  "x-operation-family": "list_proposals",
  "x-added-in": "3.3.0",
  "x-legacy-fallback": {
    "mode": "none"
  },
  "properties": {
    "adcp_version": {
      "$ref": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/core/version-envelope.json#/properties/adcp_version"
    },
    "adcp_major_version": {
      "$ref": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/core/version-envelope.json#/properties/adcp_major_version"
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 16,
      "maxLength": 255,
      "pattern": "^[A-Za-z0-9_.:-]{16,255}$",
      "description": "Optional replay key accepted uniformly on read calls."
    },
    "context_id": {
      "type": "string",
      "minLength": 1,
      "description": "MCP compatibility field: servers ignore this value; A2A uses transport-native Message/Task contextId."
    },
    "context": {
      "allOf": [
        {
          "$ref": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/core/context.json"
        }
      ],
      "x-adcp-schema-uri": "/schemas/core/context.json"
    },
    "governance_context": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4096
    },
    "push_notification_config": {
      "allOf": [
        {
          "$ref": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/core/push-notification-config.json"
        }
      ],
      "x-adcp-schema-uri": "/schemas/core/push-notification-config.json",
      "description": "Uniform per-call envelope field accepted for SDK compatibility. This does not register a subscription; proposal.created subscribers are registered through sync_accounts notification_configs."
    },
    "account": {
      "allOf": [
        {
          "$ref": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/core/canonical-account-ref.json"
        }
      ],
      "description": "Account whose proposals to read."
    },
    "opportunity_ids": {
      "type": "array",
      "description": "Return only proposals associated with these opportunities. Proposals created without an opportunity are returned only when no opportunity_ids filter is supplied.",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[A-Za-z0-9_.:-]{1,255}$",
        "x-entity": "opportunity"
      },
      "minItems": 1,
      "maxItems": 50,
      "uniqueItems": true
    },
    "media_buy_ids": {
      "type": "array",
      "description": "Return only proposals whose snapshot media_buy_id is one of these buys: seller offers and other amendments against those buys, plus the accepted snapshots that created them. Proposals with no media_buy_id are returned only when no media_buy_ids filter is supplied. Unknown or inaccessible IDs are omitted, not errors. Combines with the other filters as an AND.",
      "items": {
        "type": "string",
        "minLength": 1,
        "x-entity": "media_buy"
      },
      "minItems": 1,
      "maxItems": 50,
      "uniqueItems": true
    },
    "proposal_ids": {
      "type": "array",
      "description": "Return only these proposals. Unknown or inaccessible IDs are omitted, not errors.",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255,
        "x-entity": "proposal"
      },
      "minItems": 1,
      "maxItems": 100,
      "uniqueItems": true
    },
    "dispositions": {
      "type": "array",
      "description": "Return only proposals in these dispositions. Defaults to every disposition. Terminal snapshots are retained for at least 30 days after their disposition changed.",
      "items": {
        "$ref": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/enums/proposal-disposition.json"
      },
      "minItems": 1,
      "uniqueItems": true
    },
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "max_results": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    },
    "ext": {
      "$ref": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/core/ext.json"
    }
  },
  "required": [
    "account"
  ],
  "allOf": [
    {
      "$ref": "https://adcontextprotocol.org/schemas/3.3.0-beta.1/core/version-envelope.json"
    }
  ],
  "additionalProperties": false,
  "examples": [
    {
      "description": "Read the open proposals for one opportunity after a proposal.created notification",
      "data": {
        "account": {
          "account_id": "acc_nova_za"
        },
        "opportunity_ids": [
          "opp_nova_za_q4"
        ],
        "dispositions": [
          "available"
        ]
      }
    },
    {
      "description": "Catch-up scan for the live offers against one accepted media buy, for example after missed proposal.offered notifications",
      "data": {
        "account": {
          "account_id": "acc_nova_za"
        },
        "media_buy_ids": [
          "mb_nova_za_0412"
        ],
        "dispositions": [
          "available"
        ]
      }
    }
  ]
}
