Developers
A payments API you can reason about
Predictable resources, idempotent writes and events that mirror the ledger exactly. Start in the sandbox and promote the same integration to production.
Keys & OAuth scopes
Issue scoped API keys per environment, or let end users authorise your app through OAuth.
Idempotent endpoints
Every money-moving call takes an idempotency key, so retries never double-charge a wallet.
Signed webhooks
Subscribe to transaction, payout and compliance events with signature verification and replay.
Sandbox parity
The sandbox runs the same ledger and rules as production, with simulated rails and outcomes.
Request
Move money
Amounts are always integers in the currency's minor unit.
bash
curl -X POST https://api.lumowallet.com/v1/transfers \
-H "Authorization: Bearer $LUMO_API_KEY" \
-H "Idempotency-Key: 8f2c1a94-transfer" \
-H "Content-Type: application/json" \
-d '{
"source_wallet": "wlt_9fa21",
"destination_wallet": "wlt_4be07",
"amount": 25000,
"currency": "USD",
"reference": "invoice-1042"
}'Event
Receive the result
Webhooks carry the ledger entries that produced the balance change.
json
{
"id": "evt_01J8Z3",
"type": "transaction.settled",
"created_at": "2026-08-13T17:04:11Z",
"data": {
"transaction_id": "txn_71c4d",
"status": "settled",
"amount": 25000,
"currency": "USD",
"entries": [
{ "wallet": "wlt_9fa21", "direction": "debit", "amount": 25000 },
{ "wallet": "wlt_4be07", "direction": "credit", "amount": 25000 }
]
}
}