> ## Documentation Index
> Fetch the complete documentation index at: https://waffo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Sandbox and testing

> Complete full integration testing in the sandbox environment without real funds.

## Environment information

| Environment | Base URL                        | Description                                    |
| ----------- | ------------------------------- | ---------------------------------------------- |
| Sandbox     | `https://api-sandbox.waffo.com` | Test environment; no real charges will be made |
| Production  | `https://api.waffo.com`         | Production environment                         |

The SDK switches via `Environment.SANDBOX` / `Environment.PRODUCTION`; there is no need to manually modify the URL.

## Test card numbers

### Credit Card

#### CC\_VISA

| Card number        | Result           |
| ------------------ | ---------------- |
| `4576750000000110` | Payment succeeds |
| `4576750000000220` | Payment fails    |

#### CC\_MASTERCARD

| Card number        | Result           |
| ------------------ | ---------------- |
| `2226900000000110` | Payment succeeds |
| `2226900000000220` | Payment fails    |

#### CC\_JCB

| Card number        | Result           |
| ------------------ | ---------------- |
| `3528000000000214` | Payment succeeds |
| `3528000000120006` | Payment fails    |

#### CC\_AMEX

| Card number        | Result           |
| ------------------ | ---------------- |
| `3400000000000216` | Payment succeeds |
| `340000000200027`  | Payment fails    |

### Debit Card

#### DC\_VISA

| Card number        | Result           |
| ------------------ | ---------------- |
| `4001700000000110` | Payment succeeds |
| `4001700000000220` | Payment fails    |

#### DC\_MASTERCARD

| Card number        | Result           |
| ------------------ | ---------------- |
| `2226930000000110` | Payment succeeds |
| `2226930000000220` | Payment fails    |

#### DC\_JCB

| Card number        | Result           |
| ------------------ | ---------------- |
| `3088850000000116` | Payment succeeds |
| `3088850000200004` | Payment fails    |

#### DC\_AMEX

| Card number       | Result           |
| ----------------- | ---------------- |
| `340034000100009` | Payment succeeds |
| `340034000400003` | Payment fails    |

### General card information

<Note>
  <div className="flex flex-col gap-2">
    <p className="m-0">Expiration date: any future date</p>
    <p className="m-0">CVV: any 3 digits (AMEX uses 4 digits)</p>
  </div>
</Note>

## Sandbox simulator

The sandbox does not connect to real payment channels. Use the simulator to control payment outcomes directly:

* **One-time payment**: After creating an order, open the checkout page. The page provides "Payment Success" and "Payment Failed" buttons — click either to trigger the corresponding result and Webhook.
* **Subscription first payment**: Same as one-time payment; operate on the checkout page.
* **Subscription renewal simulation**: Call `POST /api/v1/subscription/manage` to get the management page URL → open the management page → the page provides "Simulate Next Payment Success" and "Simulate Next Payment Failed" buttons; each click simulates one renewal cycle.

Example subscription renewal management page:

<Frame>
  <img src="https://mintcdn.com/waffo-docs/rmCSHSqVvv7UyIAx/images/developer-docs/sandbox-simulator/subscription-renewal-simulator.png?fit=max&auto=format&n=rmCSHSqVvv7UyIAx&q=85&s=a488ab3312d460a3c15fecd695d2dae8" alt="Subscription renewal simulator management page example" width="599" height="1065" data-path="images/developer-docs/sandbox-simulator/subscription-renewal-simulator.png" />
</Frame>

## Payment method testing methods

Some payment methods require dedicated checks in addition to regular sandbox payment testing.

### Octopus testing

If you need to complete QR code payment testing with the Octopus test app, see [Octopus sandbox test payment](/en/developer-docs/tools-and-references/developer-tools/octopus-sandbox-e2e).

### Google Pay testing

If your integration needs Google Pay on Checkout or your own frontend, complete these checks.

1. Sign in with a Google Pay test account.
2. Add the account to the [Google Pay test mode stub data group](https://groups.google.com/g/googlepay-test-mode-stub-data).
3. Confirm that the target country or region is in the [Google Pay supported countries list](https://support.google.com/googlepay/answer/12429287?hl=en-GB#zippy=).
4. If you load the payment page inside an Android App WebView, apply the [Google Pay Android WebView configuration](https://developers.google.com/pay/api/android/guides/recipes/using-android-webview#groovy).
5. Before production launch, Android Apps must request Google Pay API access through the [Google Pay publish guide](https://developers.google.com/pay/api/android/guides/test-and-deploy/publish-your-integration).
6. If production access is not approved, users may see `OR_BIBED_11` or a similar error.

When applying for production access, select Gateway as the gateway type. After submitting the materials, provide the Google account merchant MID and app name to the Waffo technical support group if you need Waffo to help accelerate review.

### Apple Pay testing

If your integration needs Apple Pay on Checkout or your own frontend, complete these checks.

1. We recommend testing with the merchant's own Apple Pay account.
2. The test account must have a valid Visa, Mastercard, or Amex card.
3. UnionPay cards are not supported for Apple Pay testing.
4. If you see `Service unavailable`, check the device or account region settings.
5. Web testing may require a global proxy. Mobile payment-link testing can usually work with partial proxy coverage when the Apple Pay sheet is launched from the link.
6. Before launch, confirm that the target country or region is in the [Apple Pay supported countries list](https://support.apple.com/en-gb/102775).

## Testing Webhooks

The sandbox environment supports Webhook callbacks. Make sure your `notifyUrl` is publicly accessible. For local development, it is recommended to use an intranet tunneling tool (such as ngrok or cloudflared).

<Warning>
  Sandbox and production use different API Keys and RSA keys. Octopus, Apple Pay, and Google Pay also require separate checks for app, account, country, WebView, or production permission requirements.
</Warning>
