> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
> Use this file to discover all available pages before exploring further.

# update_rights

> update_rights is the AdCP task for modifying active rights grants. Extend end dates, adjust impression caps, switch pricing options, or pause and resume — with re-issued generation credentials.

<Note>
  **Experimental.** Brand rights lifecycle ([`get_rights`](/dist/docs/3.2.0-beta.0/brand-protocol/tasks/get_rights), [`acquire_rights`](/dist/docs/3.2.0-beta.0/brand-protocol/tasks/acquire_rights), `update_rights`) is part of AdCP 3.0 as an experimental surface — it may change between 3.x releases with at least 6 weeks' notice. Sellers implementing any of these tasks MUST declare `brand.rights_lifecycle` in `experimental_features`. See [experimental status](/dist/docs/3.2.0-beta.0/reference/experimental-status) for the full contract.
</Note>

Modify an existing rights grant — extend dates, adjust impression caps, change pricing, or pause/resume. Parallels [`update_media_buy`](/dist/docs/3.2.0-beta.0/media-buy/task-reference/update_media_buy). Only the fields you provide are updated; omitted fields remain unchanged.

## Schema

* **Request**: [`update-rights-request.json`](https://adcontextprotocol.org/schemas/3.2.0-beta.0/brand/update-rights-request.json)
* **Response**: [`update-rights-response.json`](https://adcontextprotocol.org/schemas/3.2.0-beta.0/brand/update-rights-response.json)

## Response time

Seconds for most updates. Pricing changes may require rights holder approval and take longer.

## Quick start

<CodeGroup>
  ```json Request (extend end date) theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "end_date": "2026-09-30"
  }
  ```

  ```json Request (increase impression cap) theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "impression_cap": 200000
  }
  ```

  ```json Request (pause grant) theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "paused": true
  }
  ```

  ```json Response (error) theme={null}
  {
    "errors": [
      {
        "code": "invalid_update",
        "message": "New impression_cap (50000) must be >= impressions already delivered (78432)"
      }
    ]
  }
  ```

  ```json Response (success) theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "terms": {
      "pricing_option_id": "monthly_exclusive",
      "amount": 350,
      "currency": "EUR",
      "period": "monthly",
      "uses": ["likeness", "voice"],
      "impression_cap": 200000,
      "overage_cpm": 4.00,
      "start_date": "2026-04-01",
      "end_date": "2026-09-30",
      "exclusivity": {
        "scope": "Exclusive licensee for Daan Janssen in NL for food/restaurant brands",
        "countries": ["NL"]
      }
    },
    "generation_credentials": [
      {
        "provider": "midjourney",
        "rights_key": "rk_mj_abc123_renewed...",
        "uses": ["likeness"],
        "expires_at": "2026-09-30T23:59:59Z"
      },
      {
        "provider": "elevenlabs",
        "rights_key": "rk_el_def456_renewed...",
        "uses": ["voice"],
        "expires_at": "2026-09-30T23:59:59Z"
      }
    ],
    "rights_constraint": {
      "rights_id": "janssen_likeness_voice",
      "rights_agent": { "url": "https://agent.lotientertainment.com/mcp", "id": "loti_entertainment" },
      "rights_holder": { "domain": "lotientertainment.com", "brand_id": "daan_janssen" },
      "valid_from": "2026-04-01T00:00:00Z",
      "valid_until": "2026-09-30T23:59:59Z",
      "uses": ["likeness", "voice"],
      "countries": ["NL"],
      "impression_cap": 200000,
      "approval_status": "approved",
      "grant_status": "active",
      "restrictions": [
        "All generated creatives must be submitted for approval before distribution",
        "No modification of talent likeness beyond approved AI generation parameters"
      ],
      "disclosure": {
        "required": true,
        "text": "Features AI-generated likeness of Daan Janssen, used under license from Loti Entertainment"
      },
      "creative_approval_required": true,
      "content_digest": "sha256:590b38bde70da8e40644a5b96e3a3b2a60f7cbc3d450742cef259a0f1261cada",
      "attestation_refs": [{
        "issuer": { "type": "brand", "brand": { "domain": "lotientertainment.com", "brand_id": "daan_janssen" } },
        "claim_type": "https://adcontextprotocol.org/claims/rights/grant",
        "subject": {
          "type": "resource",
          "resource_type": "https://adcontextprotocol.org/claims/subjects/rights-grant",
          "namespace": "https://agent.lotientertainment.com/mcp",
          "id": "janssen_likeness_voice",
          "content_digest": "sha256:590b38bde70da8e40644a5b96e3a3b2a60f7cbc3d450742cef259a0f1261cada"
        },
        "locator": { "type": "issuer_credential_id", "credential_id": "cred_janssen_2026q3", "resolver_id": "primary" }
      }]
    },
    "implementation_date": "2026-06-28T14:30:00Z"
  }
  ```
</CodeGroup>

## Parameters

### Request

| Field               | Type        | Required    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------------- | ----------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rights_id`         | string      | Yes         | Rights grant identifier from [`acquire_rights`](/dist/docs/3.2.0-beta.0/brand-protocol/tasks/acquire_rights)                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `account`           | account-ref | Conditional | Account context. Pass when the brand agent has a governance agent bound to this brand+operator via [`sync_governance`](/dist/docs/3.2.0-beta.0/accounts/tasks/sync_governance) — `update_rights` is a [modification-phase governance trigger](/dist/docs/3.2.0-beta.0/governance/campaign/specification#spend-commit-invocation), and the brand agent uses `account` to resolve the bound agent when computing the incremental commit delta. When both an inline `governance_context` token and a bound agent are present, the inline token wins. |
| `end_date`          | date        | No          | New end date (must be >= current end date)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `impression_cap`    | integer     | No          | New impression cap (must be >= impressions already delivered)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `pricing_option_id` | string      | No          | Switch to a different pricing option from the original [`get_rights`](/dist/docs/3.2.0-beta.0/brand-protocol/tasks/get_rights) offering                                                                                                                                                                                                                                                                                                                                                                                                           |
| `paused`            | boolean     | No          | Pause (`true`) or resume (`false`) the grant                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `idempotency_key`   | string      | No          | Client-generated key for safe retries                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |

### Response

| Field                    | Type           | Description                                                                                           |
| ------------------------ | -------------- | ----------------------------------------------------------------------------------------------------- |
| `rights_id`              | string         | The updated rights grant identifier                                                                   |
| `terms`                  | object         | Updated contractual terms (same shape as `acquire_rights` acquired response)                          |
| `generation_credentials` | array          | Re-issued credentials with updated expiration and caps                                                |
| `rights_constraint`      | object         | Updated digest-pinned constraint and replacement attestation references for re-embedding in creatives |
| `paused`                 | boolean        | Whether the grant is currently paused (included when pause state changes)                             |
| `implementation_date`    | datetime\|null | When changes take effect (`null` if pending approval)                                                 |

## Re-issued credentials

When you extend dates or change pricing, the rights agent re-issues generation credentials with updated expiration. Both old and new credentials may work during an overlap period — old credentials remain valid until their original expiry. Replace credentials in your creative pipeline promptly, but there is no hard cutover moment that would break in-flight generation requests.

The updated `rights_constraint` replaces the old constraint in every active creative. The rights agent revokes or supersedes the old credential and issues a new digest/reference pair; changing terms without replacing the credential cannot produce a verified result. Sellers re-evaluate the replacement before continued delivery according to their `media_buy.rights_attestations` policy.

## Next steps

<CardGroup cols={2}>
  <Card title="acquire_rights" icon="handshake" href="/dist/docs/3.2.0-beta.0/brand-protocol/tasks/acquire_rights">
    The initial rights acquisition flow.
  </Card>

  <Card title="report_usage" icon="chart-line" href="/dist/docs/3.2.0-beta.0/accounts/tasks/report_usage">
    Report impressions against rights grants.
  </Card>
</CardGroup>
