API REST simple. Webhooks signés HMAC-SHA256. Idempotency keys. SDK pour les langages courants. Test mode complet avec faucet de test. Documentation pensée pour qu'un développeur compétent intègre en moins d'une heure.
Créez votre première facture de test sans même configurer de wallet. SVRNG Pay vous fournit une xpub de test au signup pour expérimenter avant de connecter votre vrai wallet.
// 1. Authentifiez-vous avec votre clé de test (sp_test_...) const SVRNG_PAY_KEY = process.env.SVRNG_PAY_KEY; // 2. Créez une facture const response = await fetch('https://api.svrngpay.com/v1/invoices', { method: 'POST', headers: { 'Authorization': `Bearer ${SVRNG_PAY_KEY}`, 'Content-Type': 'application/json', 'Idempotency-Key': `order-${orderId}` }, body: JSON.stringify({ amount: 1500.00, currency: 'USD', description: 'Mandat — Constitution Delaware C-Corp', accepted_chains: ['usdc-eth', 'usdt-eth', 'btc', 'sol'], webhook_url: 'https://yoursite.com/webhooks/svrngpay', metadata: { order_id: orderId, customer_email: '[email protected]' } }) }); const { payment_url, invoice_id, expires_at } = await response.json(); // 3. Redirigez votre client vers le payment_url // → https://pay.svrngpay.com/inv_a8f3b9c2d1e4f5
{
"id": "inv_a8f3b9c2d1e4f5",
"object": "invoice",
"status": "awaiting_payment",
"amount": 1500.00,
"currency": "USD",
"payment_url": "https://pay.svrngpay.com/inv_a8f3b9c2d1e4f5",
"created_at": "2026-04-29T14:23:11Z",
"expires_at": "2026-04-29T15:23:11Z",
"livemode": false
}
Toutes les requêtes API utilisent l'authentification Bearer dans l'en-tête Authorization. Les clés sont préfixées pour rendre évidente la distinction entre test et production.
Faux paiements, test wallets fournis. Aucune transaction onchain réelle. Idéal pour développement et CI.
Transactions onchain réelles, fonds réels. Uniquement après vérification KYC complète et activation par l'équipe SVRNG Pay.
Clés à scope restreint (read-only ou par endpoint). Recommandées pour intégrations tierces, scripts, agents.
Tous les webhooks sont signés avec HMAC-SHA256 en utilisant un secret partagé. Si vous ne vérifiez pas la signature, n'importe qui peut forger un webhook qui ressemble au nôtre. Vérifiez. Toujours.
// Express.js — vérification de signature webhook import crypto from 'crypto'; import express from 'express'; const WEBHOOK_SECRET = process.env.SVRNG_PAY_WEBHOOK_SECRET; const app = express(); // Important : utilisez le raw body, pas le JSON parsé app.post('/webhooks/svrngpay', express.raw({ type: 'application/json' }), (req, res) => { const signature = req.headers['svrngpay-signature']; const timestamp = req.headers['svrngpay-timestamp']; const payload = req.body.toString(); // 1. Vérifier que le timestamp est récent (≤ 5 min) if (Math.abs(Date.now() / 1000 - timestamp) > 300) { return res.status(401).send('timestamp expired'); } // 2. Reconstruire la signature attendue const expected = crypto .createHmac('sha256', WEBHOOK_SECRET) .update(`${timestamp}.${payload}`) .digest('hex'); // 3. Comparaison constante (timing-attack-safe) if (!crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expected))) { return res.status(401).send('invalid signature'); } // 4. Maintenant seulement, traiter l'événement const event = JSON.parse(payload); switch (event.type) { case 'invoice.confirmed': // Le paiement est confirmé onchain au seuil configuré fulfillOrder(event.data.invoice_id, event.data.metadata); break; case 'invoice.expired': notifyCustomer(event.data.invoice_id); break; } res.status(200).send('ok'); } );
Le seuil de confirmation détermine quand invoice.confirmed est émis. Voici les valeurs par défaut, équilibrées entre sécurité et UX. Configurables vers le haut sur les tiers Pro et Concierge pour les transactions à très haut montant.
Toutes les requêtes POST acceptent un en-tête Idempotency-Key. SVRNG Pay déduplique automatiquement les requêtes ayant la même clé pendant 24 heures. Si votre serveur crash entre la création de facture et la persistance en DB, vous pouvez rejouer la requête sans craindre de créer deux factures.
curl https://api.svrngpay.com/v1/invoices \ -H "Authorization: Bearer sp_live_..." \ -H "Idempotency-Key: order-2026-04-29-7842" \ -H "Content-Type: application/json" \ -d '{"amount": 1500, "currency": "USD"}'
Tous les errors retournent un body JSON structuré avec un type, un code, un message humain, et un request_id à fournir si vous nous écrivez.
{
"error": {
"type": "invalid_request",
"code": "amount_too_low",
"message": "Le montant minimum est 1.00 USD.",
"param": "amount",
"request_id": "req_a8f3b9c2d1"
}
}
Test : 100 requêtes/minute par clé. Live Standard : 500 req/min. Live Pro : 2 000 req/min. Live Concierge : 10 000 req/min ou plafond négocié. Headers X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset sur chaque réponse.
Version actuelle : 2026-04-15. Spécifiez SVRNG-Pay-Version: 2026-04-15 pour figer votre intégration. Les changements breaking sortent dans une nouvelle version datée ; l'ancienne reste supportée 12 mois minimum. Vous êtes notifié 90 jours avant toute déprécation.
Chaque SDK couvre l'API complète, gère l'authentification, vérifie les signatures de webhook, et expose des types stricts dans les langages typés.
npm install @svrngpay/node
pip install svrngpay
composer require svrngpay/svrngpay-php
go get github.com/svrngpay/svrngpay-go
Créez un compte test, générez votre première facture, vérifiez votre premier webhook. L'intégration complète prend une heure pour un développeur compétent.