# How to switch from PayGate to Caravel Pay without downtime

Source: https://caravelpay.app/guides/switch-from-paygate/ · Caravel Pay guides · By the Caravel Pay team · Published 2026-11-09

Move a WooCommerce store or an API integration from PayGate.to to Caravel Pay: import your settings, run both side by side, test, then switch over safely.

You can move from PayGate.to to Caravel Pay without a gap in payments. Install the Caravel Pay plugin next to the PayGate plugin, import your settings, place a test order, and only then switch PayGate off. On WooCommerce the whole move takes about 15 minutes plus a test payment. API integrations take a little longer, mostly to swap the callback handler for a signed webhook.

Why switch? Mostly the fee: our estimate of PayGate's average take, from public blockchain data, is about 3.5% of payment value, versus the 2% Caravel fee ([how we estimated it](https://caravelpay.app/guides/paygate-to-review/#estimate)).

> Caravel Pay is not affiliated with PayGate.to; the names are trademarks of their owners. PayGate details here are from its public pages, checked on 9 November 2026.

## Before you start: three checks

1. **Your store prices in US dollars.** Caravel Pay checkouts are USD-only for now. Check under *WooCommerce › Settings › General*. If your store uses another currency, stay on your current setup for now.
2. **Your payout wallet is an ordinary Polygon address you control,** such as MetaMask, Rabby or a hardware wallet. Smart-contract wallets and token addresses can't receive payouts. If your PayGate wallet is an exchange deposit address, check that the exchange accepts USDC, USDC.e and POL on the Polygon network at that address. Our [payout wallet guide](https://caravelpay.app/guides/usdc-polygon-payout-wallet/) explains why.
3. **Your site is served over HTTPS** and can receive `POST` requests from outside. Caravel Pay confirms orders with signed webhooks.

## Switching a WooCommerce store

### 1. Install Caravel Pay next to PayGate

