// документация
Документация для разработчиков
Интегрируйте NextCryptoPay за несколько минут. Вот как выглядит типичная интеграция.
Разрабатываете с ИИ-агентом?
Если вы используете Claude Code, Codex, Cursor или любого ИИ-агента для разработки проекта, скачайте docs-agent.md и передайте его агенту — там есть всё для автоматической интеграции NextCryptoPay.
1. Создайте ключ API
Сгенерируйте ключ в разделе Панель → Ключи API. Храните секрет на своём сервере, никогда в браузере.
2. Создайте счёт
Отправьте POST-запросом сумму, валюту и сеть на эндпоинт счетов, затем перенаправьте клиента на возвращённый URL оплаты.
3. Получайте вебхуки
Мы отправляем подписанный вебхук, когда счёт оплачен, подтверждается или истёк. Проверьте подпись с помощью своего секрета вебхука.
Аутентификация
Аутентифицируйте каждый запрос секретным ключом в заголовке Authorization. Создавайте ключи для каждого магазина в разделе Панель → Ключи API (полный ключ показывается один раз).
Создание счёта
Передайте сумму заказа и актив; chain необязателен. Вы получите размещённый checkoutUrl — перенаправьте туда клиента. Без chain клиент выбирает сеть на странице оплаты.
Запрос
curl -X POST https://nextcryptopay.com/api/v1/invoices \
-H "Authorization: Bearer ncp_live_..." \
-H "Content-Type: application/json" \
-d '{
"orderId": "ORDER-1001",
"amount": 99.50,
"currency": "USD",
"chain": "tron",
"asset": "USDT",
"webhookUrl": "https://yourstore.com/webhooks/nextcryptopay",
"redirectUrl": "https://yourstore.com/thank-you"
}'Ответ
{
"id": "inv_abc123",
"orderId": "ORDER-1001",
"payAddress": "TJ9xH4n2k8sQw7Lm3vR5pZ1aB6cD8eF2g",
"cryptoAmount": "99.50",
"asset": "USDT",
"chain": "tron",
"status": "PENDING",
"expiresAt": "2026-06-17T10:00:00.000Z",
"checkoutUrl": "https://nextcryptopay.com/pay/inv_abc123"
}redirectUrl — адрес, куда клиент вернётся через несколько секунд после оплаты. Если не указать, используется URL возврата магазина (Dashboard → Webhooks). Задайте хотя бы один: без обоих клиент останется на странице оплаты без пути назад. Никогда не отгружайте заказ лишь потому, что кто-то открыл этот адрес: оплату подтверждает только вебхук invoice.paid с проверенной подписью.
Отслеживание статуса платежа
Опрашивайте счёт или подпишитесь на обновления в реальном времени через Server-Sent Events. Статусы: PENDING → CONFIRMING → PAID (или EXPIRED / PARTIALLY_PAID).
# Poll the invoice
curl https://nextcryptopay.com/api/v1/invoices/inv_abc123
# Or subscribe to live updates (Server-Sent Events)
GET https://nextcryptopay.com/api/v1/invoices/inv_abc123/streamПроверка вебхуков
При каждом изменении статуса мы отправляем POST-запросом подписанное событие на ваш URL вебхука. Проверьте заголовок x-nextcryptopay-signature (HMAC-SHA256 от необработанного тела с использованием секрета вебхука вашего магазина), прежде чем доверять ему. Верните 2xx в течение 15 с — иначе мы повторяем попытки с задержкой. Прежние заголовки x-cryptopay-* по-прежнему отправляются параллельно с идентичными значениями до 31.03.2027; в новом коде используйте имена x-nextcryptopay-*.
import crypto from "node:crypto";
// Legacy x-cryptopay-* headers carry identical values and are still sent in
// parallel until 2027-03-31 — prefer x-nextcryptopay-* in new code.
app.post("/webhooks/nextcryptopay", (req, res) => {
const signature = req.headers["x-nextcryptopay-signature"];
const timestamp = req.headers["x-nextcryptopay-timestamp"];
// Reject stale deliveries (replay protection): within 5 minutes
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) {
return res.status(401).end();
}
// Signature is HMAC of "timestamp.rawBody"
const expected = crypto
.createHmac("sha256", process.env.NEXTCRYPTOPAY_WEBHOOK_SECRET)
.update(timestamp + "." + req.rawBody) // raw JSON body
.digest("hex");
if (
signature.length !== expected.length ||
!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))
) {
return res.status(401).end();
}
// Dedupe by delivery id (same event may be retried)
const deliveryId = req.headers["x-nextcryptopay-delivery"];
if (alreadyProcessed(deliveryId)) return res.status(200).end();
const { event, invoice } = req.body;
if (event === "invoice.paid") fulfillOrder(invoice.orderId);
res.status(200).end(); // reply 2xx within 15s, else we retry (6 attempts, backoff)
});Поддерживаемые сети
Tron (USDT/USDC · TRC20), Ethereum (USDT/USDC · ERC20), BSC (USDT · BEP20), TON (USDT · jetton), Bitcoin (BTC). За каждый успешный платёж взимается комиссия платформы с пределом на одну транзакцию; она списывается с предоплаченного баланса USDT (или покрывается лимитом вашего тарифа). Действующие ставки — на странице тарифов.