> For the complete documentation index, see [llms.txt](https://ivorypay.gitbook.io/ivorypay-on-off-ramp-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ivorypay.gitbook.io/ivorypay-on-off-ramp-documentation/getting-started/environments.md).

# Environments

Understand test and live environments in IvoryPay.

IvoryPay provides two fully isolated environments so you can develop and test your integration without risking real funds.

## TEST environment

* Use your **test API key** (prefixed with `sk_test_`)
* No real money is moved — transactions are simulated
* Virtual accounts and bank transfers are mocked
* Webhooks are still delivered to your configured URL
* Use this environment during development and QA

### Completing transactions in TEST mode

How you complete a test transaction depends on **which way the money flows** — and the two methods are not interchangeable:

| Flow         | What the customer pays          | How you complete it in TEST                         | Tool                                         |
| ------------ | ------------------------------- | --------------------------------------------------- | -------------------------------------------- |
| **On-ramp**  | **Fiat** in (→ receives crypto) | **Simulate** the fiat payment via an API call       | `simulate-payment` endpoint                  |
| **Off-ramp** | **Crypto** in (→ receives fiat) | **Send real testnet crypto** to the deposit address | [Faucet](https://www.ivorypay.io/get-tokens) |

> Rule of thumb: **fiat → simulate endpoint**, **crypto → faucet**. There is no endpoint that "simulates" a crypto deposit — an off-ramp only advances when a real on-chain deposit is detected.

#### On-ramp: simulate the fiat payment

The customer's leg is a fiat payment, which has no real bank transfer in test mode, so you simulate it:

```bash
# Simulate a fiat payment for an ON-RAMP transaction
curl -X POST https://ramp-api.ivorypay.io/api/v1/transactions/simulate-payment \
  -H "Authorization: sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "reference": "your-onramp-transaction-reference-uuid" }'
```

This triggers the same webhook events as a real fiat payment, letting you test your full integration flow.

{% hint style="warning" %}
`simulate-payment` is **on-ramp only**. Off-ramps never create a fiat payment request, so calling it with an off-ramp reference returns `Payment request not found`. For off-ramps, use the faucet below instead.
{% endhint %}

#### Off-ramp: fund with test crypto from the faucet

The customer's leg is a **crypto deposit**, so there's nothing to simulate via an API call — you send real test-network crypto to the deposit `walletAddress` returned when you initiate the off-ramp. Get free testnet/devnet tokens from the IvoryPay faucet:

{% embed url="<https://www.ivorypay.io/get-tokens>" %}
Get test crypto to fund off-ramp (and other crypto-deposit) test flows
{% endembed %}

Once the test crypto lands at the deposit address, IvoryPay detects it on-chain and fires the same `offramp.cryptoPaymentReceived` → `offramp.success` webhooks as a live transaction.

## LIVE environment

* Use your **live API key** (prefixed with `sk_live_`)
* Real fiat and crypto are transferred
* Bank account verification, KYC, and compliance checks are enforced
* Ensure your integration is fully tested before switching to live

## Switching environments

Simply swap the API key in your request headers. The base URL remains the same for both environments:

```
https://ramp-api.ivorypay.io/api/v1
```

{% hint style="info" %}
Test and live data are completely isolated. Customers, transactions, and virtual accounts created in test mode are not visible in live mode and vice versa.
{% endhint %}

## Environment comparison

| Feature                 | TEST         | LIVE                                    |
| ----------------------- | ------------ | --------------------------------------- |
| Real money transfers    | No           | Yes                                     |
| Webhook delivery        | Yes          | Yes                                     |
| Bank account resolution | Simulated    | Real verification                       |
| Virtual accounts        | Simulated    | Real bank accounts                      |
| Crypto payouts          | Simulated    | On-chain transactions                   |
| Payment simulation      | Available    | Endpoint exists; intended for TEST mode |
| Rate limits             | Same as live | Production limits                       |
