# token.issue() [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/verticals/token.ts#L112) Create a new MPT issuance. ## Signature ```ts token.issue( params: TokenIssueParams, options?: TokenWriteOptions, ): Promise> ``` ## Parameters | Parameter | Type | Required | Description | | --- | --- | --- | --- | | `metadata` | `MPTokenMetadata | string` | Yes | Token metadata: a structured object (encoded per the [XLS-89 standard](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0089-multi-purpose-token-metadata-schema)) or a raw string (UTF-8 hex-encoded as-is). Validated against XLS-89; non-compliant metadata is rejected before submission. | | `assetScale` | `number` | No | Decimal places between the display value and base units. Defaults to `2`. | | `maximumAmount` | `string` | No | Maximum issuable amount, in base units. | | `transferFee` | `number` | No | Transfer fee on secondary sales, as a percentage (`0.5` = 0.5%, range 0–50). Defaults to `0`. | | `flags` | `TokenIssueFlags` | No | Capability flags (see below). | The `flags` object accepts: | Flag | Type | Required | Description | | --- | --- | --- | --- | | `canLock` | `boolean` | No | The issuer can lock the token (globally or per-holder). | | `requireAuth` | `boolean` | No | Holders must be authorized before they can hold the token. | | `canEscrow` | `boolean` | No | The token can be used in escrows. | | `canTrade` | `boolean` | No | The token can be traded on the DEX. | | `canTransfer` | `boolean` | No | The token can be transferred between holders. | | `canClawback` | `boolean` | No | The issuer can claw back the token. | Note `issue()` applies opinionated, overridable defaults so a bare call yields a usable token: `canLock`, `canEscrow`, `canTrade`, `canTransfer`, and `canClawback` are all enabled, and `requireAuth` is off. Pass any flag explicitly to override it. MPT capability flags are **permanent** once the issuance exists. ## Options `options` is an optional second argument that sets the source account and overrides the fee. | Option | Type | Required | Description | | --- | --- | --- | --- | | `from` | `AccountSelector` | No | The account to act as — an r-address string, or an object `{ address }` or `{ signer, account? }`. Defaults to the primary signer's primary account. (For IOU operations, this is the issuer.) | | `fee` | `FeeIntent` | No | Fee override — a priority tier and/or a `maxFeeDrops` cap. | | `idempotencyKey` | `string` | No | A prior submission's `idempotencyKey`, to retry to the same intent instead of creating a duplicate. Auto-generated when omitted. | ## Returns Resolves to a `SubmissionResult`. Every simpleXRPL write resolves to a `SubmissionResult` — a union tagged by `source`, with the backend's raw response preserved verbatim. Its common fields are: | Field | Type | Description | | --- | --- | --- | | `intent` | `T` | The operation-specific output — see the operation's own return fields. | | `source` | `'xrpld' | 'custody' | 'palisade'` | Which backend produced the result; discriminates `response`. | | `response` | `TxResponse` | custody record | Palisade record | The backend's raw response, preserved verbatim. | | `txHash` | `string` *(optional)* | The XRPL transaction hash, once the transaction is on-ledger. | | `intentId` | `string` *(optional)* | The custodian intent id, when the path produced one. Hold onto this to resume via `client.intent`. | | `idempotencyKey` | `string` *(optional)* | The UUIDv7 this submission carried. Pass it back as a later call's `idempotencyKey` to retry to the same intent rather than creating a duplicate. | ### Return fields For `Token.issue`, the `intent` (`TokenIssueIntent`) carries: | Field | Type | Description | | --- | --- | --- | | `mptIssuanceId` | `string` | The id of the newly created MPT issuance. | ## Underlying XRPL transactor Builds and submits a single [MPTokenIssuanceCreate](https://xrpl.org/docs/references/protocol/transactions/types/mptokenissuancecreate) transaction. ## Example ```ts const { intent } = await client.token.issue({ metadata: { ticker: 'TBILL', name: 'Acme T-Bill Token', icon: 'https://acme.example/icon.png', asset_class: 'rwa', asset_subclass: 'treasury', issuer_name: 'Acme Inc', }, }) console.log(intent.mptIssuanceId) ```