# Authorize MPTs

Before receiving an MPT for the first time, the holder must submit an `MPTokenAuthorize` transaction. This creates an `MPToken` entry with an initial zero balance.

## Prerequisites

| Prerequisite | Additional information |
|  --- | --- |
| An XRPL account in Ripple Custody | [View account details](/products/custody/v1.34/api/accounting-entities/account/view) |
| The MPT Issuance ID (48 hex characters) | Provided by the token issuer |
| Sufficient XRP for reserves | Owner reserve + MPToken object reserve |


## Authorize an MPT

System change process
All new requests to change the system state follow the same process. To familiarize yourself with this process first, follow the [Request a change with an intent](/products/custody/v1.34/resources/tutorials/intent) tutorial.

To authorize an MPT in Ripple Custody, create a transaction order with the `MPTokenAuthorize` operation:

### Payload example


```json
{
  "payload": {
    "id": "{{intent_id}}",
    "accountId": "42e44ded-a268-4426-a0fe-7287b5d52a01",
    "parameters": {
      "type": "XRPL",
      "feeStrategy": {
        "priority": "Medium",
        "type": "Priority"
      },
      "operation": {
        "type": "MPTokenAuthorize",
        "issuanceId": "000004C463C52827307480341125DA0577AFFC21D4B2D0831E",
        "flags": []
      }
    },
    "customProperties": {},
    "type": "v0_CreateTransactionOrder"
  }
}
```

### Payload fields

| Field | Type | Description |
|  --- | --- | --- |
| `operation.type` | string | Must be `MPTokenAuthorize`. |
| `operation.issuanceId` | string | The 192-bit MPT Issuance ID (hex encoded). |
| `operation.flags` | array | Empty array `[]` for authorization. |


## Revoke authorization

To revoke authorization and remove the `MPToken` entry, include the `tfMPTUnauthorize` flag:


```json
{
  "operation": {
    "type": "MPTokenAuthorize",
    "issuanceId": "000004C463C52827307480341125DA0577AFFC21D4B2D0831E",
    "flags": ["tfMPTUnauthorize"]
  }
}
```

You can only revoke authorization if your MPT balance is zero. Transfer or return all tokens before revoking.

## Related topics

- [Receive MPTs](/products/custody/v1.34/api/accounting/multi-purpose-tokens/holder/receive)
- [Send MPTs](/products/custody/v1.34/api/accounting/multi-purpose-tokens/holder/send)
- [Multi-purpose tokens concepts](/products/custody/v1.34/concepts/multi-purpose-tokens)