- Understanding how to set up your ledger for effective tracking of deposits and payouts in your system.
- Designing flexible workflows to accommodate various scenarios.
- Ensuring reliable and accurate transaction processing for your users.
Prerequisites
Before starting, ensure you have:- A running Blnk Core instance (e.g. at
http://localhost:5001). - An API key for Blnk (replace
YOUR_API_KEYin the code examples). Required for authenticated requests. - Optionally, you can connect your Blnk Core to your Blnk Cloud workspace to view your ledger data.
Handling deposits
When using Blnk to manage deposits, you can track the sources of your deposits-such as Stripe, Acme Bank, or others-directly in your ledger, enabling more detailed and accurate reporting. As illustrated in the map below, each source can be assigned to an internal balance, which will be reflected as the value of thesource field in your transaction request. Fees (1% of the deposit amount, capped at $5) are deducted and tracked separately.

- The source of the deposit, for example, @AcmeBank if it originates from Acme Bank.
- That the customer receives funds after the fees have been dededucted.
- The deposit fees are tracked using the
@Feesbalance.
Deposits with fee processing
When recording a deposit with fee processing, we’ll use the Multiple Destinations feature to distribute the incoming funds between the customer’s balance and the fees balance. We’ll also applyinflight to validate the deposits against predefined business rules before finalizing the transaction.
TypeScript
Verifying deposits based on business rules
Next, we’ll develop functions to process deposits according to the following business rules. In this tutorial, we’ll implement checks for two rules:- If the balance is blocked or frozen, the deposit should be voided.
-
If the deposit amount exceeds 1 million USD, it should remain in an
inflightstate, and a notification should be sent for further investigation.
Rule 1: Check if balance is blocked or frozen
TypeScript
Rule 2: Check amount rule
TypeScript
Putting it all together
TypeScript
Refunding deposits
To process refunds in your ledger and reverse a deposit:TypeScript
Handling payouts
Payouts function similarly to deposits but in reverse. TheCustomer Balance serves as the source, while the Payout Destination and @Fees act as the destinations. Include @Fees if the customer incurs fees for payment processing.

- The destination of the withdrawal.
- That the customer receives funds after the fees have been deducted.
- The deposit fees are tracked using the
@Feesbalance.
Path 1: Successful payouts
Here, the payout was successfully completed by your payout provider:TypeScript
Commit based on feedback from payout provider
TypeScript
How multiple destinations work
When using Multiple Destinations in a transaction (like in our tutorial), Blnk automatically generates a separate transaction record for each distribution. These individual records are linked together with theparent_transaction parameter.
This structure organizes and connects all parts of a multi-destination transaction efficiently.
A standout feature of this system is how actions on the parent_transaction affect the entire group:
- Committing the
parent_transactionautomatically commits all associated distributions, confirming the full distribution. - Voiding the
parent_transactionautomatically voids all distributions, canceling the entire distribution in one step.
Path 2: Failed payouts
The payout is pending, but a failure message was received from the provider, resulting in the transaction being voided:TypeScript
Path 2: Successful payout but reversed
The payout was initially successful, with confirmation received from the provider, but the funds were reversed by the provider due to an inability to settle the transaction:TypeScript
Conclusion
You now have a basic deposits and payouts system powered by Blnk Ledger. It efficiently processes transactions while ensuring accurate records. The system is flexible and can be expanded with features like:- Automated handling of failed transactions
- Custom withdrawal limits and approval workflows
- Support for multiple funding sources
- Real-time transaction monitoring and alerts