// 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.

Télécharger docs-agent.md

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/stream

Vé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).