Session Based Transfer

Session Based Transfer

Session-based transfer is a feature that allows creating reservations in a wallet when there's not enough balance to cover fees/amount. Currently, it's only applicable to closed-loop digital wallet transfers and fee/amount transactions. Tenants can activate this feature on their account by enabling the 'enabledSessionBasedTransfer' property to 'true'. It's important to note that this feature only works if the sessionId for the previous fee transfer matches the session for the new fee transfer.

Here's an example to illustrate how it works:

Let's say, on January 1st, a wallet has a current balance of 50R with an available balance of 50R. The monthly fee is set at 100R, which is charged on the 1st of each month. If session-based transfer is enabled, it will deduct 50R from the wallet and create a session-based reservation worth 50R. Assuming the customer doesn't top up the wallet throughout the month, on February 1st, the monthly fee will be charged again. Since there's no balance in the wallet and a previous fee of 50R is still owed, plus the new month's fee of 100R, a reservation of 50R (from the previous month) plus 100R (for the current month) totaling 150RAN is created in the customer's wallet. If the customer tops up with 300RAN on the 5th of February, they can only use 150R as the pending reservation for the monthly fee is 150R. It's crucial to ensure that both transfers for January 1st and February 1st must have the same sessionId and bestEffort is true"

Fees will be deducted on the 1st of every month. However, if a manual transfer is required, the user must use the bulk-transfer API and ensure that enabledSessionBasedTransfer=true is enabled at the tenant level as described below:

Session Based Reservations

When a customer does not have sufficient balance in a digital wallet to cover any dues at the scheduled time, but the tenant wishes to clear the dues either fully or partially once the wallet is credited, the following steps must be taken in Eclipse:

Enable Session-Based Transfer:
At the tenant level, enable this property: c

Call Bulk Transfer API:
Use the Eclipse bulk transfer API, specifying the fromWalletId (Customer wallet) and toWalletId (System wallet). Ensure that the sessionId is not null and has the prefix "forceSessionBasedTransfer-". i.e "forceSessionBasedTransfer-session0005" where session0005 is random string.

POST  /eclipse-conductor/rest/v1/tenants/{tenantId}/wallets/bulk-transfers

[  
  {
    "amount": 50,
    "description": "Session Based reservations (Infiniti Pay Loans) - Payment of 50",
    "externalId": "session0005",
    "externalUniqueId": "session0005",
    "fromWalletId": 7864560888,
    "sessionId": "forceSessionBasedTransfer-session0005",
    "toWalletId": 7864560889
  }
]

How it works:
Once the tenant calls the bulk-transfer endpoint with the specified parameters, Eclipse will attempt a force transfer and create a reservation in the customer's wallet for the remaining amount (if the full amount is not recoverable). When the customer's wallet is credited, Eclipse will trigger a forced settlement, either fully or partially, based on the available balance. If only a partial amount is recovered, a reservation will be created for the remaining amount.

Multiple Session-Based Transfers:
A tenant can initiate multiple session-based transfers by assigning unique IDs to each one. However, note that settlements will be processed in the order of their creation.