{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/media-buy/refine-proposals-request.json",
  "title": "Refine Proposals Request",
  "description": "Create draft revisions or finalize draft proposals into held committed snapshots. Each result receives a new proposal_id and every source remains unchanged.",
  "x-tool-summary": "Revise draft proposals or finalize them into committed, inventory-held snapshots.",
  "type": "object",
  "x-mutates-state": true,
  "x-operation-family": "refine_proposals",
  "x-added-in": "3.2.0",
  "x-legacy-fallback": {
    "tool": "get_products",
    "mode": "orchestrated"
  },
  "properties": {
    "adcp_version": {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/core/version-envelope.json#/properties/adcp_version"
    },
    "adcp_major_version": {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/core/version-envelope.json#/properties/adcp_major_version"
    },
    "context_id": {
      "type": "string",
      "minLength": 1
    },
    "context": {
      "allOf": [
        {
          "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/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.2.0-beta.0/core/push-notification-config.json"
        }
      ],
      "x-adcp-schema-uri": "/schemas/core/push-notification-config.json"
    },
    "idempotency_key": {
      "type": "string",
      "description": "Client-generated key required for retry-safe proposal refinement.",
      "minLength": 16,
      "maxLength": 255,
      "pattern": "^[A-Za-z0-9_.:-]{16,255}$"
    },
    "refinements": {
      "type": "array",
      "description": "Proposal operations to apply, with at most 25 entries per request. revise creates a draft successor from a draft, committed, or accepted source. finalize MUST target a draft, reserves inventory, and creates a committed successor whose expires_at is the hold deadline. A batch containing finalize MUST contain only finalize entries and is atomic. proposal_id values MUST be unique; results preserve request order.",
      "items": {
        "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/media-buy/proposal-refinement.json"
      },
      "minItems": 1,
      "maxItems": 25,
      "uniqueItems": true,
      "allOf": [
        {
          "if": {
            "contains": {
              "properties": {
                "action": {
                  "type": "string",
                  "const": "finalize"
                }
              },
              "required": [
                "action"
              ]
            }
          },
          "then": {
            "items": {
              "properties": {
                "action": {
                  "type": "string",
                  "const": "finalize"
                }
              },
              "required": [
                "action"
              ]
            }
          }
        }
      ]
    }
  },
  "required": [
    "idempotency_key",
    "refinements"
  ],
  "additionalProperties": false
}
