iGaming secure payment for operators: stablecoins or crypto
August 24, 2026

A player says the deposit left their wallet 40 minutes ago and the balance is still empty. Someone on your payments team has to answer that. The answer depends on decisions made long before the player pressed pay. Which event credits the balance. Whether the notification that triggered the credit was really sent by your provider. What happens when the amount that arrives is not the amount you asked for. That is what iGaming secure payment means in practice: not one setting, but a short list of controls between the cashier page and the player's account.
EukaPay gives iGaming operators taking stablecoins or crypto four of those controls. Payments are confirmed on-chain before they are marked complete. Webhooks are signed so your server can check them. Secret API keys are scoped to a test or a live environment. And the payout side has controls of its own. This guide covers each one, names the mechanic behind it, and says what your developers (or coding agents) still have to build.
In this guide, you'll learn:
The four points where a deposit can go wrong between the cashier page and the player balance
How to confirm a crypto deposit on-chain before you credit anything
How to verify that a payment notification actually came from your provider
Which controls protect the payout side of an iGaming operator's balance
Where an iGaming secure payment can fail between the cashier and the player balance
Four failure points cover most of what a payments team gets paged about.
The first is
crediting too early
. A player balance credited before the transfer has confirmed on the blockchain is a balance that can be wagered against funds that never arrive.
The second is
a forged or replayed notification
. If your server credits a player because an HTTPS POST arrived saying a payment completed, anyone who learns your endpoint URL can write that POST too.
The third is
an amount mismatch
. Crypto deposits often arrive slightly under or over the requested amount, because the player's wallet subtracted a network fee or rounded the transfer. A cashier that treats every arrival as full payment can over-credit.
The fourth is
an exposed key
. A secret API key in client-side code, a public repository, or a chat thread hands someone else your account's write access.
Confirming a crypto deposit on-chain before you credit a player balance
A crypto deposit becomes final when the network it was sent on confirms it. That property belongs to the blockchain, not to any provider. The operational question is which signal your platform should act on.
Network confirmations - waiting for the transfer to settle on the chosen network
EukaPay accepts pay-ins in most major cryptocurrencies like BTC, ETH, LTC, SOL, USDC, USDT. The payment is watched on the network the player chose, and the invoice moves to a completed state once the sum of payments matches the requested amount. Your cashier should credit on that completed state, and not on the player's screenshot, a pending mempool entry, or the fact that a payment page was opened. The same rule holds when volume spikes, which our guide to
crypto deposits for iGaming at peak load
covers in more detail.
Underpaid and overpaid deposits - the paymentUnderpaid and paymentOverpaid events
EukaPay sends a separate webhook event for each case.
paymentCompletedfires when the sum of payments for an invoice matches the requested amount.
paymentUnderpaidfires when it comes in below, and
paymentOverpaidwhen it comes in above. The requested amount takes your transaction tolerance settings into account, which you configure in the dashboard rather than in code.
Handle all three events. A cashier that only listens for
paymentCompletedcan leave short deposits in a state nobody owns, and a short deposit that nobody owns becomes a support ticket.
API keys, HTTPS, and signed webhooks in a EukaPay integration
A deposit can be confirmed on-chain and still be credited to the wrong player, if the notification that reports it was never checked.
API keys - secret keys, the x-api-key header, and separate test and live keys
EukaPay authenticates API requests with a private key prefixed
sk_, passed in the
x-api-keyheader. Keys are further prefixed for the environment, so
sk_test_and
sk_live_are separate keys. A request made with a test key does not touch live funds. All API requests must be made over HTTPS, and calls made over plain HTTP or without authentication fail.
Keep secret keys server-side. Never place one in client-side code, a public repository, or anywhere a contractor's laptop can copy it out.
Webhook signature verification - checking the x-eukapay-signature header
Every EukaPay webhook carries an
x-eukapay-signatureheader. To confirm the message came from EukaPay, take the raw payload in bytes, compute an HMAC SHA-512 hex digest using your secret key, and compare that digest to the header value. Reject anything that does not match, before your code touches a player balance.
Two details matter. Use the raw payload exactly as received, because re-serializing the JSON can change the bytes and break the comparison. And build for repeats. If a delivery fails, EukaPay retries every 20 minutes for up to two hours. Your handler may see the same event twice, so it should be safe to run twice.
Payout controls that protect an iGaming operator's balance
A withdrawal is the transaction an operator cannot undo, so the controls on that side matter more per transaction. EukaPay pays out in ETH, USDT, and USDC, with the asset and network set per payout, so different players in the same run can be paid differently.
Three mechanics matter here. The
payout balance is funded by transferring from your main account balance
, so the amount held on the payout side at any moment is an amount you moved there deliberately.
Each payout has its own reference
that can be looked up, which is what your finance team reconciles against. And the
Payout API creates one payout per request
, while a longer run is uploaded as a CSV file in the merchant dashboard.
Webhooks cover the payout lifecycle as well:
cryptoPayoutCreated,
cryptoPayoutSentwith the blockchain transaction hash,
cryptoPayoutError, and
cryptoPayoutRevokedfor a request canceled before it was sent. Payouts are not tied to banking hours or the banking calendar, so a weekend withdrawal queue does not have to wait for Monday. Our guide to
covers the withdrawal workflow in more detail.
Does accepting crypto reduce chargeback risk for an iGaming operator?
Card deposits can be disputed by the cardholder weeks after the play has settled, and that exposure is one of the recurring
operators raise. A crypto payment confirms on-chain, so protection against chargebacks is a property of the payment method. Adding stablecoin and crypto deposits alongside your existing methods can move part of that volume onto a payment method where the cardholder dispute does not exist.
One platform for deposits, payouts, and fiat settlement
EukaPay runs the deposit side, the payout side, and the fiat that settles to your bank on one account: instant crypto-to-fiat conversion at a locked exchange rate to remove your exposure to crypto price swings, support for most major cryptocurrencies, and settlement in USD, EUR, GBP, and CAD to your bank account. The locked rate applies by default on every conversion, on pay-ins and on payouts, with no per-payment setting to switch on. How the fiat side works is covered in our guide to
crypto merchant settlement for iGaming
.
For an operator, that means one set of keys, one webhook signature to verify, and one reference format your finance team reads on both sides. Start with the deposit events, get the signature check in place, then bring payouts onto the same account.
Get started with EukaPay
Create an account on the
, complete onboarding and business verification, provide your legal business information, then issue an API key. A test environment is available for development, so your developer (or coding agent) can build the deposit handler against
sk_test_keys. The event payloads, the signature check, and the payout endpoints are all in the
.
Frequently asked questions
How do you keep iGaming deposits secure?
Credit the player only after the payment is confirmed on-chain and reported complete. Verify the signature on every notification before acting on it, handle underpaid and overpaid amounts as their own cases, and keep secret API keys server-side.
How does an operator know a crypto deposit is real?
The transfer is confirmed on the network the player used. EukaPay marks the invoice complete when the sum of payments matches the requested amount, and sends a
paymentCompletedwebhook your platform can act on.
Can a crypto deposit be reversed after it is credited?
A crypto payment confirms on-chain, so protection against chargebacks is a property of the payment method. There is no cardholder dispute window to reopen the transaction weeks later.
How do you verify that a payment webhook came from EukaPay?
Compute an HMAC SHA-512 hex digest of the raw payload using your secret key, then compare it to the
x-eukapay-signatureheader. Reject the request if the two do not match.
What should an iGaming operator do if a player underpays a deposit?
Listen for the
paymentUnderpaidevent and route it to a defined path, such as crediting the amount actually received or asking the player to top up. Transaction tolerance settings in the dashboard control how close counts as paid.
Can you test an iGaming deposit flow before going live?
Yes. A test environment is available for development, and test keys are prefixed
sk_test_so a test request does not touch live funds.
Which cryptocurrencies can an iGaming platform accept and pay out?
Pay-ins cover most major cryptocurrencies like BTC, ETH, LTC, SOL, USDC, USDT. Payouts are sent in ETH, USDT, and USDC, with the asset and network set per payout.
Related articles
Crypto payment solutions built for iGaming platforms
- how deposits, payouts, and settlement fit together for an operator
Crypto deposits for iGaming at peak load
- what happens to the cashier when traffic spikes
- clearing the withdrawal queue without waiting on banking hours
Products
Use Cases
© 2026 EukaPay. All rights reserved.
FINTRAC: M22233887