// documentation
Documentation développeur
Intégrez NextCryptoPay en quelques minutes. Voici à quoi ressemble une intégration typique.
Vous développez avec un agent IA ?
Si vous utilisez Claude Code, Codex, Cursor ou tout autre agent IA pour développer votre projet, téléchargez docs-agent.md et donnez-le à votre agent — il contient tout le nécessaire pour intégrer NextCryptoPay automatiquement.
1. Créer une clé API
Générez une clé dans Tableau de bord → Clés API. Gardez le secret sur votre serveur, jamais dans le navigateur.
2. Créer une facture
Envoyez en POST le montant, la devise et la chaîne à l'endpoint des factures, puis redirigez le client vers l'URL de paiement retournée.
3. Recevoir les webhooks
Nous envoyons un webhook signé lorsqu'une facture est payée, en cours de confirmation ou expirée. Vérifiez la signature avec votre secret de webhook.
Authentification
Authentifiez chaque requête avec votre clé secrète dans l'en-tête Authorization. Créez des clés par boutique dans Tableau de bord → Clés API (la clé complète n'est affichée qu'une fois).
Créer une facture
Envoyez le montant de la commande, la chaîne et l'actif. Vous recevez en retour une payAddress et une checkoutUrl hébergée — redirigez-y votre client.
Requête
curl -X POST https://nextcryptopay.com/api/v1/invoices \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"orderId": "ORDER-1001",
"amount": 99.50,
"currency": "USD",
"chain": "tron",
"asset": "USDT",
"webhookUrl": "https://yourstore.com/webhooks/cryptopay"
}'Réponse
{
"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"
}Suivre le statut du paiement
Interrogez la facture, ou abonnez-vous aux mises à jour en direct via Server-Sent Events. Statuts : PENDING → CONFIRMING → PAID (ou 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/streamVérifier les webhooks
À chaque changement de statut, nous envoyons en POST un événement signé à votre URL de webhook. Vérifiez l'en-tête x-cryptopay-signature (HMAC-SHA256 du corps brut à l'aide du secret de webhook de votre boutique) avant de lui faire confiance. Retournez un code 2xx sous 5 s — sinon, nous réessayons avec un délai croissant.
import crypto from "node:crypto";
app.post("/webhooks/cryptopay", (req, res) => {
const signature = req.headers["x-cryptopay-signature"];
const timestamp = req.headers["x-cryptopay-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.CRYPTOPAY_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-cryptopay-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)
});Chaînes prises en charge
Tron (USDT/USDC · TRC20), Ethereum (USDT/USDC · ERC20), BSC (USDT · BEP20), Bitcoin (BTC). Les frais sont de 0,1 % par paiement réussi, prélevés sur votre solde USDT prépayé (ou couverts par le quota de votre forfait).