Skip to main content

Transfers

Move tokens, force a transfer as custodian, manage transfer pre-approvals, check a transfer before it is signed, and recover lost or stray tokens.
Open it fromAssetsAll assetsActionsTransfer tokensRole:Any signed-in userConsole address: /token/assetClassSlug/templateSlug/tokenAddress/manage/action

Transfer tokens moves the available holdings of the participant you are working as, from that participant's executor wallet, to an eligible recipient. The same “Actions” menu holds these other controls:

  • Forced transfer moves tokens out of a holder's address without that holder's consent.
  • Approve transfer and “Revoke transfer approval” pre-authorise a transfer that a compliance rule would otherwise block, or cancel that authorisation.
  • Two recovery controls move units that their owner cannot move.

The Transfer pre-check tab tests a transfer without submitting it.

Emergency halt and freeze hold tokens in place. Forced transfer moves them, and the Console states that it cannot be undone, as it does for the two recovery controls. Halting the asset does not stop it: the token lets a custodian's forced transfer through while it is halted, and the Console keeps Forced transfer available to a Custodian during a halt. A partial freeze does not stop a forced transfer either. One that needs more than an address's free balance unfreezes exactly enough to cover the shortfall first, then moves the tokens.

The “Details” step of “Transfer tokens”, with one recipient and an amount of 10.

The step shows “Recipient” with the chosen account, then “Amount” with the transferable balance and “Max” under it, then “Add recipient”, then the “Total” against the transferable balance. Review moves to the next step.

Steps

Open the transfer control

Open “All assets”, select the asset, and open Actions. Each action opens on its own page under the asset, with a breadcrumb back to the asset, and “Cancel” returns you to where you came from. Choose one of these:

  • Transfer tokens moves the active participant's holdings.
  • Forced transfer moves a holder's tokens without their consent.
  • Approve transfer and “Revoke transfer approval” manage a compliance pre-approval instead of moving anything.

On this equity, “Actions” lists “Forced transfer” and “Transfer tokens” among the asset's other controls.

“Transfer tokens” is unavailable here, because the signed-in wallet holds none of the token. “Approve transfer” and “Revoke transfer approval” appear only on an asset whose compliance requires transfer approval, and only to its configured approval authority.

Enter the recipient, amount or approval values

For “Transfer tokens”, choose or enter the address under “Recipient” and the number of tokens under Amount. The line under the amount shows how much is transferable, and “Max” fills in all of it. Under that, a line shows its fiat equivalent at the token's price, for example “≈ $2,000.00”. When the token has no price, the line says that no price is set for the token, so there is no fiat equivalent.

Add recipient adds another recipient row, and the total under the rows sums them. Select “Review” and check the recipients and amounts before confirming. The recipient field refuses the zero address and the asset's own contract address, and warns when the recipient is the wallet the tokens come from: an address that can only lose the tokens never reaches the summary.

The review step also runs the Pre-trade compliance check for each recipient with an amount. When every recipient clears, one panel reads “Transfer will clear”. Otherwise a panel shows for each recipient that would not clear, labelled with its address when there are several. It reads “Transfer will revert” in red, or “Waiting for approval” in amber when the only thing holding the transfer is the transfer-approval rule: the transfer is valid and waits for an approval authority. A wallet with the System manager, Identity manager, Verification issuer or Compliance manager role on the organisation's system, or the Custodian role on the asset, sees each blocker the check can establish under “Resolvable by you”, “Requires operator action”, “Held for approval” or “Cannot be resolved”. “Resolvable by you” lists only what the wallet you act as can fix itself: a blocker on the other side of the transfer reads “Resolvable by the sender” or “Resolvable by the recipient”, and carries no button to issue a claim for it. Other wallets see a frozen address, a short balance or a halted asset by name, and anything else as one “Cannot be resolved” entry.

“Confirm transfer” stays disabled while the check runs and when any recipient would revert. A transfer that is only “Waiting for approval” can still be confirmed. Beside the button the review names the failed checks, for example “The pre-trade compliance check says this transfer will fail. Failed checks: Block addresses. Change the recipient or the amount.” When the check cannot run, the review says “Compliance could not be verified right now. The transfer will still be checked on-chain.”, and you can still confirm, because the chain refuses an ordinary transfer that breaks a rule.

