Test mode
Build and test your integration with test keys and test cards. Nothing is charged and no money moves.
Test mode mirrors live mode with fake money. A test key (lp_test_sk_…) creates test checkout sessions, the hosted
page shows a Test mode banner, and paid sessions show up in the dashboard's test view. Test and live data never
mix: a test key can't read live sessions, and the other way round.
Test cards
Use any future expiry date, any 3 or 4 digit CVC, and any name and email.
| Card number | Result |
|---|---|
4242 4242 4242 4242 | The payment succeeds and the session becomes complete. |
4000 0025 0000 3155 | The bank asks for 3-D Secure. Complete the check to pay, or fail it to see the session stay open. |
4000 0000 0000 0002 | The card is declined. The session stays open, so the customer can try again. |
4000 0000 0000 9995 | Declined for insufficient funds. The session stays open. |
Real card numbers never work in test mode: they're refused with a reminder to use a test card. Apple Pay and Google Pay work on test checkouts too, with a card from your wallet, and nothing is charged.
Test crypto payments
Test checkouts take Bitcoin on testnet4, Litecoin on testnet, Ethereum on Sepolia and Solana on devnet: coins with no
value, from a public faucet. Choose Crypto on the hosted page, pick a coin, and send the exact amount shown to the
address shown. The page follows the payment as it happens: seen, then confirming (2 confirmations for Bitcoin and
Ethereum, 3 for Litecoin, finalized for Solana), then complete, and the customer lands on your return_url. That
takes about 20 minutes for Bitcoin, 8 for Litecoin and under a minute for Ethereum and Solana.
The customer can close the page once they've sent the coins; Lollipay keeps watching and completes the session on
its own. Bitcoin and Litecoin test addresses start with tb1 or tltc1, which wallets on the real networks refuse.
For Ethereum and Solana, keep the wallet on Sepolia or devnet: those addresses look the same on every network.
Test skins payments
If the store has Skins switched on, test checkouts take skins without a real Steam trade. Choose Skins, pick a
game and paste any Trade URL of the right shape (https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEf12).
The page shows a sample inventory. Choose items that cover the order and send the trade offer, then play both sides
with the test buttons: Accept the trade puts it on hold as Steam would, End the hold now completes the session,
and Decline it leaves the session open so you can try again.
What to test
- The happy path. Pay with
4242…, land on yourreturn_url, retrieve the session and checkstatusiscompletebefore fulfilling. - Declines. Pay with
…0002and…9995first, then4242…, to see that a customer can recover on the same session. - 3-D Secure. Pay with
…3155and complete the bank's check; the customer lands on yourreturn_urlas usual. - Abandoned checkouts. Sessions expire 1 hour after creation (
expires_at). An expired session can't be paid; create a new one. - Your error handling. Send a bad request on purpose, like an
amountthat doesn't match the items, and check your code readserror.code. See Errors.
Going live
Live keys unlock once your business is approved. Then create a live key with the same permissions
and swap it in; the API, the requests and the responses are the same, with livemode: true.