Download `caravel-pay-woocommerce.zip` from the [WooCommerce plugin docs](https://caravelpay.app/docs/woocommerce.html#install). In WordPress, go to *Plugins › Add New Plugin › Upload Plugin*, upload the zip and click *Activate Plugin*. Leave the PayGate plugin installed and active for now.

### 2. Import your PayGate settings

Open *WooCommerce › Settings › Payments › Caravel Pay*. Because the PayGate plugin is installed, the page shows an **Import from PayGate plugin** section:

- **Import title, description and icon** copies the text and icon your buyers already know from your PayGate checkout.
- **Use this wallet** appears next to the payout wallet saved in PayGate and fills it into Caravel Pay's *Payout wallet* field. It is never copied silently: check the address, then save.

The import only reads PayGate's settings and never changes them.

### 3. Save, and check that it says Connected

Turn on **Enable** and click *Save changes*. Saving connects your store: the plugin gets its API keys from Caravel Pay and stores them on your server, so there's nothing to copy. The status line should say **Connected**. If it says *Not connected*, the reason is shown under it; see [troubleshooting](https://caravelpay.app/docs/woocommerce.html#not-connected).

### 4. Run both gateways side by side

Both methods now show at checkout. Under *WooCommerce › Settings › Payments* you can drag them into the order you want. You could put the new method second for a day, then move it first.

Caravel Pay's default title is *Card, Apple Pay or Google Pay*. If you imported PayGate's title and both methods now look the same, rename one for the test period so you can tell them apart.

### 5. Place a test order

1. Create a private $1.00 product.
2. In a private browser window, buy it and choose Caravel Pay. You are sent to the hosted checkout.
3. Pay by card, Apple Pay or Google Pay. The card provider shows its fee before you confirm, and may ask you to verify your identity, usually only the first time.
4. Back in WooCommerce, the order moves to *Processing* when the `checkout.paid` webhook arrives. Its order note shows the payout amount and the Polygon transaction hash.
5. Check your wallet: 98% of the order arrives as USDC on Polygon.

If the order stays on *Pending payment*, a firewall, security plugin or page cache is probably blocking `/wp-json/caravel-pay/v1/webhook`. You don't need to edit any plugin file. Allow that URL instead; webhooks are retried for 24 hours, so the order updates once the block is lifted.

### 6. Switch PayGate off, in the right order

1. **Disable the PayGate payment method** (untick Enable in its settings), so new orders can only use Caravel Pay.
2. **Keep the PayGate plugin active** until orders already started with PayGate have settled. Its callbacks for those orders still need somewhere to land.
3. **Then deactivate PayGate.** Wait at least a day after the last PayGate order to be safe.

### How your orders behave afterwards

| Caravel Pay status | WooCommerce order |
|---|---|
| `paid` | Processing, or Completed for virtual and downloadable orders, with the payout and transaction hash in a note |
| `underpaid` | On hold, with a note showing how much arrived |
| `review` | On hold, with a note |
| `expired` | Cancelled, if still on Pending payment (checkouts expire after 60 minutes) |

There's no tolerance setting to tune. The amount is fixed when the checkout is created, so a short payment is never quietly accepted as paid: it is flagged `underpaid` and the order goes on hold for you to decide.

## Switching an API integration

The models are similar, so most of the work is in the callback handler. The main differences:

- **Keys.** Caravel Pay identifies you by a merchant id and secret, not by a wallet in the URL.
- **The amount.** It goes in a signed request body instead of a URL parameter.
- **Notifications.** They arrive as a signed `POST` instead of a `GET`.

| Step | PayGate.to | Caravel Pay |
|---|---|---|
| Set up | None; the wallet goes in each request | Once: [`POST /v1/connect`](https://caravelpay.app/docs/connect.html) with `site_url` and `payout_address` returns `merchant_id` and `secret` |
| Per order | `GET /control/wallet.php` with your wallet and a unique callback URL | [`POST /v1/checkouts`](https://caravelpay.app/docs/checkouts.html) with `order_id`, `amount`, `currency` and your URLs, signed with HMAC-SHA256 |
| Send the buyer | Build a `pay.php` or `process-payment.php` URL with the amount | Redirect to the returned `checkout_url` |
| Get notified | `GET` to your callback with an RSA signature (verification optional) | [Signed `POST` webhook](https://caravelpay.app/docs/webhooks.html) (`checkout.paid`, `.underpaid`, `.expired`, `.review`), retried for 24 hours |
| Check status | `payment-status.php` with `ipn_token` | `GET /v1/checkouts/{id}`, or list with `GET /v1/checkouts` |

A safe order of work: add the webhook handler first, then create checkouts for a share of orders (for example, one payment button), then move everything. `order_id` is unique per merchant, so if a request times out you can retry it and get the same checkout back.

*POST /v1/checkouts → 201 Created*

```json
{
  "id": "chk_8Qe2TnV4kR",
  "checkout_url": "https://pay.caravelpay.app/c/chk_8Qe2TnV4kR",
  "status": "awaiting_payment",
  "amount": "136.41",
  "currency": "USD",
  "expires_at": "2026-11-09T15:04:12Z"
}
```

The [quickstart](https://caravelpay.app/docs/) has complete signing and webhook examples in curl, Node.js, PHP and Python.

## What changes for your buyers

- **Methods.** They pay by card, Apple Pay or Google Pay on one hosted page. The card provider's fee is added on top and shown before they confirm.
- **Return to your store.** They come back to your order-received page after paying, or to your checkout if they cancel.
- **What the checkout shows.** Caravel Pay, the amount and the ways to pay, but not your store name or logo.

## Frequently asked questions

### Can I use my PayGate wallet with Caravel Pay?

Yes, if it's an ordinary Polygon address you control. The import shows it with a *Use this wallet* button. Card payments arrive there as USDC.

### Will switching break orders that are already open?

No, as long as you keep the PayGate plugin active until those orders settle. Disabling PayGate's payment method only stops new PayGate orders.

### Does the import change my PayGate settings?

No. It only reads them.

### Do I need to remove nonce checks or edit plugin files?

No. Caravel Pay webhooks are verified by their signature. If one is blocked, allow `/wp-json/caravel-pay/v1/webhook` in your firewall or cache.

### How much will I receive per order after switching?

The order total minus the 2% Caravel fee, as USDC. A $100 order pays out 98.00 USDC; the buyer pays $100 plus their card provider's fee.

## Sources

1. [PayGate.to card API docs](https://paygate.to/docs/payment-gateway-api/) (wallet.php, process-payment.php, callback signing, payment-status.php), checked 2026-11-09.
2. [PayGate.to WooCommerce guide](https://paygate.to/instant-payment-gateway/woocommerce/), checked 2026-11-09.
3. Caravel Pay docs: [WooCommerce plugin](https://caravelpay.app/docs/woocommerce.html), [Get your API keys](https://caravelpay.app/docs/connect.html), [Checkouts](https://caravelpay.app/docs/checkouts.html), [Webhooks](https://caravelpay.app/docs/webhooks.html).
