Test mode
Everything a live payment does, with simulated money. Pay test checkouts from the page or from code, short and over included.
A vk_test_… key works in test mode from the moment you sign up. Test mode runs every
step a live payment does (the checkout, the statuses, the webhooks and your balance)
with a simulated custodian in place of real money. No coin moves and no payer is
emailed.
Test and live are separate: a test invoice, checkout, webhook endpoint or balance does not exist in live mode. Your test webhook endpoint receives only test events, signed with its own secret.
Paying a test checkout
Open the checkout's url and choose where to pay from and a coin, as a payer would.
A test checkout shows a Test mode panel under the address:
| Button | What arrives |
|---|---|
| Send the exact amount | What is still due. Once nothing is due, the whole amount again, as a payer who pays twice. |
| Send too little | A tenth less than is due: the checkout becomes underpaid. |
| Send too much | A tenth more: the checkout is overpaid, and both invoice.paid and invoice.overpaid are sent. |
The payment is seen at once and accepted about ten seconds later, so you see the Payment on its way screen and then the receipt. A Lightning checkout offers Pay the invoice only, since a Lightning invoice is paid exactly or not at all.
From code, the same thing is
POST /v1/test_helpers/checkout_sessions/{id}/pay
with { "outcome": "exact" }, "short" or "over". It works once the payer has chosen
a coin; before that it is 409 no_payment_method.
What to try before going live
- Paid. Send the exact amount. Your endpoint gets
checkout.payment_detected,payment.confirmedandinvoice.paid. - Short, then topped up. Send too little, then the exact amount:
invoice.underpaidfirst, theninvoice.paid. - Over. Send too much:
invoice.paidandinvoice.overpaid. - Paid twice. Send the exact amount twice. The second is an overpayment.
- Expired. Open a checkout, pick a coin, and wait 30 minutes:
invoice.expired. - Your endpoint down. Answer
500for a while, then200. Volume retries, and the dashboard's Developers page shows each attempt. - A forged event. POST a body to your endpoint with a made-up signature. Your handler must refuse it.
What test mode does not do
- It does not touch a real chain or a real exchange. Addresses on a test checkout are not for real coins: never send any to them.
- It does not email payers.
- It does not pay anything out to a bank account. Test payouts are simulated too.