Connect non-custodial wallets & generate sk_test_ API keys
Register at /merchant/register, paste your destination EVM, Solana, TRON, or multisig wallet addresses, and generate a free API тестовой сети key.
Keep 100% self-custody of your keys while retiring $150+/month multi-chain full nodes, pruned disk alerts, broken altcoin plugins, and manual upgrades. Unlock 12 chains (Solana, Base, Arbitrum, TRON, TON, BTC, Arc) Instantly at 0.5%.
Keep your existing database order schema intact — map these 6 fields to cut over cleanly.
| Integration Layer | Сервер BTCPay (Legacy) | XPayr Non-Custodial v1 |
|---|---|---|
| Create Invoice (Greenfield) | POST /api/v1/stores/{storeId}/invoices (token ...) |
POST https://xpayr.com/api/v1/payments (Bearer sk_live_...) |
| Amount & Currency | amount + currency + metadata.orderId |
amount + currency + order_id + metadata |
| Redirect URL | checkout.redirectURL -> checkoutLink |
success_url -> data.checkout_url |
| Webhook Header | BTCPay-Sig: sha256=<hex> |
X-XPayr-Signature: <hex> (identical HMAC-SHA256 algorithm!) |
| Settled Событие Webhook | type === "InvoiceSettled" |
event === "payment.completed" / "payment.underpaid_accepted" |
| Модель хранения | Self-hosted xpub / wallet addresses |
100% Non-Custodial wallet addresses (Safe, Ledger, Trezor) |
sk_test_...) and Mainnet (sk_live_...).
import hmac
import hashlib
from fastapi import FastAPI, Request, HTTPException
app = FastAPI()
def verify_xpayr_or_btcpay_hmac(raw_body: bytes, sig_header: str, secret: str) -> bool:
"""Identical SHA-256 HMAC verification logic as BTCPay-Sig Greenfield webhooks."""
clean_sig = sig_header.replace("sha256=", "").strip()
expected = hmac.new(secret.encode("utf-8"), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, clean_sig)
@app.post("/webhooks/xpayr")
async def xpayr_webhook(request: Request):
raw = await request.body()
sig = request.headers.get("X-XPayr-Signature", "")
if not verify_xpayr_or_btcpay_hmac(raw, sig, "whsec_your_secret"):
raise HTTPException(status_code=401, detail="Invalid signature")
event = await request.json()
if event.get("event") in ("payment.completed", "payment.underpaid_accepted"):
# Same fulfillment handler previously triggered by BTCPay InvoiceSettled
pass
return {"ok": True}
Register at /merchant/register, paste your destination EVM, Solana, TRON, or multisig wallet addresses, and generate a free API тестовой сети key.
Add the raw-body HMAC-SHA256 verification handler alongside your existing Сервер BTCPay callback endpoint and test events in /tools/webhook-tester.
Route a slice of live crypto orders to POST /api/v1/payments (or enable the XPayr storefront plugin) to verify instant прямым зачислением 99.5% на кошелёк.
Switch primary crypto checkout routing to XPayr, withdraw any remaining custodial float from Сервер BTCPay, and export QuickBooks/Xero CSVs via /accounting.
Never. XPayr never holds private keys or pools funds. Configure your own Ledger, Trezor, or Safe{Wallet} multisig addresses and receive 99.5% directly on-chain.
Up to ~$30,000–$50,000/month in crypto volume, 0.5% ($150–$250) costs less than multi-chain VPS servers, commercial RPC nodes, and a single hour of DevOps maintenance — while supporting 12 chains out of the box.
Absolutely. Many teams route EVM, Solana, TRON, and TON stablecoins through XPayr with zero conflict.