XthonPay issues a unique USDT deposit address for every invoice, registers the transfer in fifteen seconds, and posts a durable webhook to your service. No service fees — ever.
Five primitives for accepting USDT and BNB on the BNB Smart Chain.
Scanner polls every 15 seconds across every active address. 12 confirmations before credit.
BIP-44 derivation from a seed encrypted with AES-256-GCM. Private keys never stored.
Only on-chain gas.
Three retries with escalating delay on any non-200. Idempotent by invoice_id.
Manage wallets, keys and invoices from Telegram — or hit the REST surface from any language.
Bearer-token auth via X-API-Key. No SDK. No GraphQL. No SSE. HTTPS and considered responses. The whole surface fits on one printed page.
# ISSUE — 50 USDT, order #9021 curl -X POST https://xthonpay.com/v1/invoices \ -H "X-API-Key: xpay_live_…" \ -H "Content-Type: application/json" \ -d '{ "amount": "50.00", "external_id": "order_9021", "callback_url": "https://you.com/hook" }' — RESPONSE { "status": "success", "data": { "invoice_id": 12034, "deposit_address": "0x9af3…3e21", "amount": "50.00", "expires_at": "2026-04-14T12:30Z" } }
# ISSUE — 50 USDT, order #9021 import requests r = requests.post( "https://xthonpay.com/v1/invoices", headers={"X-API-Key": "xpay_live_…"}, json={ "amount": "50.00", "external_id": "order_9021", "callback_url": "https://you.com/hook", }, ) data = r.json()["data"] print(data["deposit_address"])
// ISSUE — 50 USDT, order #9021 const res = await fetch('https://xthonpay.com/v1/invoices', { method: 'POST', headers: { 'X-API-Key': process.env.XPAY_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ amount: '50.00', external_id: 'order_9021', callback_url: 'https://you.com/hook', }), }); const { data } = await res.json(); console.log(data.deposit_address);
An operator view that reads like a printed ledger strip. Numbers, references, blocks, timestamps.
Open the bot. Generate a key. Issue an invoice. You'll be accepting USDT before the kettle boils.