Create a new Multi-Purpose Token (MPT) issuance on the XRP Ledger.
- An XRPL account registered in Ripple Custody
- Sufficient XRP for reserves (owner reserve + issuance reserve)
To create an MPT, submit a transaction order with the MPTokenIssuanceCreate operation:
{
"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.
| Field | Type | Required | Description |
|---|---|---|---|
flags | array | Yes | Issuance flags. Can be empty []. See 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. |
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. |
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.
A successful request returns the transaction order with status Pending. The transaction includes the generated MPTIssuanceID in the on-chain result after confirmation.
After the transaction is confirmed, retrieve the issuance ID from the transaction result:
- Query the transaction order by ID.
- Extract the
MPTIssuanceIDfrom the ledger result.
The issuance ID is a 192-bit identifier (48 hex characters) used to reference the MPT in all subsequent operations.
- Multi-purpose tokens — Overview of MPT operations.
- Multi-purpose tokens concepts — Conceptual information about MPTs.
- Mint tokens — Issue tokens to holders.
- Token flags — Flag descriptions and risk impact.
- MPTokenIssuanceCreate — XRPL transaction reference.