For “Forced transfer”, enter the address to seize from, the recipient address, and the amount. A Pre-check panel checks the three inputs as you type:

  • Sender balance reads “Holds only” with the balance when the sender holds less than the amount. When the sender's balance drops while the form is open, the platform refuses the amount above the buttons, and the panel reads the sender's balance again, so this line and the amount's available figure show the balance the platform checked.
  • Recipient reads “Passes the identity checks” or “Fails the identity checks”. For a recipient address frozen on the token as a whole, it reads “The address is blocked. Unblock it first.” and the forced transfer cannot be submitted on any asset. The DALP 3.2 token contract refuses it too. A token on an older implementation does not check it, so a forced transfer sent straight to such a contract can still deliver units into a frozen address. The Console requires the recipient to be registered and verified for the token, and the chain applies the same identity check to a forced transfer.
  • Compliance rules names the rules that would block a normal transfer and says “The forced transfer overrides this.”

When the address to seize from is a DALP escrow, the platform refuses the transfer above the buttons and names the escrow, because a token forced transfer would leave the escrow's balances and locks wrong. Move an escrow's units from Escrows instead.

A failing recipient, an amount greater than the sender's balance, or the same address on both sides keeps “Continue” from going ahead. The confirmation screen is styled as a warning and names the same three fields. Read it before you continue. The button that submits it reads Transfer tokens, the name of the ordinary transfer's menu item, so check the review screen's heading and warning styling before you select it.

For Approve transfer or “Revoke transfer approval”, enter the sender wallet, the recipient wallet, and the exact token amount. Revoking needs the same three values as the approval you are cancelling. The module keys each approval on that identity pair and, in one of its configured modes, the exact amount, so entering the wrong amount for the right pair matches nothing and fails. It never touches the nearest approval.

Confirm with wallet verification

Confirm with wallet verification, the same as any other Console admin change.

An ordinary transfer that fails a check reverts. Nothing moves and nothing needs undoing. Forced transfer is different. Its confirmation screen states plainly, “This will forcibly transfer tokens from the source address to the recipient”, then adds, “This action bypasses standard transfer restrictions and cannot be undone”. The bypass is real. A forced transfer skips the compliance rules, the sender's address freeze, the halt and the units another feature holds for a pending move, so it moves tokens even from a sender the token would refuse. The chain still checks the recipient's identity and refuses a recipient whose address is frozen on the token. A token feature that refuses forced moves, such as Booked movements, still refuses it.

No Console control reverses a confirmed forced transfer. A new transfer or forced transfer back restores the position, and it needs its own authorisation.

Approving a transfer creates a record the compliance module honours later. Its confirmation note states, “This will approve the transfer of the specified amount from the sender to the recipient. The approval can be revoked before the transfer is executed”. Revoking is final for that specific approval: its own confirmation note states, “This will permanently revoke the transfer approval. The transfer will no longer be allowed to proceed unless re-approved”. Nothing has moved when you revoke, so a fresh approval can follow if the transfer is still wanted.

Two paths move tokens. Only one answers to every guard the token definesOrdinary transfer requires an executor wallet, a live token, and a pass through transfer-path compliance, which includes any transfer-approval pre-approval the asset requires. Forced transfer requires only the Custodian role. At the contract level it skips transfer-path compliance and the sender's address freeze. The token and the Console both let it run while the asset is halted. Forced transfer can even draw down frozen tokens by unfreezing what it needs first. Both paths still require the recipient to pass the token's identity check, and both refuse a recipient whose address is frozen. Ordinary transfer's outcome is a normal balance movement. Forced transfer's outcome cannot be undone, and the Console states this directly before you confirm it.Two paths move tokens. Only one answers to every guard the token definesThe same figure as the desktop variant, drawn portrait for phone widths. Ordinary transfer requires an executor wallet, a live token, and a pass through transfer-path compliance, which includes any transfer-approval pre-approval the asset requires. Forced transfer requires only the Custodian role. At the contract level it skips transfer-path compliance and the sender's address freeze. The token and the Console both let it run while the asset is halted. Forced transfer can even draw down frozen tokens by unfreezing what it needs first. Both paths still require the recipient to pass the token's identity check, and both refuse a recipient whose address is frozen. Ordinary transfer's outcome is a normal balance movement. Forced transfer's outcome cannot be undone, and the Console states this directly before you confirm it.

Forced transfer skips transfer-path compliance, the sender's freeze and a halt, but the recipient's identity check and freeze still apply.

Check a transfer before anyone signs

Open the asset and select its Transfer pre-check tab. It answers why a transfer would not go through, without submitting anything, and shows to a Custodian on the asset and to a wallet with the System manager, Identity manager, Verification issuer or Compliance manager role on the organisation's system.

Enter the “Sender”, the “Recipient” and the “Amount”, then select Run check.

