How Flutterwave test cards work
Flutterwave test cards only work in test mode with your test API keys. Each card needs the expiry date and CVV listed next to it, and most also ask for PIN 3310 and OTP 12345. In test mode, transaction receipts go to your business email rather than to the customer.
Flutterwave decides how each card is authorized — by PIN, a 3D Secure redirect, address verification (AVS) or not at all — and your integration has to handle every model. That is why the success table has one card per model: check that your checkout asks for a PIN when the response requires one, follows the redirect for 3DS cards and collects a billing address for the AVS card.
When you run the checkout locally, open it on localhost:<port> (for example localhost:3000), not on an IP address such as 127.0.0.1:3000, or the modal shows errors. The special OTPs 5548 and 6648 only work in the payment modal; on the redirected OTP page, use a failed-payment card instead.
Failed payment test cards
Each card fails with the error shown after authorization.
| Brand | Number | Result | Expiry · CVV · PIN · OTP | Copy |
|---|---|---|---|---|
| Mastercard | 5143 0105 2233 9965 | Declined – do not honour | 08/32 · 276 · PIN 3310 · OTP 12345 | |
| Mastercard | 5590 1317 4329 4314 | Declined – card fraudulent | 11/32 · 887 · PIN 3310 · OTP 12345 | |
| Mastercard | 5258 5859 2266 6506 | Declined – insufficient funds | 09/31 · 883 · PIN 3310 · OTP 12345 | |
| Afrigo | 5640 0070 6527 5380 | Declined – insufficient funds | 05/31 · 044 | |
| Mastercard | 5399 8346 9789 4723 | Declined – incorrect PIN | 09/31 · 883 · PIN 3310 · OTP 12345 |
OTPs, bank accounts and mobile money
Flutterwave also documents test values for other payment methods:
| Value | Result |
|---|---|
| OTP 5548 | Simulates a wrong OTP (payment modal only) |
| OTP 6648 | Simulates insufficient funds (payment modal only) |
| Access Bank (044) 0690000031 – 0690000041 | Successful bank account payment, OTP 12345 |
| Access Bank (044) 0690000036 | Blacklisted account, returns a 400 error |
| Any mobile number, OTP 123456 | Successful mobile money payment |
| 233121212121 · 233010101011 | Failed mobile money payment (change the country code to match) |
| 121212121 | Failed Wave payment |
Testing Flutterwave payments step by step
- Switch your dashboard to test mode and copy the test public and secret keys.
- Pay with the PIN card
5531 8866 5214 2950(PIN 3310, OTP 12345) to test the PIN flow. - Pay with a 3DS card and check that the redirect brings the customer back to your callback URL.
- Run the failed-payment cards and confirm that your server checks the final transaction status before giving value.
- Test bank account and mobile money payments with the values in the last table.
Common errors and fixes
- Checkout errors on localhost
- Open the page on localhost:<port>, not on an IP address such as 127.0.0.1.
- OTP 5548 or 6648 has no effect
- They only work in the payment modal. On the redirected OTP page, use a failed-payment card.
- Test card fails in live mode
- Test cards only work with test keys in test mode.
Sources
Every number on this page was copied from Flutterwave’s official documentation and passes the Luhn check. Checked October 2026; gateways change their test data from time to time, so if a number stops working, check the source:
Frequently asked questions
What are the Flutterwave test card PIN and OTP?
PIN 3310 and OTP 12345 for most test cards, for example Mastercard 5531 8866 5214 2950 (expiry 09/32, CVV 564).
How do I test insufficient funds on Flutterwave?
Use Mastercard 5258 5859 2266 6506 (09/31, CVV 883), or enter OTP 6648 in the payment modal.
Does Flutterwave have test bank accounts?
Yes. Access Bank (044) accounts such as 0690000031 to 0690000034 succeed with OTP 12345. Flutterwave lists 0690000036 as a blacklisted account that returns a 400 error.
Can I use these test cards on another gateway?
Usually not. Each gateway only recognises its own documented test numbers in its own sandbox. Some numbers, such as 4111 1111 1111 1111, appear in several lists, but the results they trigger differ. For format-only testing on your own forms, use our card generator.