Casino
Crypto Payment Orchestration iGaming: Route Crypto + Fiat
Learn how crypto payment orchestration in iGaming works: route crypto as a peer rail, score by geo and deposit size, and keep one ledger. Read the playbook here.
•
12
Mins. Read

Lightning Pay

TL;DR:
Treat crypto as a peer rail behind your existing router, not as a parallel cashier with its own transaction identity.
Routing rules should score crypto on geo, deposit size band, player deposit history and recent fiat decline behavior.
Crypto's highest-value position in the waterfall is usually second or third — as failover after a card decline, and first for high-value deposits in constrained markets.
Your orchestration layer must own the unified transaction ID; the gateway supplies a provider reference that maps to it.
Reconciliation is the real integration cost: insist on exports keyed to your ID, not just to on-chain transaction hashes.
Ledger crediting and FX handling are a separate architectural concern — decide the routing model first.
Crypto should sit as a peer payment method inside your orchestration layer — not as a separate cashier tab.
Surface it through the same routing rules you already use for fiat PSPs, scored on geo, deposit size and player history, and bind every attempt to a unified transaction ID with shared reconciliation exports. One router, one ledger reference, one reporting surface.
Most operators who reach this question have already solved the hard organizational part. You have an orchestration layer or an in-house cashier router.
You have three to eight fiat PSPs per market, method ordering per geo, a retry waterfall, idempotency keys on deposit intents, and a reconciliation job that reads provider settlement files and matches them to your transaction store. Crypto is the new rail arriving into a stack that already has opinions.
The failure mode is predictable and expensive: crypto gets integrated as a side system because the first integration was fast and standalone. It gets its own cashier tab, its own transaction ID space, its own webhook consumer, its own daily export in a different shape.
Six months later you have two ledgers, finance reconciles crypto by hand, your AML team can't run a unified deposit velocity rule across rails, and your bonus engine treats a $2,000 USDT deposit differently from a $2,000 card deposit because the abuse logic only ever saw one of them.
This brief is about avoiding that. Specifically: where the crypto gateway plugs in, which routing and failover decisions you own versus which the provider owns, and what reconciliation contract you need to insist on before the first live deposit.
Where exactly does a crypto gateway plug into an existing orchestration layer?
Think of your current deposit flow as four layers. The cashier UI renders available methods. The orchestration layer decides which methods to render, in what order, and which provider handles each attempt.
The provider adapters normalize request and response shapes per PSP. The transaction store and reconciliation pipeline sit underneath, receiving webhooks and settlement data.
A crypto gateway is a provider adapter. That is the whole architectural claim, and it is the one that saves you the most downstream work. It sits alongside your card acquirers, your APM connectors and your bank transfer providers, behind the same routing interface.
It receives a deposit intent carrying your unified transaction ID, an amount, a currency, a player reference and a set of context flags. Furthermore, it returns a payment instruction — in this case an address, a quoted amount, an expiry window and a hosted or embeddable payment surface. Furthermore, it emits webhooks against that same transaction ID as state changes.
What makes crypto slightly different from a card adapter is not the interface. It is three properties of the underlying rail that your orchestration logic has to accommodate:
Asynchronous settlement with intermediate states
A card authorisation resolves in seconds into approved or declined. A crypto deposit moves through awaiting payment, detected/unconfirmed, confirming, confirmed and possibly underpaid or overpaid.
Your state machine needs those states as first-class citizens, not as sub-states crammed into pending. If your transaction store only models pending | success | failed, you will lose the operational visibility that makes crypto easy to support.
Player-initiated push rather than operator-initiated pull
With cards you pull funds. With crypto the player pushes them. That inverts the timeout semantics: a crypto intent can expire unused without ever having failed.
Your router needs to distinguish abandoned from declined, because those two outcomes should trigger completely different follow-up logic — one is a UX or quote-window problem, the other is a provider or risk problem.
Amount tolerance
Fiat deposits arrive for the exact requested amount or not at all. Crypto deposits arrive for approximately the requested amount, because of wallet fee handling, rounding and player error.
Your orchestration layer needs an explicit tolerance policy and a defined behaviour for underpayment and overpayment before launch, because the alternative is a manual support queue.
None of these require a second cashier. They require your existing state machine to be slightly richer. That is a one-time cost you pay once, in one place.
What should the payment routing rules look like for crypto versus fiat?
Your payment routing rules for a casino cashier already evaluate some combination of geo, currency, player segment, device, deposit amount, provider health and historical approval rate.
Crypto slots into those same dimensions. The question is what weight it gets and where it appears in method ordering.
Four inputs matter most.
Geo and market constraints
In markets where card acceptance for iGaming MCCs is unreliable or where local APM coverage is thin, crypto's relative approval rate is dramatically higher than fiat. In markets with strong local bank rails and high card approval, crypto is a niche method for a specific player segment. Your routing table should not treat crypto as globally rank-3; it should rank it per market, driven by observed approval rates.
Deposit size band
This is the most under-used routing input. High-value deposits are exactly where fiat rails degrade — issuer velocity limits, per-transaction caps, manual review triggers, and stepped-up 3DS friction all bite hardest above a certain threshold.
Crypto has no issuer in the loop. Many operators find that promoting crypto to first position above a deposit threshold (and leaving it at third below) lifts overall deposit success rate more than any card retry tuning they've done in a year.
Player deposit history
A player who has completed a crypto deposit before should see crypto ranked higher on their next visit, with a returning-player surface.
A player who has never used crypto and has a clean card history should not have crypto pushed to the top — you are adding cognitive load and hurting conversion.
Method ordering should be personalised on prior successful rail, exactly as you likely already do between card and bank transfer.
Recent decline behaviour
This is the failover input, and it deserves its own section.
Practically, crypto payment orchestration for iGaming works best when the crypto method is expressed in your rules engine with the same predicates as everything else — no special-case branch, no separate if isCryptoEnabled fork in the cashier controller.
If your rules engine can express "for BR, deposits above 1,500 BRL equivalent, rank crypto first," you're done. If it can't, that's a rules engine limitation to fix before you add the rail, not a reason to build a parallel path.
How should crypto behave in payment failover logic?
This is where crypto earns its keep in a mature stack, and where most implementations leave value on the table.
Your current payment failover logic for iGaming probably looks like a waterfall: attempt acquirer A, on soft decline retry acquirer B with a modified request, on hard decline surface an alternative method. The alternative-method step is usually a local bank transfer or an e-wallet. Crypto belongs in that step, and often above it.
The design decision is when to offer crypto after a fiat failure. Three patterns, in increasing sophistication:
Post-decline method promotion. After a hard decline on the player's chosen method, the cashier re-renders with crypto promoted to first position and a short contextual line explaining the alternative. Simple, effective, and requires only that your decline handler can trigger a re-rank rather than a static error page.
Decline-reason-aware promotion. Not all declines should route to crypto. An insufficient-funds decline should not — the player has no money, and offering a different rail wastes an impression. An issuer-policy, MCC-block, velocity-limit or do-not-honour decline should, because the money exists and the rail is the obstacle. Mapping normalised decline reasons to "promote crypto" versus "suppress crypto" is a half-day of work in your rules engine and materially changes the conversion lift you measure.
Cross-session failover memory. If a player hard-declined on card twice in the last 72 hours, don't wait for a third failure. Rank crypto first on their next cashier open. This requires your router to read recent attempt history at method-ordering time, which most orchestration layers already support for provider selection but not always for method selection.
The reverse direction matters too. Crypto has its own failure modes — an expired quote window, an underpayment, a network the player can't easily use. Your failover logic should treat an abandoned crypto intent as a signal to re-rank fiat upward on the next attempt, not as a dead end. Symmetry here is what makes a unified cashier for crypto and fiat feel like one product rather than two bolted together.
One caution on provider health. You almost certainly monitor fiat PSP approval rates and auto-demote degraded providers. Apply the same treatment to the crypto rail, but pick the right signal. Approval rate is meaningless for a push rail. The signals that matter are intent-to-confirmed conversion, median time-to-detection, and webhook delivery latency. Wire those into the same health-check framework rather than inventing a separate dashboard.
What integration surface and webhook contract should you require?
The adapter contract is where a good crypto integration is won or lost, and it comes down to four requirements.
Idempotency on your key, not theirs. Your orchestration layer generates the idempotency key for a deposit intent. The gateway must accept it, honour it on retry, and return the same intent rather than creating a duplicate address or a second quote. If the provider generates its own key and expects you to store the mapping, you've inherited an extra join in every reconciliation query and a class of duplicate-intent bugs that only appear under network retry.
Webhooks that carry your transaction ID in the payload root. Not in a metadata blob you have to parse, not only as an on-chain hash you have to look up. Your webhook consumer should be able to route the event on your own identifier without a lookup round-trip. Insist on signed payloads, monotonic event sequencing per transaction, and at-least-once delivery with documented retry backoff — the same contract you'd demand from any PSP. Then handle it in the same consumer, with the same replay-safe upsert logic, rather than standing up a separate service. This is the single clearest marker of an orchestration-ready crypto payment gateway versus a standalone hosted checkout that happens to have an API.
Full state transitions, not just terminal events. If the gateway only fires on confirmed, your support team is blind during the window that matters most. You want detected, confirming with confirmation counts, confirmed, expired, underpaid and overpaid as distinct events, each with the amount actually received.
Deterministic reconciliation export. More on this below, but the export must be keyed to your unified transaction ID.
If you're mid-evaluation, this is the point to review LightningPay's routing and webhook model against your existing adapter interface — the question is not whether the API works, but whether it works without a special case in your router.
How do you avoid creating a second ledger and a second reconciliation process?
Unified transaction identity is the load-bearing decision in the entire integration.
One ID, generated by your orchestration layer at intent creation, present on every downstream artefact: the cashier session, the provider request, every webhook, the transaction store row, the ledger entry reference, the reconciliation export line, the AML case file and the support ticket. The provider's reference and the on-chain hash are attributes of that record, not alternative identities.
Get this right and everything downstream inherits it for free. Deposit success rate reporting compares rails on the same key. AML velocity and structuring rules see one deposit stream per player, not two.
Bonus abuse logic evaluates a crypto deposit with the same predicates as a card deposit. Dispute and support tooling resolves any deposit from one lookup. Finance runs one reconciliation.
Get it wrong and every one of those systems needs a crypto-specific branch, and each branch drifts independently.
The reconciliation contract has three requirements.
First, the export must include your transaction ID as a first-class column.
Second, amounts must be reported in both the settlement currency and the player's requested currency with the applied rate and timestamp, so your matching job doesn't have to reconstruct pricing.
Third, the export cadence and cut-off must align with your existing fiat settlement windows — if crypto settles on a different daily boundary than your card acquirers, your finance team gets a permanent timing difference to explain every month.
Ledger crediting mechanics and FX treatment are genuinely a separate architectural concern, with their own decisions about when a deposit becomes spendable balance and how conversion risk is held.
Don't try to solve it inside the routing design. But do make sure the routing and webhook layer emits everything the ledger layer will need — received amount, applied rate, rate timestamp, confirmation state — so you're not retrofitting fields later.
Which approach actually performs better across the options?
Approach | Deposit success impact | Reconciliation cost |
|---|---|---|
Separate crypto cashier tab | Low; poor discovery | High; two ledgers |
Crypto as static last method | Modest lift | Medium; shared export |
Crypto in decline-aware failover | Strong lift on retries | Low; unified ID |
Crypto ranked first above amount band | Strong lift on high-value | Low; unified ID |
Multi-provider crypto behind one adapter | Highest availability | Low if IDs normalised |
That last row deserves a note. Some operators eventually run multi-PSP crypto integration — two crypto providers for redundancy or coverage, the same way they run redundant acquirers.
Do it behind a single normalised adapter interface so your router sees one crypto method with a provider-selection step underneath, not two crypto methods in the cashier. The player should never see provider topology.
How do you tell whether a provider is genuinely orchestration-ready?
Ignore the feature list and test five things.
Does the provider accept your idempotency key and your transaction ID on intent creation, and echo both back on every webhook? Does it emit intermediate states with confirmation counts and actual received amounts? Are webhooks signed, sequenced and retried with documented backoff? Does the reconciliation export key on your ID and include rate and timestamp fields? Can it express underpayment and overpayment tolerance as configuration rather than support tickets?
A provider that answers yes to all five drops into your stack as one more adapter. A provider that answers no to two or more will cost you a parallel integration path regardless of how good the checkout looks. If you're building the shortlist, our overview of crypto payment gateways for iGaming operators covers the evaluation criteria in more depth than is useful to repeat here.
Run the test with a sandbox integration against your real adapter interface, not against a fresh project. If the adapter needs a special case in your router, you've learned the answer.
Final thoughts
In a mature multi-PSP stack, crypto's real value is rarely as a replacement rail — it's as a failover path after issuer-side declines and as the default for high-value deposits where fiat limits and review thresholds bite hardest.
Those two positions are where the measurable lift lives, and both are routing decisions you configure rather than features you buy.
The integration decision that compounds is unified transaction identity, because reporting, AML, bonus logic and dispute handling all inherit it silently and permanently; a split ID space quietly taxes every one of those systems for as long as the integration lives.
The cheapest moment to get this right is before the first live deposit, while the transaction store is still empty and there's nothing to backfill. If you're at that point now, map crypto into your existing stack with LightningPay before you write the adapter.
Frequently Asked Questions
Should crypto have its own cashier tab?
Where in the waterfall should crypto sit?
Do we need to change our transaction state machine?
How should we handle underpayments and overpayments?
Can we run two crypto providers for redundancy?
Keep reading

Casino
Crypto Payment Orchestration iGaming: Route Crypto + Fiat
Learn how crypto payment orchestration in iGaming works: route crypto as a peer rail, score by geo and deposit size, and keep one ledger. Read the playbook here.

Casino
Crypto Payment Refunds iGaming: Overpay & Wrong-Chain Fix
Crypto payment refunds in iGaming need policy, not chargebacks. Learn which failures auto-resolve and which need a keyed recovery workflow with an SLA.

Casino
Casino Platform Certification Payment Changes Explained
Do crypto cashier updates trigger GLI testing? Learn how payment changes affect casino certification scope, the 4 sign-off levels, and how to avoid costly retesting.








