Connect Wallets on Testnet
Register at `/merchant/register`, configure your EVM, TRON, and Solana addresses, and generate a `sk_test_...` key.
Switching away from processor-held balances, 1%β1.5% fees, or deprecated hosted commerce APIs does not require rewriting your order database. Map 4 JSON fields, verify raw-body HMAC-SHA256 webhooks on Testnet, and route 99.5% straight to your own wallets.
Replace sorted-key `x-nowpayments-sig` callbacks and custodial payout queues with raw-body `X-XPayr-Signature` verification and instant merchant-wallet settlement.
| Concept | NOWPayments | XPayr Equivalent |
|---|---|---|
| Create Session | POST /v1/invoice (x-api-key) | POST /api/v1/payments (Authorization: Bearer sk_live_...) |
| Amount & Order Ref | price_amount, price_currency, order_id | amount, currency, order_id, metadata |
| Webhook Signature | x-nowpayments-sig (HMAC-SHA512 sorted JSON) | X-XPayr-Signature (HMAC-SHA256 over raw body β zero JSON key-sort bugs) |
| Fulfillment States | finished / partially_paid | payment.completed / payment.underpaid_accepted (1% tolerance) |
// Drop-in Node.js Express webhook adapter (XPayr raw-body HMAC-SHA256)
import crypto from 'node:crypto';
export function verifyXpayrWebhook(rawBodyBuffer, signatureHeader, webhookSecret) {
const expected = crypto.createHmac('sha256', webhookSecret).update(rawBodyBuffer).digest('hex');
const provided = String(signatureHeader || '').replace(/^sha256=/i, '');
if (expected.length !== provided.length) return false;
return crypto.timingSafeEqual(Buffer.from(expected, 'utf8'), Buffer.from(provided, 'utf8'));
}
Restore TRON TRC-20 USDT, Exchange QR transfers, and global merchant availability while keeping familiar `metadata` and `hosted_url` semantics.
| Concept | Coinbase Commerce | XPayr Equivalent |
|---|---|---|
| Create Checkout | POST /charges (X-CC-Api-Key) | POST /api/v1/payments (Authorization: Bearer sk_live_...) |
| Pricing Type | local_price.amount + pricing_type: fixed_price | amount + currency: "USD" |
| Hosted Redirect | data.hosted_url | data.checkout_url (supports Modal SDK or full redirect) |
| Webhook Event | charge:confirmed / charge:resolved | payment.completed / payment.underpaid_accepted |
// Replace Coinbase Charge creation with @xpayr/node-sdk (v0.2.0)
import { XPayrClient } from '@xpayr/node-sdk';
const xpayr = new XPayrClient({ apiKey: process.env.XPAYR_SECRET_KEY });
const session = await xpayr.payments.create({
amount: '49.00',
currency: 'USD',
order_id: 'ord_90812',
success_url: 'https://app.example.com/billing/success',
metadata: { workspace_id: 'ws_441', plan: 'pro_annual' }
});
Cut gateway fees by 50%β75% and eliminate T+2 custodial bank settlement batches by receiving native USDT/USDC straight into your own multisig or hardware wallet.
| Concept | BitPay / CoinGate | XPayr Equivalent |
|---|---|---|
| Checkout Fee | 1.0%β2.0% + settlement/FX rules | Flat 0.5% (50 bps), $0 monthly, $0 rolling reserve |
| E-Commerce Plugins | Legacy custodial cart modules | 6 open-source v1.0.0 plugins at /integrations |
| Callback Verification | Unauthenticated token or fetch-back required | Cryptographic X-XPayr-Signature + @xpayr/payment-evidence |
| Treasury Output | Held in processor balance until payout | Immediate 99.5% on-chain transfer to your wallet |
# Verify live XPayr session creation in 5 seconds via cURL:
curl -sS -X POST https://xpayr.com/api/v1/payments \
-H "Authorization: Bearer sk_test_your_key" \
-H "Content-Type: application/json" \
-d '{"amount":"100.00","currency":"USD","order_id":"mig_test_01","network":"tron","token":"USDT"}'
Keep Stripe for domestic cards if you like, and add XPayr as your global Pay with Crypto (0.5%) button to unlock TRON TRC-20 USDT, Solana, and native stablecoin retention in 180+ markets.
| Dimension | Stripe Pay with Crypto | XPayr Parallel Crypto Rail |
|---|---|---|
| Stablecoin Fee | 1.5% per transaction | Flat 0.5% (save 66% on every crypto order) |
| TRON TRC-20 & Exchange QR | Unsupported | Full TRON TRC-20 USDT + Exchange QR support |
| Treasury Asset | Auto-converted to fiat bank balance | Retain native USDC/USDT in your own treasury wallet |
| AI & MCP Automation | Fiat-centric agent tools | 21-tool MCP server (/api/mcp) + HTTP 402 paywalls (/x402) |
<!-- Embed alongside Stripe Checkout on any pricing or cart page -->
<script src="https://xpayr.com/public/sdk/xpayr-pay-button.js" defer></script>
<div data-xpayr-pay-button
data-amount="99.00"
data-currency="USD"
data-label="Pay with USDT / USDC (Save FX Fees)"></div>
Register at `/merchant/register`, configure your EVM, TRON, and Solana addresses, and generate a `sk_test_...` key.
Simulate `payment.completed` and `payment.underpaid_accepted` signatures in `/tools/webhook-tester` before deploying.
Expose XPayr alongside your legacy button or plugin so real customers settle 99.5% straight into your wallet.
Export QuickBooks/Xero/NetSuite CSV ledgers (`/accounting`) and retire high-fee custodial balances permanently.
Yes. Because XPayr charges $0 monthly fees and requires no exclusivity lock-in, most engineering teams deploy XPayr on Testnet first, then route 10%β25% of live crypto checkout traffic to XPayr while verifying webhook parity and 99.5% direct wallet settlement.
NOWPayments sends x-nowpayments-sig (sorted JSON HMAC-SHA512) with statuses such as finished and partially_paid. XPayr sends X-XPayr-Signature (raw-body HMAC-SHA256 with timestamp replay protection) with deterministic events: payment.completed, payment.underpaid_accepted, payment.failed, and license.issued.
Install the official open-source XPayr plugin alongside your existing gateway plugin (/integrations), paste your Testnet API key to verify order state transitions, and switch the active checkout method in one click.
No. Simply withdraw any remaining balance from your legacy custodial processor on your own schedule; every new XPayr payment settles 99.5% directly into your own wallet immediately upon confirmation.