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).
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#
- 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.
- 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 explains why.
- Your site is served over HTTPS and can receive
POSTrequests 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. 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.
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#
- Create a private $1.00 product.
- In a private browser window, buy it and choose Caravel Pay. You are sent to the hosted checkout.
- 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.
- Back in WooCommerce, the order moves to Processing when the
checkout.paidwebhook arrives. Its order note shows the payout amount and the Polygon transaction hash. - 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#
- Disable the PayGate payment method (untick Enable in its settings), so new orders can only use Caravel Pay.
- Keep the PayGate plugin active until orders already started with PayGate have settled. Its callbacks for those orders still need somewhere to land.
- 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
POSTinstead of aGET.
| Step | PayGate.to | Caravel Pay |
|---|---|---|
| Set up | None; the wallet goes in each request | Once: POST /v1/connect 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 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 (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.
{
"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 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#
- PayGate.to card API docs (wallet.php, process-payment.php, callback signing, payment-status.php), checked 2026-11-09.
- PayGate.to WooCommerce guide, checked 2026-11-09.
- Caravel Pay docs: WooCommerce plugin, Get your API keys, Checkouts, Webhooks.