// dokumentasi
Dokumentasi pengembang
Integrasikan NextCryptoPay dalam beberapa menit. Berikut gambaran integrasi pada umumnya.
Mengembangkan proyek dengan AI agent?
Jika Anda memakai Claude Code, Codex, Cursor, atau AI agent lainnya untuk membangun proyek, unduh docs-agent.md dan berikan ke agent Anda — berisi semua yang dibutuhkan untuk mengintegrasikan NextCryptoPay secara otomatis.
1. Buat API key
Buat kunci di Dashboard → API keys. Simpan secret di server Anda, jangan pernah di browser.
2. Buat invoice
POST jumlah, mata uang, dan chain ke endpoint invoices, lalu alihkan pelanggan ke URL checkout yang dikembalikan.
3. Terima webhook
Kami mengirim webhook bertanda tangan saat invoice dibayar, dikonfirmasi, atau kedaluwarsa. Verifikasi tanda tangan dengan webhook secret Anda.
Autentikasi
Autentikasi setiap permintaan dengan secret key Anda di header Authorization. Buat kunci per toko di Dashboard → API keys (kunci lengkap ditampilkan sekali).
Buat invoice
Kirim jumlah pesanan dan aset; chain bersifat opsional. Anda menerima checkoutUrl yang di-host — arahkan pelanggan ke sana. Tanpa chain, pelanggan memilih jaringan di halaman pembayaran.
Permintaan
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"
}'Respons
{
"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 adalah tujuan pelanggan beberapa detik setelah membayar. Bila dikosongkan, URL kembali milik toko (Dashboard → Webhooks) yang dipakai. Isi salah satu — tanpa keduanya, pelanggan tertahan di halaman pembayaran tanpa jalan kembali ke toko Anda. Jangan pernah memproses pesanan hanya karena seseorang membuka URL itu: hanya webhook invoice.paid dengan tanda tangan terverifikasi yang membuktikan pembayaran.
Lacak status pembayaran
Poll invoice, atau berlangganan pembaruan langsung via Server-Sent Events. Status: PENDING → CONFIRMING → PAID (atau 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/streamVerifikasi webhook
Pada setiap perubahan status, kami POST event bertanda tangan ke URL webhook Anda. Verifikasi header x-nextcryptopay-signature (HMAC-SHA256 dari raw body menggunakan webhook secret toko Anda) sebelum memercayainya. Kembalikan 2xx dalam 15 dtk — jika tidak, kami mencoba ulang dengan backoff. Header lama x-cryptopay-* tetap dikirim bersamaan dengan nilai identik hingga 31/03/2027; gunakan nama x-nextcryptopay-* pada kode baru.
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)
});Chain yang didukung
Tron (USDT/USDC · TRC20), Ethereum (USDT/USDC · ERC20), BSC (USDT · BEP20), TON (USDT · jetton), Bitcoin (BTC). Setiap pembayaran yang berhasil dikenakan biaya platform dengan batas maksimum per transaksi, dipotong dari saldo USDT prabayar Anda (atau ditanggung kuota paket Anda). Lihat halaman Harga untuk tarif yang berlaku.