# Create an MPT issuance

Create a new Multi-Purpose Token (MPT) issuance on the XRP Ledger.

## Prerequisites

- An XRPL account registered in Ripple Custody
- Sufficient XRP for reserves (owner reserve + issuance reserve)


## Create an MPT issuance

To create an MPT, submit a transaction order with the `MPTokenIssuanceCreate` operation:


```json
{
  "payload": {
    "id": "{{intent_id}}",
    "accountId": "{{issuer_account_id}}",
    "ledgerId": "xrpl-testnet",
    "parameters": {
      "type": "XRPL",
      "feeStrategy": {
        "priority": "High",
        "type": "Priority"
      },
      "maximumFee": "1000000000",
      "memos": [],
      "operation": {
        "type": "MPTokenIssuanceCreate",
        "assetScale": 6,
        "transferFee": 0,
        "maximumAmount": "1000000000000000",
        "metadata": {
          "type": "HexEncodedMetadata",
          "value": "7B226E223A224D7920546F6B656E222C2264223A22546F6B656E206465736372697074696F6E227D"
        },
        "flags": ["tfMPTCanTransfer", "tfMPTCanTrade", "tfMPTCanClawback", "tfMPTCanLock"]
      }
    },
    "description": "MPTokenIssuanceCreate intent",
    "customProperties": {},
    "type": "v0_CreateTransactionOrder"
  }
}
```

The `metadata.value` field contains hex-encoded JSON. The example above decodes to: `{"n":"My Token","d":"Token description"}`. Use a hex encoding utility to convert your metadata JSON to hex format.

## Parameters

| Field | Type | Required | Description |
|  --- | --- | --- | --- |
| `flags` | array | Yes | Issuance flags. Can be empty `[]`. See [Issuance flags](#issuance-flags). |
| `assetScale` | integer | No | Decimal precision (0-255). Default: 0 |
| `maximumAmount` | string | No | Maximum supply (64-bit unsigned integer as string). Omit for unlimited. |
| `transferFee` | integer | No | Transfer fee in basis points (0-50000). |
| `metadata` | object | No | Hex-encoded on-chain metadata. See [Metadata format](#metadata-format). |


## Metadata format

The `metadata` field must be an object with the following structure:

| Field | Type | Required | Description |
|  --- | --- | --- | --- |
| `type` | string | Yes | Must be `HexEncodedMetadata`. |
| `value` | string | Yes | Hex-encoded metadata string. |


## Issuance flags

Set these flags during creation to control token behavior. These flags are **immutable** after creation.

| Flag | Description |
|  --- | --- |
| `tfMPTCanLock` | Issuer can freeze tokens. |
| `tfMPTRequireAuth` | Holders must be authorized before receiving tokens. |
| `tfMPTCanTransfer` | Holders can transfer tokens to each other. |
| `tfMPTCanClawback` | Issuer can reclaim tokens from holders. |
| `tfMPTCanEscrow` | Tokens can be placed in escrow. |
| `tfMPTCanTrade` | Tokens can be traded on the DEX. |
| `tfMPTConfidential` | Enable confidential mode (cMPT). |


Choose flags carefully during issuance. Most flags cannot be changed after the MPT is created.

## Response

A successful request returns the transaction order with status `Pending`. The transaction includes the generated `MPTIssuanceID` in the on-chain result after confirmation.

## Retrieve the issuance ID

After the transaction is confirmed, retrieve the issuance ID from the transaction result:

1. Query the transaction order by ID.
2. Extract the `MPTIssuanceID` from the ledger result.


The issuance ID is a 192-bit identifier (48 hex characters) used to reference the MPT in all subsequent operations.

## Related topics

- [Multi-purpose tokens](/products/custody/v1.36/accounts-and-assets/tokenization/xrpl-mpts#supported-operations) — Overview of MPT operations.
- [Multi-purpose tokens concepts](/products/custody/v1.36/accounts-and-assets/tokenization/xrpl-mpts) — Conceptual information about MPTs.
- [Mint tokens](/products/custody/v1.36/accounts-and-assets/tokenization/xrpl-mpts/issuer/mint) — Issue tokens to holders.
- [Token flags](/products/custody/v1.36/accounts-and-assets/tokenization/xrpl-mpts#token-flags) — Flag descriptions and risk impact.
- MPTokenIssuanceCreate — XRPL transaction reference.