{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/brand/update-rights-request.json",
  "title": "Update Rights Request",
  "description": "Modify an existing rights grant — extend dates, adjust impression caps, change pricing, or pause/resume. Parallels update_media_buy. Only the fields provided are updated; omitted fields remain unchanged.",
  "type": "object",
  "allOf": [
    {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/core/version-envelope.json"
    }
  ],
  "x-status": "experimental",
  "x-mutates-state": true,
  "x-governed-commitment": {
    "scope": "conditional",
    "triggers": [
      "increases_obligation",
      "extends_term",
      "resumes_execution",
      "changes_pricing"
    ],
    "exemptions": [
      "pause",
      "decrease_only"
    ],
    "precedence": "trigger_overrides_exemption"
  },
  "properties": {
    "governance_context": {
      "type": "string",
      "description": "Opaque intent authorization for a commitment-increasing rights update.",
      "minLength": 1,
      "maxLength": 4096,
      "pattern": "^[\\x20-\\x7E]+$"
    },
    "rights_id": {
      "type": "string",
      "description": "Rights grant identifier from acquire_rights response",
      "x-entity": "rights_grant"
    },
    "account": {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/core/account-ref.json",
      "description": "Account context for this update. Used by the brand agent to resolve any governance agent previously bound for this brand+operator pair via sync_governance — update_rights is a modification-phase governance trigger (per `/docs/governance/campaign/specification#spend-commit-invocation`) and the brand agent consults the bound agent when computing the incremental commit delta. When both an inline governance_context token (on the protocol envelope) and a bound governance agent are present, the inline token wins. Pass a natural key (brand, operator, optional sandbox) or a seller-assigned account_id from list_accounts. The estimated_impressions / commit-delta projection rule for governance-aware updates is tracked separately and not yet normative on this task."
    },
    "end_date": {
      "type": "string",
      "format": "date",
      "description": "New end date for the rights grant (must be >= current end_date). Extending the grant may re-issue generation credentials with updated expiration."
    },
    "impression_cap": {
      "type": "integer",
      "minimum": 1,
      "description": "New impression cap for the grant. Must be >= impressions already delivered."
    },
    "pricing_option_id": {
      "type": "string",
      "description": "Switch to a different pricing option from the original get_rights offering. The new option must be compatible with the existing grant's uses and countries.",
      "x-entity": "vendor_pricing_option"
    },
    "paused": {
      "type": "boolean",
      "description": "Pause or resume the rights grant. When paused, generation credentials are suspended and creative delivery should stop. When resumed, credentials are re-activated."
    },
    "push_notification_config": {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/core/push-notification-config.json",
      "description": "Webhook for async update notifications if the update requires approval"
    },
    "idempotency_key": {
      "type": "string",
      "description": "Client-generated idempotency key for safe retries. 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": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/core/context.json"
    },
    "ext": {
      "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/core/ext.json"
    }
  },
  "required": [
    "idempotency_key",
    "rights_id"
  ],
  "additionalProperties": true
}
