Build traceable transaction workflowson an open-source ledger
Model each money movement as an immutable double-entry transaction. Run Blnk Core yourself or deploy and operate it with Blnk Cloud.
git clone https://github.com/blnkfinance/blnk && cd blnk && docker compose up Transaction details
Transaction workflows
const response = await blnk.Transactions.create({ precise_amount: 125034, precision: 100, currency: 'USD', source: '@WorldUSD', destination: '@MyBalance', reference: 'ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94', description: 'Customer payment', skip_queue: true,}); Blnk Core
Built-in correctnessand reliability
-
Double-entry accounting
Every transaction has a source and a destination. Debits always equal credits, so the books cannot silently drift.
-
Immutable records
Recorded transactions cannot be edited or deleted. History is only appended.
-
Reliable at scale
Concurrent transactions are ordered and applied safely, preventing conflicting writes from corrupting balances under high traffic.
Integration was seamless, and the fact that it's open-source adds flexibility. On top of that, Blnk is incredibly fast, making it a solid choice for high-performance financial systems.
Blnk Core
Model multicurrency workflowswith precise money movement
-
Balances in any currency
Store multiple currencies in the same ledger and organize balances in ledger folders.
-
Currency exchange workflows
Model FX conversions and move value between currencies with a complete transaction audit trail.
-
Exact amounts, any asset
Record BTC, ETH, and other digital assets down to their smallest supported unit.
Blnk Core
Reserve funds with inflight. Release or clear only whenyour conditions are met.
For four years we billed on bare Postgres: one transaction in, another out, no balances. It wasn't a ledger. On Blnk, everything is accounted for and auditable. There hasn't been a case where money went missing. We can add new features easily, and expand into more currencies without rebuilding.
Blnk Core
Integrate your ledger transactions withyour existing stack, provider or payment rail
-
Your ledger is the source of truth
Put it in front of any payment provider or rail and integrate the third parties you already use.
-
Post from the stack you already have
Use our REST API and SDKs with the languages and infrastructure you already use.
const response = await blnk.Transactions.create({ precise_amount: 123012, precision: 100, currency: 'USD', source: '@WorldUSD', destination: '@MyBalance', reference: 'ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94', description: 'Wallet top-up for Ada Okonkwo', inflight: true, allow_overdraft: true, skip_queue: true,});if (checksComplete) { await blnk.Transactions.updateStatus( response.data.transaction_id, { status: 'commit' }, );} else { await blnk.Transactions.updateStatus( response.data.transaction_id, { status: 'void' }, );}curl -X POST "http://YOUR_BLNK_INSTANCE_URL/transactions" \ -H "X-blnk-key: $BLNK_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "precise_amount": 123012, "precision": 100, "currency": "USD", "source": "@WorldUSD", "destination": "@MyBalance", "reference": "ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94", "description": "Wallet top-up for Ada Okonkwo", "inflight": true, "allow_overdraft": true, "skip_queue": true }'if [ "$CHECKS_COMPLETE" = true ]; then curl -X PUT "http://YOUR_BLNK_INSTANCE_URL/transactions/inflight/$TRANSACTION_ID" \ -H "X-blnk-key: $BLNK_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "commit" }'else curl -X PUT "http://YOUR_BLNK_INSTANCE_URL/transactions/inflight/$TRANSACTION_ID" \ -H "X-blnk-key: $BLNK_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "void" }'fitransaction, resp, err := client.Transaction.Create( blnkgo.CreateTransactionRequest{ ParentTransaction: blnkgo.ParentTransaction{ PreciseAmount: big.NewInt(123012), Precision: 100, Currency: "USD", Source: "@WorldUSD", Destination: "@MyBalance", Reference: "ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94", Description: "Wallet top-up for Ada Okonkwo", }, Inflight: true, AllowOverdraft: true, SkipQueue: 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": 123012, "precision": 100, "currency": "USD", "source": "@WorldUSD", "destination": "@MyBalance", "reference": "ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94", "description": "Wallet top-up for Ada Okonkwo", "inflight": True, "allow_overdraft": True, "skip_queue": 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(123012) .precision(100) .currency("USD") .source("@WorldUSD") .destination("@MyBalance") .reference("ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94") .description("Wallet top-up for Ada Okonkwo") .inflight(true) .allowOverdraft(true) .skipQueue(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"));} -
Automate reconciliation
Match ledger transactions against external records and quickly identify discrepancies across payment rails.
Blnk Cloud
Deploy production-grade ledgers on our Cloud
We provision the infrastructure, tune the hardware, and manage the boring ops. You ship and enjoy the performance.
Dedicated infrastructure
Single-tenant hardware. Isolated environment, isolated resources. No noisy neighbours.
99.9% uptime SLA
Under 44 minutes of allowed downtime per month. We aim for zero. Read full SLA.
Zero-downtime backups
Automated backups on the live instance. Restore without taking the ledger offline.
High availability
Automated failover. If a node goes offline, our systems bring the deployment back automatically.
Faster speed & throughput
Throughput up to 100,000 TPM. Higher limits on request.
30-min SEV 1 response
When your instance is unavailable, first response within 30 minutes. We keep you updated until it’s resolved.
We had just secured our license and planned for about a year of build time to build something audit-ready and compliant. Using Blnk cut that to six months. All of our features were tracked accurately with complete audit trail.
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
Pro Support Tell us the product. We design the ledger architecture that will hold at your scale.
Private Slack channel
Pro Support Your team and ours in one Slack Connect channel. We work the issue with you there until it's resolved.
PoC development
Pro Support We help you build your use case in Blnk so you can see the flows before you commit the full integration.
Dedicated integration docs
Pro Support A guide written for your product: the ledgers to create, each money flow, and the API calls to implement it.
24/7 availability
Pro Support On-call across timezones. Someone on the team picks up within the hour, nights and weekends included.
30-min SEV-1 response
Production 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.
FAQs
Have other questions? Email us at [email protected].
How does Blnk compare with other ledger solutions?
Blnk is 100% self-serve. You can test with a Sandbox right now (takes less than 5 minutes). No need for a sales call or separate onboarding session. Talk to us only when you need dedicated Support or want Enterprise features.
Can you use Blnk if you are just starting out?
Yes. Blnk is the right starting point. You'll build and ship faster.
Does Blnk serve customers of your size and complexity?
Yes. Blnk works with every financial use case, from startups to enterprises to regulated financial institutions.
Does Blnk have a test environment?
Yes, you can deploy a Sandbox from your Blnk Cloud workspace . The first 5 days are free.
Can you deploy Blnk in your Cloud environment?
Yes. We offer assisted on-prem deployment support for companies with stricter security and data residency preferences.
Who owns your data?
Your data is yours, always. You can export it out at any time.
Can you get support during integration?
Yes. Pro Support gives you a private Slack channel to talk directly with ledger experts from our team.
Can you migrate from your in-house ledger to Blnk?
Yes. We figure out the best migration approach with you as part of our Pro Support.
Do you pay for hours spent in Support?
No. Pro Support is a flat annual cost. The number of hours spent solving an issue doesn't affect your billing.
Does Blnk do consulting?
Yes. We can help you build a PoC or integrate Blnk for your product so you can ship even faster.
Does Blnk offer managed hosting?
Yes. You can deploy a Sandbox or Production instance from your Cloud workspace. Takes a few minutes and you're all set up. Learn more .