The check reads the chain the way the transfer would: the token's compliance rules, the recipient's identity, a halt, a freeze on either address and the sender's free balance. The answer reads Transfer will clear, “Transfer will revert”, or “Waiting for approval” when the transfer-approval rule is the only thing holding it. A transfer that would revert lists the blockers the check can establish under who can resolve them: “Resolvable by you”, “Resolvable by the sender”, “Resolvable by the recipient”, “Requires operator action” or “Cannot be resolved”. When the recipient's identity is refused, the list stops at the identity blockers. Under the reason, an identity blocker names the rule that refused it: “Refused by the token identity registry rule”, “Refused by the token identity verification module rule” or “Refused by the global identity verification control”. A country, identity or address list bound system-wide refuses a wallet the same way as one bound to the token, and its blocker names the list's type with no source line. A transfer that waits for approval lists the approval authorities under “Needs approval from”, with an “Approve transfer” button. A short balance also marks the “Amount” field with “Not enough transferable units”. When the check cannot run, the tab says “The compliance check could not be completed. Please try again.” The blocker detail follows the roles of the wallet that signs your actions, which is the wallet of the participant you are working as. A pass describes the chain at the moment of the check, so a verification revoked before the transfer still makes it revert. Transfer-path compliance explains where the rules run.

An operator blocker carries a button that opens the control that resolves it:

  • Take action on a frozen address opens that address on the asset's “Blocklist” tab. On an address or identity block list rule it opens the “Compliance” tab. On an unregistered identity it opens the participant who owns the wallet, where you register the identity, or the users list when no single user owns the wallet.
  • Approve transfer opens the “Approve transfer” page.
  • A paused asset has no button: resume it with Resume token operations in “Actions”.

Recover tokens

Two recovery controls in Actions move units that their owner cannot move.

Recover lost wallet moves the whole balance of a lost wallet to its replacement. Like a forced transfer, it runs while the asset is halted and skips the compliance rules. It needs no role on the asset: the replacement wallet is the one that signs, and it recovers its own lost wallet. The custodian's override is the Platform API's “Force token recovery” operation, which needs the Custodian role. An Identity manager first marks the wallet as lost and pairs its replacement through identity recovery. Until then, the page shows “Identity recovery must be ready” and does not let you continue. It accepts only the replacement wallet the Identity manager paired, and the chain refuses any other. The page shows what the lost wallet holds and refuses the asset's own address, the same address on both sides, and a wallet that holds none of the asset. A frozen part stays frozen on the replacement wallet, and a wallet-level freeze carries over. Confirm the acknowledgement, then “Recover tokens”. The move cannot be undone.

Recover stray ERC-20 sends another ERC-20 token that was sent to this asset's contract by mistake to a recipient you choose. It needs the Emergency role. Enter the “ERC-20 contract”, the “Recipient” and the “Amount”. The page reads the contract first and refuses each of these:

  • The asset's own address. The message points to Forced transfer for units of the asset itself.
  • An address that does not answer as an ERC-20 token, with “This address is not an ERC-20 token.”
  • An amount with more decimals than the token has, or more than the asset's contract holds when that balance is indexed.

When the contract cannot be read, the page says “The contract could not be read. Check the address and try again.” The Platform API checks before it submits that the address is an ERC-20 token, and refuses one that is not. When it cannot reach the network to check, it answers with a retry delay. Confirm the acknowledgement of the token, recipient and amount, then Recover tokens.

Where a transfer shows

After “Transfer tokens” or “Forced transfer”, open Holders and compare the sender and recipient balances with the amount you moved.

Then open Activity and match the entry to the transaction hash. Every forced transfer lands as its own entry there too, labelled from the event name, alongside ordinary transfers, emergency halts, and freezes.

After “Approve transfer” or “Revoke transfer approval”, open the asset's “Features” tab, find the “Transfer approvals” tile, and choose View transfer approvals. The tile counts pending and total approvals. The page it opens lists them in these columns:

  • From and “To”: the sender and recipient, each shown by name when the Console knows one, such as a contact, and as a shortened address otherwise.
  • Amount: the approved amount.
  • Status: “Pending”, “Consumed” or “Revoked”. A newly created approval shows “Pending”. A confirmed revocation appears as “Revoked” after indexing.
  • Expires: starts hidden. Turn it on from the table's column settings or read the expiry in the row details.

A pending row also carries its own inline Revoke control, a second way to revoke.

Troubleshooting

Transfer tokens is missing

Signal: Transfer tokens does not appear in “Actions” at all. Cause: no executor wallet is available for the participant you are working as. Fix: select or create an executor wallet for that participant.

Transfer tokens cannot be selected

