# Authorize an MPT holder

Manage holder authorization for MPTs that require issuer approval.

## How authorization works

When an MPT is created with `lsfMPTRequireAuth`, holders cannot receive tokens until the issuer explicitly authorizes them. This enables controlled distribution and compliance workflows.

Authorization is a two-step process:

1. **Holder opt-in** — The holder submits `MPTokenAuthorize` to express interest in the MPT.
2. **Issuer approval** — The issuer submits `MPTokenAuthorize` with the holder's address to grant permission.


If `lsfMPTRequireAuth` is not set, holders can receive tokens after their own opt-in without issuer approval.

## Prerequisites

- You are the issuer of the MPT
- The MPT has `lsfMPTRequireAuth` enabled
- The holder has already submitted their opt-in `MPTokenAuthorize`


## Authorize a holder in the UI

To authorize a holder:

1. Go to **Accounts** and open the issuer account.
2. Click **Create order** and select **Ledger-specific operations**.
3. In **Ledger**, select the XRP Ledger network.
4. In **Operation**, select **Authorize holder**.
5. In **Holder**, select the holder's account.
6. Select the token:
  - **Listed asset** — Select the token from the list.
  - **Unlisted asset** — Enter the token's issuance ID.

7. Select a **Fee Strategy**, then click **Submit for approval** and [sign the operation with the app](/pt-br/products/custody/identity-and-access/authentication/ui-authentication#sign-ui-operations). The signing window shows the operation as **MPT Authorize** with the setting **Authorize holder**.



When the transaction is confirmed, the issuer and other authorized holders can send the token to the holder.

To revoke a holder's authorization in the UI, follow the same steps and select **Revoke holder** in **Operation**. The signing window shows the setting **Unauthorize holder**.

## Authorize a holder with the API

To authorize a holder to receive your MPT, submit an `MPTokenAuthorize` transaction:

```json
{
  "payload": {
    "id": "{{intent_id}}",
    "accountId": "{{issuer_account_id}}",
    "parameters": {
      "type": "XRPL",
      "feeStrategy": {
        "priority": "Medium",
        "type": "Priority"
      },
      "operation": {
        "type": "MPTokenAuthorize",
        "tokenIdentifier": {
          "issuanceId": "000004C463C52827307480341125DA0577AFFC21D4B2D083",
          "type": "MPTokenIssuanceId"
        },
        "holder": {
          "address": "rHolderAddress...",
          "type": "Address"
        },
        "flags": []
      }
    },
    "customProperties": {},
    "type": "v0_CreateTransactionOrder"
  }
}
```

## Parameters

| Field | Type | Required | Description |
|  --- | --- | --- | --- |
| `tokenIdentifier.issuanceId` | string | Yes | The 192-bit MPT issuance ID. |
| `tokenIdentifier.type` | string | Yes | Must be `MPTokenIssuanceId`. |
| `holder` | object | Yes | The holder to authorize. |
| `holder.type` | string | Yes | One of: `Account` (internal account UUID), `Address` (XRPL address), or `Endpoint` (endpoint UUID). |
| `holder.address` | string | Conditional | The holder's XRPL address to authorize. Required when `holder.type` is `Address`. |
| `holder.accountId` | string | Conditional | Internal account UUID. Required when `holder.type` is `Account`. |
| `holder.endpointId` | string | Conditional | Endpoint UUID. Required when `holder.type` is `Endpoint`. |
| `flags` | array | Yes | Empty array `[]` for authorization. |


## Revoke authorization with the API

To revoke a holder's authorization, include the `tfMPTUnauthorize` flag:

```json
{
  "operation": {
    "type": "MPTokenAuthorize",
    "tokenIdentifier": {
      "issuanceId": "000004C463C52827307480341125DA0577AFFC21D4B2D083",
      "type": "MPTokenIssuanceId"
    },
    "holder": {
      "address": "rHolderAddress...",
      "type": "Address"
    },
    "flags": ["tfMPTUnauthorize"]
  }
}
```

Revoking authorization does not remove the holder's tokens. Use [clawback](/pt-br/products/custody/accounts-and-assets/tokenization/xrpl-mpts/issuer/clawback) to recover tokens before revoking if needed.

## Response

A successful request returns the transaction order with status `Pending`. After confirmation, the holder can receive tokens from the issuer or other authorized holders.

## Authorization workflow

```mermaid
sequenceDiagram
    participant H as Holder
    participant I as Issuer
    participant L as XRPL

    H->>L: MPTokenAuthorize (opt-in)
    I->>L: MPTokenAuthorize (approve holder)
    I->>L: Payment (mint to holder)
    L->>H: Tokens credited
```

## Related topics

- [Multi-purpose tokens](/pt-br/products/custody/accounts-and-assets/tokenization/xrpl-mpts#supported-operations) — Overview of MPT operations.
- [Authorize MPT (holder)](/pt-br/products/custody/accounts-and-assets/tokenization/xrpl-mpts/holder/authorize) — Holder-side authorization.
- [Mint tokens](/pt-br/products/custody/accounts-and-assets/tokenization/xrpl-mpts/issuer/mint) — Issue tokens to authorized holders.
- MPTokenAuthorize — XRPL transaction reference.