Marketplaces
The easiest way to track moneymovement in a marketplace
A wallet for each buyer and seller. Hold the payment until delivery, then split the fee and let the ledger tell you how much to pay out per user.
Priya Shah
BuyerElena Rossi
SellerOmar Farouk
BuyerNoah Williams
SellerA wallet for every buyer and seller.
Create a balance for each buyer and seller, and link it to their identity. Deposits, holds, and payouts post against that wallet, so you always know who owns what.
PS Priya Shah
| Balance | $ 400.00 |
|---|---|
| Inflight debit Amount waiting to be sent | $ 0.00 |
- Delivery
- Inspection
- Release
ER Elena Rossi
| Balance | $ 1,240.00 |
|---|---|
| Inflight credit Amount waiting to be received | $ 0.00 |
Ship escrow features in days, not weeks.
When the buyer pays, post the amount inflight. Commit it when the seller delivers, settle part of it, or void it back to the buyer.
Track reserved and available funds for every buyer and seller
The held amount sits as reserved on the wallet. Available is what they can still spend. Reserved funds stay put until you commit or void the hold.
const response = await blnk.Transactions.create({ precise_amount: 18650, precision: 100, currency: 'USD', source: 'bal_priya_shah', destinations: [ { identifier: '@FeesUSD', distribution: '5%' }, { identifier: '@TaxUSD', distribution: '8%' }, { identifier: '@RevenueUSD', distribution: '10%' }, { identifier: 'bal_elena_rossi', distribution: 'left' } ], reference: 'ref_order_1842', description: 'Order 1842', inflight: true, atomic: true,});if (checksComplete) { await blnk.Transactions.updateStatus( response.data.transaction_id, { status: 'commit' }, );} else { await blnk.Transactions.updateStatus( response.data.transaction_id, { status: 'void' }, );} transaction, resp, err := client.Transaction.Create( blnkgo.CreateTransactionRequest{ ParentTransaction: blnkgo.ParentTransaction{ PreciseAmount: big.NewInt(18650), Precision: 100, Currency: "USD", Source: "bal_priya_shah", Destinations: []blnkgo.Source{ { Identifier: "@FeesUSD", Distribution: "5%" }, { Identifier: "@TaxUSD", Distribution: "8%" }, { Identifier: "@RevenueUSD", Distribution: "10%" }, { Identifier: "bal_elena_rossi", Distribution: "left" } }, Reference: "ref_order_1842", Description: "Order 1842", }, Inflight: true, Atomic: true, },)if checksComplete { transaction, resp, err = client.Transaction.Update( transaction.TransactionID, blnkgo.UpdateStatus{ Status: blnkgo.InflightStatusCommit }, )} else { transaction, resp, err = client.Transaction.Update( transaction.TransactionID, blnkgo.UpdateStatus{ Status: blnkgo.InflightStatusVoid }, )} response = blnk.transactions.create({ "precise_amount": 18650, "precision": 100, "currency": "USD", "source": "bal_priya_shah", "destinations": [ { "identifier": "@FeesUSD", "distribution": "5%" }, { "identifier": "@TaxUSD", "distribution": "8%" }, { "identifier": "@RevenueUSD", "distribution": "10%" }, { "identifier": "bal_elena_rossi", "distribution": "left" } ], "reference": "ref_order_1842", "description": "Order 1842", "inflight": True, "atomic": True,})if checks_complete: blnk.transactions.update_status( response["transaction_id"], {"status": "commit"}, )else: blnk.transactions.update_status( response["transaction_id"], {"status": "void"}, ) ApiResponse<JsonNode> response = blnk.transactions().create( CreateTransactions.create() .preciseAmount(18650) .precision(100) .currency("USD") .source("bal_priya_shah") .destinations(List.of( MultipleSourcesT.create().identifier("@FeesUSD").distribution("5%"), MultipleSourcesT.create().identifier("@TaxUSD").distribution("8%"), MultipleSourcesT.create().identifier("@RevenueUSD").distribution("10%"), MultipleSourcesT.create().identifier("bal_elena_rossi").distribution("left") )) .reference("ref_order_1842") .description("Order 1842") .inflight(true) .atomic(true));if (checksComplete) { blnk.transactions().updateStatus( response.data().get("transaction_id").asText(), UpdateTransactionStatus.create().status("commit"));} else { blnk.transactions().updateStatus( response.data().get("transaction_id").asText(), UpdateTransactionStatus.create().status("void"));} Manage your fee splits and platform revenue
Commit the hold as a split: fee, tax, and seller. The ledger posts each leg. The payout is what that split says the seller is owed.
Support
24/7 dedicated support, all year round
Pro Support puts your team in a Slack Connect channel with ours. We design the ledger with you, help you ship, and stay on-call after launch.
The support from the team was incredible. They not only guided us through their product but also helped us implement it within our system. The level of attention and dedication was truly exceptional. We couldn’t ask for better partners.
Ledger design
Tell us the product. We design the ledger architecture that will hold at your scale.
Private Slack channel
Your team and ours in one Slack Connect channel. We work the issue with you there until it's resolved.
PoC development
We help you build your use case in Blnk so you can see the flows before you commit the full integration.
Dedicated integration docs
A guide written for your product: the ledgers to create, each money flow, and the API calls to implement it.
24/7 availability
On-call across timezones. Someone on the team picks up within the hour, nights and weekends included.
30-min SEV-1 response
If the ledger is unavailable, our engineers are on it in 30 minutes. Also included with Production.
Security
Open-source ledger infrastructure you can trust
Blnk is ISO/IEC 27001-certified and GDPR-compliant. Built with security features and best practices auditors ask for.
How we handle securityISO/IEC 27001 and GDPR
Blnk’s ISMS is certified to ISO/IEC 27001. Personal data is processed under GDPR.
Encryption in transit and at rest
Sensitive data at rest is encrypted with AES-256-GCM. Data in transit uses TLS 1.2 or higher.
Role-based access control
Give every team member the access they need, and nothing more.
Built for security reviews
We support vendor and security reviews with clear policies around incident response and business continuity.