Базовый цикл: создать инвойс → отправить клиента на страницу оплаты → получить подписанный webhook. Префикс /v1. Аутентификация — заголовок X-Api-Key.
OpenAPI 3 спека (JSON) Получить ключи
| Сеть | Активы |
|---|---|
| ton | USDT ★, NOT, DOGS, TON |
| tron | USDT ★ |
| solana | USDT ★, USDC, SOL |
| evm | USDT ★, USDC, DAI, WBTC, WETH, STETH, LINK, UNI, AAVE, MKR, LDO, ENA, ONDO, FET, FRAX, TUSD, SHIB, PEPE, ETH |
| bsc | USDT ★, BUSD, CAKE, BNB |
| polygon | USDT ★, POL |
| arbitrum | USDT ★, ARB, ETH |
| optimism | USDT ★, OP, ETH |
| base | USDT ★, ETH |
| avalanche | USDT ★, AVAX |
| hyperevm | HYPE |
| sonic | S |
| cronos | USDT ★, CRO |
| gnosis | XDAI |
| linea | USDT ★, ETH |
| scroll | USDT ★, ETH |
| zksync | USDT ★, ETH |
| mantle | USDT ★, MNT |
| celo | USDT ★, CELO |
| blast | ETH |
| sei | SEI |
| berachain | BERA |
| moonbeam | GLMR |
| btc | BTC |
| doge | DOGE |
| ltc | LTC |
| monero | XMR |
POST /v1/invoices
X-Api-Key: pk_...
Idempotency-Key: order-1042 # необязательно, защищает от дублей
Content-Type: application/json
{ "network": "ton", "asset": "USDT", "amount": "25.00", "order_id": "1042" }
Ответ содержит id, pay_address, pay_uri, expires_at. Отправьте покупателя на /pay/
GET /v1/invoices/<id>
X-Api-Key: pk_...
→ { "status": "paid", "amount_received": "25", "settlement": { "net": "...", "revenue": "..." } }
Статусы: pending → detected → paid (а также underpaid/overpaid/expired).
При смене статуса шлём POST на ваш webhook URL. Заголовок X-Signature = HMAC-SHA256(тело, api_secret). Проверьте подпись и свежесть (timestamp) до обработки.
// Node — signature check
import crypto from "node:crypto";
const sig = crypto.createHmac("sha256", API_SECRET).update(rawBody).digest("hex");
if (sig !== req.headers["x-signature"]) return res.sendStatus(401);
const evt = JSON.parse(rawBody); // event: invoice.paid, ...
if (Date.now() - new Date(evt.timestamp) > 5*60_000) return res.sendStatus(400); // anti-replay