Buybacks
Access Prerequisites
- Permission (module):
repurchaseTokens(execute a buyback). Viewing requires access to the group (viewCredits). - License/Feature:
CREDIT_INVESTMENTSenabled on the tenant license (Vault). - Menu container: TOKENIZATION → group Tokenized Credit
What it is / when to use
The Buybacks screen handles buyback requests — when the originator (or the house) needs to repurchase the position in a Deal, returning the capital to the investor. Buybacks arise from events such as contract violation, fraud, invalid receivables, or early settlement.
Use this screen to locate a deal, list its buyback requests, and execute the ones that are approved/pending, triggering the financial return to the investor and the write-off of the position (including burning the tokenized units, when applicable).
Pre-conditions
- Permission:
repurchaseTokens(dual permission — CPM enum + dynamic module in the DB). - License/Feature:
CREDIT_INVESTMENTSenabled. Without it, the group does not appear in the menu at all. - Dependencies on other screens: a Deal must be selected; the buyback request must already exist (originated from the deal/receivable flow).
Step by step
- Go to the menu Tokenized Credit → Buybacks.
- Search and select a Deal in the search field (the list loads deals; filters by number/ID).
- The buyback requests for that deal are loaded.
- For an executable request, click Execute → confirm in the bottom-sheet.
Filters and columns
| Filter/Column | What it shows | Data source |
|---|---|---|
| Deal (selector) | Deal selected to list its buybacks | search over getDeals(); required |
| Deal (column) | Number/ID of the request's deal | BuybackRequest.dealId (resolved via dealMap) |
| Originator | Associated cedent | BuybackRequest.originatorId (resolved via originatorMap) |
| Amount | Amount to be repurchased | BuybackRequest.buybackAmount (BigNumber) |
| Reason | CONTRACT_VIOLATION, FRAUD, INVALID_RECEIVABLES, EARLY_SETTLEMENT, OTHER | BuybackRequest.reason (+ reasonDetails) |
| Status | REQUESTED, PENDING, APPROVED, EXECUTED, REJECTED, FAILED | BuybackRequest.status |
| Created at | Date of the request | BuybackRequest.createdAt |
Actions and modals
- Select deal / Clear: sets the
dealIdthat filters the requests; without a selected deal, the screen warns it is required. - Execute:
executeBuyback(requestId, approvedBy)after confirmation (bottom-sheet).approvedByis the ID of the logged-in operator (orsystem). Moves the request toEXECUTED, returning the capital to the investor and writing off the position.
As this is a sensitive financial operation (refund + position burn), execution may trigger step-up (password + MFA, X-Step-Up-Token, 5-minute window) depending on the environment — identity reconfirmation, not 4-eyes approval.
Business rules / considerations
Attention
- Deal is mandatory. The buyback list only loads after selecting a deal; there is no global view of all buybacks on this screen.
- Reason matters for auditing.
reason/reasonDetailsexplain the buyback (fraud, violation, etc.) and should match the eventual Cancellation of the deal.
Irreversible
- Executing a buyback is final. It triggers the financial return to the investor and the write-off/burn of the tokenized position units. There is no rollback — an erroneous buyback requires a new compensatory financial event.
- Financial values:
buybackAmountis BigNumber in the backend; check decimal places before confirming. - Idempotency: the financial return goes through FinLib and is idempotent by externalId — if reprocessed, error
E00021("already processed") means success (already settled), not a failure. See [[reference_finlib_idempotency]].