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.

$ npm install @lumina/node

Three steps to production.

01 install & authenticate
terminal
$ npm install @lumina/node
$ lumina login
✓ authenticated as dev@yourco.com
✓ sandbox key written to .env
02 first charge
charge.ts
const charge = await lumina
  .charges.create({
    amount: 12000,
    currency: 'eur',
    method: 'card',
  });
03 hear back
webhook.ts
lumina.webhooks.on(
  'charge.settled',
  (ev) => ship(ev.charge)
);
// signed, retried, in order

Reference, 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, recommended
GET/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

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
events · livestreaming
charge.ts
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.

terminallumina-cli 2.4.1
$ 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.

Jun 04, 2026

Payout schedulesNEW

Define recurring payout rules per recipient — daily sweeps, weekly net-outs, or threshold triggers. Available on all plans.

May 22, 2026

Smarter webhook retries

Backoff schedule now adapts to your endpoint's recovery pattern. Median redelivery time after an outage dropped 64%.

May 09, 2026

EU data residency for all plans

Pin all processing and storage to eu-central. Previously Enterprise-only.

Apr 24, 2026

Go SDK 3.0

Context-first API, typed webhook payloads, and zero-allocation signature verification.

Apr 10, 2026

?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.

api.lumina.dev · operational · 99.99% (90d)