Signal: Transfer tokens is visible but greyed out. Cause: either the asset is halted, or the executor wallet holds no available balance in this token. The menu's own message names which one applies. Fix: resume token operations only when the approved intervention permits transfers to resume. If balance is the issue, confirm the selected participant and executor before moving funds.

Forced transfer is missing or cannot be selected

Signal: Forced transfer is absent from the menu, or present but greyed out. Cause: the item is absent when the asset does not carry the custodian capability, or when none of your wallets holds any role on this asset. It is greyed out when your wallets hold another role but not Custodian, or when the Custodian role sits on another of your wallets, and in that case the menu names that wallet. A halt does not grey it out. Fix: confirm the asset's configured capabilities, switch to the wallet the menu names, or ask an administrator for the Custodian role on this asset.

A forced transfer is rejected before confirmation

Signal: forced transfer fails before you reach the confirmation screen, naming the recipient. Cause: the same recipient-eligibility check as an ordinary transfer applies here. A manually entered address that is not registered or not eligible for this token is caught before submission. Fix: confirm the recipient's identity registration and eligibility for this token the same way you would for an ordinary transfer. Forced transfer waives the sender's checks, never the recipient's.

Approve transfer or Revoke transfer approval do not appear

Signal: neither control shows in Actions, even though the asset moves tokens under compliance rules. Cause: both need the asset to carry a transfer-approval compliance module, which most assets do not, and your account's identity to be one of that module's configured approval authorities specifically. Lacking either keeps both controls out of the menu entirely, with no disabled state to explain why. Fix: confirm the asset's compliance module configuration, then confirm your identity is listed as an approval authority on that specific module. Authority is granted per module.

A pre-approved transfer still reverts

Signal: a transfer between two identities fails compliance even though someone approved it earlier. Cause: three separate things end an approval early. An approval can expire, since every module configuration sets an expiry capped at 365 days. An approval can already be consumed, since some of the module's modes release a single transfer and mark the approval used. Or the identity that granted it can have since been removed from the authority list, which invalidates the approval even though it was valid when created. Fix: open the asset's Transfer approvals page from its tile on “Features” and check the row's status and expiry before assuming the transfer itself is wrong. A pending status does not by itself prove that an approval is usable. Also inspect other compliance checks, which a transfer approval does not waive.

Revoke transfer approval fails

Signal: revocation fails immediately, before wallet confirmation. Cause: no active, unconsumed approval exists for the exact sender, recipient, and, depending on the module's configured mode, amount you entered. A mistake in any one of the three matches nothing. Fix: open the asset's “Transfer approvals” page from its tile on “Features”, copy the sender, recipient, and amount directly from the “Pending” row you intend to cancel, or use that row's own inline Revoke control instead of re-entering the values by hand.

Frequently asked questions

Who sees the Transfer approvals tile?

The tile appears on “Features” for an asset with a transfer-approval module, to anyone who can read the asset's compliance configuration and to every configured approval authority. Its page lists every pending, consumed, and revoked approval. Only the inline Revoke control on a “Pending” row is gated to a configured approval authority. Any configured authority can revoke a pending approval, including one that another authority granted. A viewer without that standing sees the same rows but has no way to act on them from there.

Why doesn't a new approval or revocation show up right away?

The table reads from indexed compliance events rather than a live contract call, so a submitted approval or revocation needs a moment to reach the indexer before its row appears or its status changes. A successful wallet confirmation means the change is on its way, not that it has landed on the table yet. Refresh the Transfer approvals page after a short wait before assuming something went wrong.

Does an expired approval show a different status than a pending one?

No. Status changes only on an on-chain event: creation sets it to “Pending”, consumption sets it to “Consumed”, and revocation sets it to “Revoked”. Passing the expiry date fires no event, so an approval nobody used or revoked keeps showing “Pending” indefinitely. Compare the row's Expires column yourself instead of trusting the status badge to reflect expiry.

Does a forced transfer charge the same fee as an ordinary transfer?

No. A transaction fee feature configured on the asset exempts every forced transfer and recovery from the fee split, so the move delivers the exact amount you enter with nothing withheld. The recipient of a forced transfer gets the full amount. The configured fee still applies to an ordinary transfer through Transfer tokens. If the confirmation screen previews a fee on a forced transfer, the transfer still delivers the full amount.

Where do I configure who can act as an approval authority?

Not here. Actions only uses a transfer-approval module that already exists. Naming its approval authorities, and setting the expiry window and approval mode the module enforces, happens when the asset's compliance modules are configured, covered on Compliance modules.

Was this page helpful?