Skip to main content
The UQPAY sandbox environment lets you test the full card issuance lifecycle — from creating cardholders and issuing cards to simulating transactions and receiving webhooks — without processing real payments.

Sandbox base URL

https://api-sandbox.uqpaytech.com/api
All API endpoints use the same paths as production. Replace the base URL when switching environments.

Test the card issuance flow

In sandbox, you create real cardholders and cards just as you would in production. There are no special “test” card numbers — the cards you create are your test cards. A typical test flow:
1
Create a cardholder
2
Call Create Cardholder with test data. Use any valid email and phone number format.
3
Issue a card
4
Call Create Card with a sandbox-supported card product. See Quickstart for a complete walkthrough.
5
Simulate a transaction
6
Use the Simulate Authorization endpoint to trigger a transaction against your card.
7
Verify webhooks
8
Confirm that your webhook endpoint receives the expected events (e.g., issuing.transaction.authorization).

Simulate transactions

The simulator endpoints let you trigger authorization and reversal events on sandbox cards. These endpoints are available only in the sandbox environment.

Supported BINs

Only cards with the following BIN support simulation:
BINEnvironment
40963608Sandbox

Simulate authorization

Trigger an authorization transaction on a card.
curl -X POST https://api-sandbox.uqpaytech.com/api/v1/simulation/issuing/authorization \
  -H "x-auth-token: YOUR_API_TOKEN" \
  -H "x-idempotency-key: $(uuidgen | tr '[:upper:]' '[:lower:]')" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "50418faa-57a8-4ce2-9157-621b00b13a3b",
    "transaction_amount": 10.00,
    "transaction_currency": "USD",
    "merchant_name": "Test Merchant",
    "merchant_category_code": "5734"
  }'
FieldRequiredDescription
card_idYesThe card to transact against
transaction_amountYesAmount to authorize
transaction_currencyYesCurrency (e.g., USD, SGD)
merchant_nameYesMerchant name
merchant_category_codeYesMCC. Must be 5734 for simulation
The merchant_category_code must be 5734 for simulated transactions. Other MCC values are not supported in the simulator.
This triggers an issuing.transaction.authorization webhook:
{
  "version": "V1.6.0",
  "event_name": "ISSUING",
  "event_type": "issuing.transaction.authorization",
  "event_id": "234fca01-1ace-4d34-baf5-29b10e9d11c0",
  "source_id": "1a53aebf-900c-4e25-9852-b98f4338d94c",
  "data": {
    "authorization_code": "W6MJU9",
    "billing_amount": "11.5",
    "billing_currency": "USD",
    "card_available_balance": "988.5",
    "card_id": "50418faa-57a8-4ce2-9157-621b00b13a3b",
    "card_number": "40963608****1764",
    "cardholder_id": "25ea804d-7fd5-43d5-8792-0fc0214cdb2f",
    "description": "",
    "fee_pass_through": "Y",
    "merchant_data": [
      {
        "category_code": "5734",
        "city": "",
        "country": "",
        "name": "Test Merchant"
      }
    ],
    "original_transaction_id": "",
    "posted_time": "2026-04-12T15:27:39.563+08:00",
    "short_transaction_id": "T260412-2AHV51KO5U68",
    "transaction_amount": "10",
    "transaction_currency": "USD",
    "transaction_fee": "1.5",
    "transaction_fee_currency": "USD",
    "transaction_id": "1a53aebf-900c-4e25-9852-b98f4338d94c",
    "transaction_status": "APPROVED",
    "transaction_time": "2026-04-12T15:27:39.48+08:00",
    "transaction_type": "AUTHORIZATION",
    "wallet_type": ""
  }
}

Simulate reversal

Reverse an existing approved authorization using its transaction_id.
curl -X POST https://api-sandbox.uqpaytech.com/api/v1/simulation/issuing/reversal \
  -H "x-auth-token: YOUR_API_TOKEN" \
  -H "x-idempotency-key: $(uuidgen | tr '[:upper:]' '[:lower:]')" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "1a53aebf-900c-4e25-9852-b98f4338d94c"
  }'
This triggers an issuing.transaction.reversal webhook:
{
  "version": "V1.6.0",
  "event_name": "ISSUING",
  "event_type": "issuing.transaction.reversal",
  "event_id": "255d66c0-ddf6-479a-a0b1-923e23664648",
  "source_id": "5353d200-88de-49b2-b575-d4bdd3d7be30",
  "data": {
    "authorization_code": "5PHF2P",
    "billing_amount": "11.5",
    "billing_currency": "USD",
    "card_available_balance": "1000",
    "card_id": "50418faa-57a8-4ce2-9157-621b00b13a3b",
    "card_number": "40963608****1764",
    "cardholder_id": "25ea804d-7fd5-43d5-8792-0fc0214cdb2f",
    "description": "",
    "fee_pass_through": "Y",
    "merchant_data": [
      {
        "category_code": "5734",
        "city": "",
        "country": "",
        "name": "Test Merchant"
      }
    ],
    "original_transaction_id": "1a53aebf-900c-4e25-9852-b98f4338d94c",
    "posted_time": "2026-04-12T15:27:40.905+08:00",
    "short_transaction_id": "T260412-2AHV54BIN6RK",
    "transaction_amount": "10",
    "transaction_currency": "USD",
    "transaction_fee": "1.5",
    "transaction_fee_currency": "USD",
    "transaction_id": "5353d200-88de-49b2-b575-d4bdd3d7be30",
    "transaction_status": "APPROVED",
    "transaction_time": "2026-04-12T15:27:40.905+08:00",
    "transaction_type": "REVERSAL",
    "wallet_type": ""
  }
}

Webhook testing

Subscribe to webhook events in the Dashboard to receive real-time notifications during testing. See the Webhooks section for the full list of available events and their payload formats.
Use a tool like webhook.site during development to inspect webhook payloads before building your production webhook handler.