T

TestnetPay

The payment lab — test funds & cards to verify your app
TESTNET · LIVE
Not signed in
Start testing in one minute

Create your lab account

You start with 10,000 test funds, transferable to any other user.

Returning builder

Sign in

Built for the wave of new payment apps: charge, transfer, refund, decline and webhook flows — verified before real customers and real money are on the line.

Test reserve
Available balance
— TUSD
Settles instantly. Transferable to any TestnetPay user. Tops up free from the faucet.
0
Test cards
0
Projects
0
Charges run
—
Charge success rate
Max 2,500 per tap · 10,000 a day
Payment lab intelligence

How verified is your app?

0%COVERAGE
Live score from your own test activity — the scenarios a payment app must survive before launch.
    Run your first scenario to get a recommendation.

    Send test funds

    To any user of this app — a teammate, a tester, a seller in your marketplace test.

    Generate a test card

    Draws on your wallet balance, so declines happen for real reasons.

    Try a test charge

    A customer paying one of your projects with a test card — settlement lands in the project owner's wallet.

    Your instruments

    Test cards

    No cards yet — generate one above and it appears here, ready to spend.

    Verify your payment app

    Create a project

    Register the app or site you're verifying and get its test keys.

    Merchant side

    Charges to your projects

    None yet.
    Ledger

    Wallet activity

    Nothing yet.
    Developer integration

    Wire TestnetPay into your app

    Add test mode, verify the full payment loop, then swap to live keys with your real provider later. Successful charges settle into your TestnetPay wallet — spend or transfer the test funds onward.

    curl -X POST https://testnetpay.adascannerpro.com/v1/charges \
      -H "Authorization: Bearer tp_test_sec_YOUR_SECRET" \
      -H "Content-Type: application/json" \
      -d '{
        "card_number": "539983........",
        "expiry": "MM/YY", "cvv": "123", "pin": "1234",
        "amount": 49.99, "currency": "USD",
        "reference": "order-1001",
        "customer_email": "buyer@example.com"
      }'
    
    201 successful · 402 with decline_code:
    insufficient_funds · card_frozen · expired_card
    invalid_cvv · incorrect_pin · limit_exceeded
    Refund:  POST /v1/charges/{id}/refund
    Balance: GET  /v1/balance
    
    USE IT IN ANY PRODUCT — three ways:
    1) Hosted checkout (no code): send buyers to
       /pay/{project_id}?amount=49.99&reference=order-1
       They pay with any TestnetPay card; we settle and
       return them to your project's success URL.
    2) API charge (above) from your server, test keys only.
    3) Provider emulation: set the project's provider to
       Flutterwave, Paystack or Stripe and webhooks arrive
       in that provider's exact payload shape, signed the
       way that provider signs (verif-hash / HMAC-SHA512 /
       stripe-signature) — your existing webhook handler
       verifies test events with only its keys swapped.

    TestnetPay is a testing instrument. No real money moves here, and nothing here is a financial service.
    Real-funds support, when it comes, will be built on a licensed card issuer — never on this test ledger.