The API is the product.
Everything Lumina does is reachable in one REST API, five typed SDKs, and a CLI that replays production traffic on your laptop.
Three steps to production.
$ npm install @lumina/node
$ lumina login
✓ authenticated as dev@yourco.com
✓ sandbox key written to .envconst charge = await lumina
.charges.create({
amount: 12000,
currency: 'eur',
method: 'card',
});lumina.webhooks.on(
'charge.settled',
(ev) => ship(ev.charge)
);
// signed, retried, in orderReference, previewed.
Six core resources. Every list endpoint paginates the same way; every object carries the same metadata envelope.
POST/v1/chargesCreate a charge+
"amount" int · minor units, required
"currency" iso-4217, required
"method" card | ideal | pix | sepa_dd | …
"idempotency_key" header, recommendedGET/v1/charges/:idRetrieve a charge+
Returns the charge with its full event history embedded. Immutable once settled.
POST/v1/payoutsSend a payout or batch+
Single destination or up to 10,000 items per batch. Rails are chosen per leg unless pinned.
POST/v1/fx/quotesLock an FX quote+
Quotes hold for 30 seconds. Fill by referencing the quote id in a conversion or payout.
GET/v1/accounts/:id/ledgerStream ledger entries+
Double-entry records, cursor-paginated. Supports ?as_of= for point-in-time balances.
GET/v1/eventsList events+
Everything that ever happened to your account, replayable. The same stream your webhooks read.
Webhooks that hold up.
Signed with rotating keys, delivered in order per object, retried on a 36-hour backoff schedule. If your endpoint is down for a deploy, nothing is lost — replay any window from the CLI.
- HMAC-SHA256 signatures, 24h key rotation
- Per-object ordering guarantee
- At-least-once delivery + idempotency keys
- lumina events replay --since 2h
import Lumina from '@lumina/node';
const lumina = new Lumina(process.env.LUMINA_KEY);
const charge = await lumina.charges.create({
amount: 12000, currency: 'eur', method: 'card',
});Your language, same shape.
Production, on your laptop.
The CLI tunnels live events to localhost and replays any historical window against your dev server. Stop testing webhooks by buying things.
$ lumina listen --forward localhost:3000/webhooks
✓ tunnel open · whsec_…k2Lq
→ charge.authorized ch_9fKb2Lq 200 OK (41ms)
→ charge.settled ch_9fKb2Lq 200 OK (38ms)
→ payout.sent po_5cD1mT 200 OK (44ms)
$ lumina events replay --since 2h --only payout.*Changelog.
Payout schedulesNEW
Define recurring payout rules per recipient — daily sweeps, weekly net-outs, or threshold triggers. Available on all plans.
Smarter webhook retries
Backoff schedule now adapts to your endpoint's recovery pattern. Median redelivery time after an outage dropped 64%.
EU data residency for all plans
Pin all processing and storage to eu-central. Previously Enterprise-only.
Go SDK 3.0
Context-first API, typed webhook payloads, and zero-allocation signature verification.
?as_of= point-in-time balances
Query any account's balance as of any second in its history. Auditors cried tears of joy.
Read the docs. Ship today.
Sandbox keys are instant. Production approval takes one business day.