Pular para o conteúdo

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.
    The Authorize holder form
  7. Select a Fee Strategy, then click Submit for approval and sign the operation with the app. The signing window shows the operation as MPT Authorize with the setting Authorize holder.

    The signing window for an Authorize holder operation

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.

The signing window for a Revoke holder operation

Authorize a holder with the API

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

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

Parameters

FieldTypeRequiredDescription
tokenIdentifier.issuanceIdstringConditionalThe 192-bit MPT issuance ID. Required when tokenIdentifier.type is MPTokenIssuanceId.
tokenIdentifier.typestringYesMPTokenIssuanceId to identify the MPT by its issuance ID, or TickerId to identify it by its ticker ID. With TickerId, set tokenIdentifier.tickerId in place of tokenIdentifier.issuanceId.
holderobjectYesThe holder to authorize.
holder.typestringYesOne of: Account (internal account UUID), Address (XRPL address), or Endpoint (endpoint UUID).
holder.addressstringConditionalThe holder's XRPL address to authorize. Required when holder.type is Address.
holder.accountIdstringConditionalInternal account UUID. Required when holder.type is Account.
holder.endpointIdstringConditionalEndpoint UUID. Required when holder.type is Endpoint.
flagsarrayYesEmpty array [] for authorization.

Revoke authorization with the API

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

{
  "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 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

XRPLIssuerHolderXRPLIssuerHolderMPTokenAuthorize (opt-in)MPTokenAuthorize (approve holder)Payment (mint to holder)Tokens credited
XRPLIssuerHolderXRPLIssuerHolderMPTokenAuthorize (opt-in)MPTokenAuthorize (approve holder)Payment (mint to holder)Tokens credited