Booked movements keep a share class token in step with a share register that a transfer agent or fund administrator keeps off chain. The register stays the source of truth. Every change to a holding is a movement. An investor can request it, or the administrator can enter it directly, and only the administrator's booking, with the reference of its register entry, moves the units, in the same transaction. While the feature is attached, the token refuses every mint, burn, transfer, forced transfer and wallet recovery that is not the booking of a movement. The platform stores the register reference you enter and does not check it against your register, so match the two on Reconciliation.
The movements page and the Investor portal call the feature “Booked movements”. The token's Features tab lists it as “Register lines”, and the Platform API calls each movement a register line.
Each share class is its own token. The Share-Class Mirror template records the class name in its Share class field, and a movement belongs to one token, so a switch between classes is a redemption booked on one class token and a subscription booked on the other.
The “Booked movements” page with the “Configuration” panel and the “Requested movements” table.
The title row carries “Book a movement”. The “Configuration” panel shows the movement count, the requested movements waiting for the administrator, and “Investors can request” with “Edit”. The “Requested movements” table lists each movement's number, type, parties, amount and request date, with a “Book” action.
Who can do what
Steps
Open the movements page
Open the token and select its Features tab. Under “Records”, the “Register lines” section shows two counts, “Requested” and “Movements”, and the link “Open the register”. The link opens the “Booked movements” page. A token without the feature shows “Booked movements are not enabled for this asset” on that page.
The page holds one panel and two tables:
- The Configuration panel shows the number of movements, the number of requested movements with “waiting for the administrator” while any wait, and “Investors can request” with the moves investors may request.
- The Requested movements table appears only while at least one movement waits.
- The Movement history table lists every movement with its “Movement” number, “Type”, “From”, “To”, “Amount”, “Register reference”, “Corrects”, “Status” and “Decided” date. “Opened” is a column you can show. A movement's status is “Waiting for the administrator”, “Booked in the register” or “Cancelled”. The table filters by type and status.
A user who lacks Supply management sees Book a movement disabled, and a user who lacks Governance sees “Edit” disabled. Each gives “Supply management holders book movements. Governance holders set what investors can request.” as the reason.
Book or reject a requested movement
In Requested movements, open the row's actions. A Supply management administrator sees “Book” and “Reject”. An investor who opened the request and holds no Supply management role sees “Cancel request” on their own rows only.
“Book” opens “Book movement #” followed by the movement number. Enter the “Register reference”, the entry number or identifier your register gave this movement, such as DBMF-REG-0003, and continue. The “Review the booking” step repeats the movement and says “The units move as soon as you book the movement.” Select Book movement and confirm. The platform releases the units the request reserved under the Hold feature and moves them in the same transaction. If the transaction reverts, nothing moves and the request stays requested with its units held. The movement shows “Booked in the register” with its reference.
“Reject” opens “Reject movement #” followed by the number: “The investor's units are released and the movement is cancelled.” The review notes “A rejected movement can't be booked again. The investor can send a new request.” Select Reject movement and confirm. No units move, and the movement records who cancelled it.
The Book movement, “Reject movement” and “Book directly” sheets, and the “Mint”, “Burn” and “Forced transfer” sheets on a token with Booked movements, ask the platform whether it would accept the write while you fill the form. A refusal shows in the sheet with its reason and fix, for example that the movement is already booked, that the holder's unfrozen balance falls short of the amount, or that a register reference is missing, and the review button stays off until you change the entry. You learn it before you enter your wallet verification. The check books nothing and signs nothing. If it cannot answer, it does not block you and the write returns its own refusal. The Investor portal's request and withdraw sheets run the same check, so an investor sees the refusal before the wallet verification as well.
The sheet is titled “Book movement #3” and its “Details” step asks for one required field, “Register reference”, the reference of this movement in the register.
“Review” shows the movement before you confirm.
Book a movement directly
Select Book a movement on the title row. The sheet books a move that no investor requested: “Record a move in the register and apply it to the token in one step.”
- Choose the Type of movement: “Subscription”, “Redemption”, “Transfer” or “Correction”.
- Enter the parties. A subscription asks for To, the holder who receives the units. A redemption asks for “From”, the holder whose units leave. A transfer asks for both, and the two must differ.
- Enter the Amount. When units leave a holder, the sheet shows “Available to move” with the holder's balance less frozen units and less the units their open requests hold. A larger amount shows that it is more than the amount available, and the sheet cannot continue.
- Enter the Register reference.
- Continue to “Review the movement”, which notes that the movement is booked and the units move right away. Select Book movement and confirm.
The “Book a movement” sheet set to “Subscription”, with “To”, “Amount” and “Register reference”.
“Amount” takes whole units of the token, and “Review” stays disabled until the fields are filled.
Correct a booked movement
A booked movement is not edited after booking. To fix a mistake, book a new movement that corrects it. In “Book a movement”, choose Correction. Enter “From”, “To” or both, as the correction needs, the “Amount” and the “Register reference”, then pick the booked movement it fixes in “Movement to correct”. The list shows the most recent booked movements by number and register reference.
For example, a subscription of 1,000 units booked as DBMF-REG-0003 should have been 100 units. Book a correction from the holder for 900 units with the reference DBMF-REG-0004 and pick DBMF-REG-0003 in Movement to correct. The holder then holds 100 units, and the “Corrects” column of the correction names the original movement.
Mint, burn or force a transfer
On a token with Booked movements, the “Mint tokens”, “Burn tokens” and “Forced transfer” pages in the token's Actions menu book a movement. Each page takes one row only and adds a required “Register reference” and an optional “Corrects movement”, which lists booked movements and defaults to “No correction”. The page cannot continue until you enter a reference. On success the message reads “Movement booked”.
A mint books a subscription to the recipient. A burn books a redemption from the holder. A forced transfer books a transfer between the two holders. A booked movement is not charged a transaction fee, so the mint and burn pages show no fee. On a token without Booked movements, these pages stay as Mint and burn and Transfers describe them.
Choose what investors can request
In the “Configuration” panel, a Governance administrator selects Edit beside “Investors can request”. The sheet “Moves investors can request” has one checkbox each for “Subscription”, “Transfer” and “Redemption”: “Choose which moves an investor can ask for. Administrators can always book any movement.” A Supply management administrator can book any movement type, subject to the checks under What the platform checks. You can clear all three, and the panel then shows “None”. The review notes “Investors can no longer request the moves you switch off. Movements already requested stay in the queue.” Select “Save settings” and confirm.
A token issued from the Share-Class Mirror template starts with all three moves allowed. An issuance or attach that names no moves allows all three.
What the investor sees in the Investor portal
The holding page of a mirror token shows a Booked movements card: “The administrator books each movement in the register. Your holding changes when they do.” The card lists the investor's own movements, newest first. It shows the units still free to request as “Available to request”.
- Request a move. The card shows “Request subscription”, “Request transfer” and “Request redemption” for each move the token allows. Transfer and redemption are unavailable while no units are free. The sheets “Request a subscription”, “Request a transfer” and “Request a redemption” ask for the amount, and a transfer also asks for the “Recipient”. An amount larger than the free units shows “You can request at most” the free amount with “Open movements hold the rest.” Select “Send request”. The message reads “Request sent. It is waiting for the administrator to book it in the register.”
- Follow a move. Each row reads, for example, “Transfer of 40 DBMF to” an address, with its status: “Waiting for the administrator”, “Booked in the register” with its register reference, “Refused by the administrator”, “Withdrawn by you”, “Withdrawn by the requester” when another holder withdrew a transfer to the investor, or “Cancelled”.
- Withdraw a request. A requested movement the investor opened shows “Withdraw”. The sheet “Withdraw request” says “Withdraw this request. Your units are released straight away.” The message reads “Request withdrawn.”
The Console holding page of a mirror token (Wealth, “Portfolio”, then the holding) shows the same “Booked movements” card to a signed-in holder, with the same request, follow and withdraw steps, the same checks and the same messages. A token without Booked movements shows no card. On a bank cash-out, “Create redemption line” opens the same “Request a redemption” sheet in the Console.
A transfer from the holding page's ordinary transfer sheet becomes a requested transfer too. It waits as Waiting for the administrator and the balance does not change until the administrator books it. When a movement changes state, the card refreshes the holding balance.
The holding page with the “Booked movements” card, its request buttons and the investor's movements.
The card shows the units available to request and three movements: two requested transfers waiting for the administrator, with “Withdraw” on the one the investor opened, and a subscription booked in the register with its register reference.
What the platform checks
On a request
- The token allows this kind of move. A subscription names the investor as the receiver and holds nothing, and an investor has at most one open subscription request per token.
- A transfer or redemption moves the investor's own units. The request holds the amount through the Hold feature until the movement is booked or cancelled, so the investor cannot spend those units elsewhere. The amount cannot exceed the units that are free.
- The amount is more than zero, and the two parties differ.
- The sending wallet is not marked lost, and the token has the Hold feature.
- The participant account that owns the sending wallet does not carry the
securities-transfersrestriction. An administrator lifts it from the participant's account, as Restrict a wallet describes.
On a booking
- The caller holds Supply management, and the movement is still requested.
- The register reference is not empty. A correction names a movement that is booked.
- The move passes the token's own checks. A booking to a wallet that is not verified reverts, and a requested movement then stays requested with its units held.
- A burn or forced transfer cannot spend frozen units or units that open requests hold. The API refuses an amount larger than the holder's balance, less frozen units, less held units, before it sends a transaction. A mint is not checked against a balance.
On a cancellation
The investor who opened the movement or a Supply management administrator can cancel it. Anyone else is refused. The movement records who cancelled it, and the Investor portal shows the difference as “Withdrawn by you” or “Refused by the administrator”.
What a mirror token refuses
The token refuses every move that is not the booking of a movement. A plain transfer, a mint, a burn, a custodian forced transfer and a wallet recovery sent straight to the contract all revert with DALP-4481: “This token only moves through a movement the administrator books.” To move a lost wallet's units, cancel its open requests, unfreeze any frozen units, then book a transfer from the lost wallet to its replacement. The booking does not check that the recipient is the wallet paired through identity recovery, and it carries no freeze across, so freeze the units again on the replacement if they must stay frozen.
Other token features and add-ons that move units are refused the same way. Features that do not move units, such as dividend yield, keep working. A dividend yield feature pays holders on their booked balances.
The Platform API turns its own supply and transfer calls into movements, so a client that calls these routes books or requests a movement instead of being refused:
A mint, burn or forced transfer without registerReference, or with more than one movement, is refused with DALP-14068: “A token with booked movements needs a register reference and one movement per call”. The same code refuses registerReference or corrects on a token without the feature.
Feature combinations
Booked movements needs the Hold feature, which reserves the units of an open request. The Platform API refuses an issuance or attach without Hold, and refuses to detach Hold while Booked movements is attached.
Booked movements cannot sit beside Management fee, Conversion, Conversion minter, Supply delegate or Maturity redemption, because each of these moves the token outside a movement. A template, issuance or attach that combines them is refused.
Corporate actions that move units are not offered on a mirror token: “Stock dividend”, “Distribution paid in tokens”, “Bond coupon paid in tokens”, “Bonus issue”, “Rights issue”, “Capital decrease”, “Stock split”, “Reverse split”, “Spin-off”, “Buyback” and “Partial redemption”. A “Cash dividend” or a cash distribution stays available once dividend yield is attached. A fund token with Booked movements also takes no dealing requests, because its subscriptions and redemptions are movements.
The feature cannot be replaced with a new instance, because open requests and the units they hold would stay on the old one. The refusal reads “This feature cannot be replaced while its requested lines may hold units. Change its requestable kinds through the settings route instead.” Change the requestable moves on the existing feature instead.
Detach and attach the feature again
Book or cancel every requested movement before you detach the feature, so no units stay held.
An account that can set the feature list (Governance with Supply management and Custodian, or with the admin role) can detach the feature with Detach in the actions menu of the “Register lines” section on the “Features” tab, or through the token feature endpoints. While the feature is detached, the token no longer refuses plain moves, the API cannot request, book or cancel the detached instance's movements, and the movement lists keep them as history. A movement that was still requested shows as “Cancelled”, dated from the detach, but its units stay held on the chain. Attach the same instance again to book or cancel it and release the units. An attach that names the same moves investors could request when the instance was created brings that instance back: its requested movements show as requested once more and can be booked or cancelled. An attach with any other set starts a new instance with no movements.
Troubleshooting
Each code below refuses the request as sent. Fix the cause first. Codes about a movement's state can clear once the state changes. The DALP-14000 codes come from the Platform API and the DALP-4400 codes from the token contract.
The Console shows Requested movements could not load with “Check your connection and try again.” and a retry when the queue cannot be read. The Investor portal shows “Your requests are unavailable right now.” with “Retry”, and “Your account doesn't have access to this information.” when the caller cannot read the token's movements. A failed request or withdrawal reads “Your request could not be sent:” or “Your request could not be withdrawn:” followed by the reason.
Frequently asked questions
Does booking move the units, or is there a separate settlement step?
Booking is the move. The booking records the register reference and moves exactly the movement's amount in the same transaction, so a booked movement and its unit move succeed or revert together.
Why is an investor's transfer not refused outright?
The investor's wallet or app sends an ordinary transfer, and the Platform API turns it into a transfer request that holds the units. Nothing moves until the administrator books it. A transfer sent straight to the contract, outside the Platform API, is refused with DALP-4481.
Can the administrator book a move the token does not let investors request?
Yes. The request settings limit what investors can ask for. A Supply management administrator can book a subscription, redemption, transfer or correction at any time, from any holder and without that holder's request. No setting under Approvals holds a booking for a second person.
API routes
The request and response fields of each route are in the v2 API reference.
A booking names either a requested lineId with its registerReference, or from, to, amount and registerReference for a direct booking, with an optional corrects. A zero address as from books a subscription, and a zero address as to books a redemption. The list filters by state, kind, holder and corrects. A list filtered by holder also returns that holder's balance, the units their open requests hold, and the units still available. A Supply management or Governance administrator lists and reads every movement of the token. Any other caller lists and reads only movements where one of their wallets gives, receives or opened the request, and gets not found for the rest.
The check route takes an action of request, book, bookDirect or cancel with the fields of the matching write and no wallet verification. It answers { "data": { "action", "clears": true } } when the write would be accepted now, and the error of the write when it would not. The mint, burn and forced transfer check at POST /api/ takes the same optional registerReference and corrects as those writes.
Each webhook event for a booked movement carries registerLine with lineId, registerReference and, for a correction, correctsLineId, so a reconciliation job can match it to the register entry. Reconciliation covers that job. Composable Token explains how a feature such as Booked movements decides what a token can do, Token features covers the Hold and dividend yield features a mirror token uses, and Booked movements describes the line model behind each movement.