{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "/schemas/3.0.1/brand/acquire-rights-request.json",
  "title": "Acquire Rights Request",
  "description": "Binding contractual request to acquire rights from a brand agent. Parallels create_media_buy — the buyer selects a pricing_option_id from a get_rights response and provides campaign details. The agent clears against existing contracts and returns terms, generation credentials, and disclosure requirements.",
  "x-status": "experimental",
  "x-mutates-state": true,
  "type": "object",
  "properties": {
    "adcp_major_version": {
      "type": "integer",
      "description": "The AdCP major version the buyer's payloads conform to. Sellers validate against their supported major_versions and return VERSION_UNSUPPORTED if unsupported. When omitted, the seller assumes its highest supported version.",
      "minimum": 1,
      "maximum": 99
    },
    "rights_id": {
      "type": "string",
      "description": "Rights offering identifier from get_rights response",
      "x-entity": "rights_grant"
    },
    "pricing_option_id": {
      "type": "string",
      "description": "Selected pricing option from the rights offering",
      "x-entity": "vendor_pricing_option"
    },
    "buyer": {
      "$ref": "/schemas/3.0.1/core/brand-ref.json",
      "description": "The buyer's brand identity"
    },
    "campaign": {
      "type": "object",
      "description": "Campaign details for rights clearance",
      "properties": {
        "description": {
          "type": "string",
          "description": "Description of how the rights will be used"
        },
        "uses": {
          "type": "array",
          "description": "Specific rights uses for this campaign",
          "items": {
            "$ref": "/schemas/3.0.1/enums/right-use.json"
          },
          "minItems": 1
        },
        "countries": {
          "type": "array",
          "description": "Countries where the campaign will run (ISO 3166-1 alpha-2)",
          "items": {
            "type": "string",
            "pattern": "^[A-Z]{2}$"
          }
        },
        "format_ids": {
          "type": "array",
          "description": "Creative formats that will be produced",
          "items": {
            "$ref": "/schemas/3.0.1/core/format-id.json"
          }
        },
        "estimated_impressions": {
          "type": "integer",
          "minimum": 0,
          "description": "Estimated total impressions for the campaign. Required when the request carries an intent-phase governance_context token AND the selected pricing_option has model: 'cpm' — the brand agent projects commitment as (pricing_option.price / 1000) × estimated_impressions evaluated in pricing_option.currency. Brand agents MUST reject with INVALID_REQUEST (field: campaign.estimated_impressions) when CPM-priced rights are requested under a governance_context and this field is omitted or zero; implementer-chosen defaults are non-conformant. See the acquire_rights task reference for the full validation contract including currency-mismatch handling."
        },
        "start_date": {
          "type": "string",
          "format": "date",
          "description": "Campaign start date (ISO 8601)"
        },
        "end_date": {
          "type": "string",
          "format": "date",
          "description": "Campaign end date (ISO 8601). Brand agents MUST reject with INVALID_REQUEST (field: campaign.end_date) when end_date is in the past at the time of the request — acquiring rights for an elapsed window produces a zero-duration grant and is almost always a buyer-side bug."
        }
      },
      "required": [
        "description",
        "uses"
      ],
      "additionalProperties": true
    },
    "revocation_webhook": {
      "$ref": "/schemas/3.0.1/core/push-notification-config.json",
      "description": "Webhook for rights revocation notifications. If the rights holder needs to revoke rights (talent scandal, contract violation, etc.), they POST a revocation-notification to this URL. The buyer is responsible for stopping creative delivery upon receipt."
    },
    "push_notification_config": {
      "$ref": "/schemas/3.0.1/core/push-notification-config.json",
      "description": "Webhook for async status updates if the acquisition requires approval. The rights agent sends a webhook notification when the status transitions to acquired or rejected."
    },
    "idempotency_key": {
      "type": "string",
      "description": "Client-generated key for safe retries. Resubmitting with the same key returns the original response rather than creating a duplicate acquisition. MUST be unique per (seller, request) pair to prevent cross-seller correlation. Use a fresh UUID v4 for each request.",
      "minLength": 16,
      "maxLength": 255,
      "pattern": "^[A-Za-z0-9_.:-]{16,255}$"
    },
    "context": {
      "$ref": "/schemas/3.0.1/core/context.json"
    },
    "ext": {
      "$ref": "/schemas/3.0.1/core/ext.json"
    }
  },
  "required": [
    "idempotency_key",
    "rights_id",
    "pricing_option_id",
    "buyer",
    "campaign",
    "revocation_webhook"
  ],
  "additionalProperties": true
}
