# 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 (Vault) | [View account details](/pt-br/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](/pt-br/products/custody/v1.34/resources/tutorials/intent) tutorial.

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

### Payload example

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

### Payload fields

| Field | Type | Description |
|  --- | --- | --- |
| `operation.type` | string | Must be `MPTokenAuthorize`. |
| `operation.tokenIdentifier.type` | string | `MPTokenIssuanceId` to identify the MPT by its issuance ID, or `TickerId` to identify it by its ticker ID. |
| `operation.tokenIdentifier.issuanceId` | string | The 192-bit MPT issuance ID (48 hex characters). Required when `type` is `MPTokenIssuanceId`. |
| `operation.tokenIdentifier.tickerId` | string | The ID of the MPT's ticker. Required when `type` is `TickerId`. |
| `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",
    "tokenIdentifier": {
      "issuanceId": "000004C463C52827307480341125DA0577AFFC21D4B2D083",
      "type": "MPTokenIssuanceId"
    },
    "flags": ["tfMPTUnauthorize"]
  }
}
```

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

## Related topics

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