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 }
    ]
  }
}