Skip to main content

Introduction

Every fintech builds a ledger. Most build it wrong.

They start with a database table. Balances as columns. Transfers as row inserts. It works until it doesn't. Race conditions create phantom money. Partial failures leave accounts out of sync. One bad deploy and reconciliation takes days.

Quda exists so you never have to build that.

What is Quda

Quda is a ledger API. Quick Unified Double-entry API. You send API calls, Quda handles the bookkeeping.

Every transfer debits one account and credits another. Always. Atomically. There is no way to create money from nothing or lose it in transit. The database enforces this at the lowest level, not your application code.

The problem

Building a financial ledger is deceptively simple. The first version takes a week. Fixing it takes a year.

Race conditions. Two transfers hit the same account at the same time. Both check the balance, both see enough funds, both proceed. Now the account is negative. Your ledger lies.

Partial failures. A transfer debits one account but crashes before crediting the other. Money disappears. Your support team spends hours figuring out where it went.

Reconciliation. Your ledger says one thing, your payment provider says another. Someone manually reconciles spreadsheets at the end of every day.

Scale. Your ledger works at 100 transactions per second. Your business needs 10,000. Rewriting a ledger under production load is surgery on a beating heart.

These are not edge cases. Every fintech that builds their own ledger hits every one of these.

How Quda solves it

Double-entry is enforced, not optional. Every transfer has a debit and a credit. The database rejects anything else. Your application cannot create an unbalanced transaction even if it tries.

Atomicity at the database level. A transfer either fully completes or fully fails. No partial state. No phantom money. No reconciliation needed.

Balance enforcement is structural. Credit accounts cannot go negative. Debit accounts cannot go negative in the other direction. This is not a check in application code. It is a constraint in the database engine.

Millions of transactions per second. The engine processes over a million transfers per second on commodity hardware. Your throughput problem is solved before you have it.

What you build vs what Quda handles

You build your product. Users, KYC, compliance, business rules, fees, interest calculations, payment integrations, mobile apps.

Quda handles the money layer. Accounts, balances, transfers, holds, multi-currency, webhooks, audit trails.

You call our API. We make sure the numbers are always right.

Base URL

https://withquda.digitospace.com

Quick example

Three API calls. Create an account, move money, check the balance.

# Create a wallet
curl -X POST https://withquda.digitospace.com/v1/accounts \
-H "Authorization: Bearer qk_test_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"ledger": 1001, "code": 100, "balance_type": "credit"}'
# Transfer funds
curl -X POST https://withquda.digitospace.com/v1/transfers \
-H "Authorization: Bearer qk_test_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"debit_account_id": "...",
"credit_account_id": "...",
"amount": 50000,
"ledger": 1001,
"code": 100
}'
# Check balance
curl https://withquda.digitospace.com/v1/accounts/{id}/balance \
-H "Authorization: Bearer qk_test_..."

Core concepts

Ledgers define currencies. A USD ledger with 2 decimal places. A TZS ledger with none. A BTC ledger with 8. Each ledger is isolated.

Accounts hold balances on a ledger. Credit accounts for wallets and liabilities. Debit accounts for assets and expenses. Balance rules are enforced by the engine. Overdrafts are impossible.

Transfers move money between accounts. Posted transfers are instant and final. Pending transfers hold funds until you confirm or cancel. Linked transfers move money across multiple accounts atomically.

Webhooks notify your application when things happen. Account created, transfer posted, balance changed. Every payload is signed with HMAC-SHA256. See all events.

API keys give you access. A live key for production, a test key for sandbox. Each environment has its own accounts and ledgers, completely isolated.