Paiements crypto pour le SaaS
Comment une entreprise SaaS peut accepter la crypto : une facture par période au lieu d'une carte enregistrée, flux de renouvellement, paiements partiels, comptabilité en dollars et ce qu'il ne faut pas promettre aux clients.

Les logiciels par abonnement reposent sur une carte enregistrée qui est débitée automatiquement. La crypto ne fonctionne pas ainsi : le client envoie lui-même chaque paiement. Cela ressemble à un problème, mais de nombreuses entreprises SaaS vendent à des clients qui ne peuvent pas ou préfèrent ne pas payer par carte, et le modèle qui marche est simple : une facture par période de facturation. Ce guide montre comment le construire, à quoi s'attendre et en quoi il diffère de la facturation par carte.
Pourquoi les entreprises SaaS ajoutent la crypto
La carte est la norme, ajouter la crypto demande donc une raison. Les plus courantes :
- Des clients que les rails de carte laissent de côté. Des équipes dans des pays où votre processeur n'opère pas, ou dont les cartes sont refusées pour des logiciels transfrontaliers, peuvent tout de même payer avec un stablecoin en dollars.
- Des factures annuelles et importantes. Un client qui règle une grosse facture annuelle préfère souvent un virement à une carte, et un transfert en stablecoin est définitif sans heure limite bancaire.
- Pas de rétrofacturation. L'expéditeur ne peut pas annuler un paiement crypto ; la « fraude amicale » sur un abonnement sans carte présente n'est donc pas une préoccupation.
- Des acheteurs soucieux de leur vie privée et natifs de la crypto. Les outils pour développeurs, l'infrastructure et l'hébergement ont souvent des utilisateurs qui détiennent des stablecoins et aiment payer avec.
Soyez clair sur la limite : la crypto ajoute un moyen de paiement pour ces clients. Elle ne remplace pas la facturation par carte pour les autres.
Le modèle : une facture par période
La facturation par carte débite une carte enregistrée selon un calendrier. Un paiement crypto doit être lancé par le client ; le modèle naturel est donc celui des factures prépayées :
- Peu avant la fin d'une période, votre système crée une facture pour la suivante.
- Le client reçoit la facture avec un lien de paiement, ouvre la page de paiement hébergée, choisit un actif et un réseau et paie.
- Lorsque le paiement est terminé, votre système marque la facture comme payée et prolonge l'abonnement.
Il n'y a ni moyen de paiement enregistré ni prélèvement automatique. Qvard ne propose pas la facturation récurrente ni les abonnements comme produit ; la logique de renouvellement, les rappels et le délai de grâce sont de votre côté. Pour de nombreux outils B2B et pour développeurs, cela suffit, et c'est de toute façon ainsi que les forfaits annuels sont généralement réglés. Voir facturation crypto pour le SaaS B2B pour le détail côté facturation.
Créer le paiement d'une facture
Pour chaque facture, créez un paiement depuis votre backend avec un seul POST vers https://api.qvard.com/api/v1/payment. La requête porte votre clé dans l'en-tête Authorization: Bearer et un JSON avec :
id: le numéro de votre facture, sous forme de chaîne. Il revient dans le webhook ; utilisez donc quelque chose que vous pouvez retrouver.price: le montant en dollars américains.paymentSystemId(facultatif) : un moyen de paiement de votre projet, si vous voulez que la page s'ouvre avec un actif et un réseau sélectionnés.
La réponse est 201 avec un redirectUrl, l'adresse de la page de paiement hébergée. Placez ce lien dans l'e-mail de la facture et sur la page de facturation du client. Si une requête est envoyée deux fois avec le même id pour le même moyen de paiement, vous récupérez le paiement existant ; une tâche rejouée ne crée donc pas de doublons.
Fixez le prix de vos forfaits en dollars. Le client paie l'équivalent dans l'actif qu'il choisit, à un taux fixé pendant une heure.
Le flux de renouvellement, de bout en bout
Un renouvellement demande deux petits morceaux de code, présentés ci-dessous : une tâche qui crée la facture et le paiement, et le gestionnaire qui réagit lorsqu'elle est payée.
Un calendrier réaliste :
- Sept jours avant la fin : créer la facture et envoyer le lien par e-mail.
- Trois jours avant et le dernier jour : envoyer des rappels si elle est encore ouverte.
- Après la fin : garder le compte actif pendant un court délai de grâce de votre choix, puis rétrograder ou suspendre. C'est votre politique, pas une fonction de la passerelle.
- À l'arrivée du webhook : marquer la facture comme payée et prolonger l'abonnement à partir de la fin de la période précédente, pas de la date du paiement, afin que ceux qui paient en avance ne perdent pas de jours.
Le webhook est envoyé lorsque le paiement est terminé. Votre point de terminaison doit répondre exactement HTTP 200 (sinon il y a des nouvelles tentatives : cinq en environ six minutes) et être sûr s'il s'exécute deux fois, ce dont s'occupe l'étape markPaidIfOpen de l'exemple. Vérifiez la signature X-Qvard-Signature (HMAC-SHA256 avec votre clé secrète) ; voir comment sécuriser les webhooks de paiement crypto.
// Called by your billing job a few days before a subscription period ends.
async function createRenewalInvoice(sub) {
const invoice = await db.invoices.create({ subscriptionId: sub.id, amountUsd: sub.planPriceUsd, status: 'open' });
const res = await fetch('https://api.qvard.com/api/v1/payment', {
method: 'POST',
headers: { Authorization: 'Bearer ' + process.env.QVARD_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ id: String(invoice.id), price: invoice.amountUsd })
});
const { redirectUrl } = await res.json();
await mailer.send(sub.email, 'Your renewal invoice', 'Pay here: ' + redirectUrl);
}
// Called from the webhook handler when status is "completed".
async function onPaid(invoiceId) {
const invoice = await db.invoices.markPaidIfOpen(invoiceId); // null if already paid
if (invoice) await db.subscriptions.extend(invoice.subscriptionId, '1 month');
}Paiements partiels, changements de forfait et comptabilité
La facturation réelle a des cas limites. Décidez-les avant le lancement :
- Paiement partiel. Si moins que le montant complet arrive, le statut est
partialet aucun webhook de fin n'est envoyé. Gardez la facture ouverte, dites au client combien il manque et laissez-le envoyer le reste, ou annulez et remboursez. Ne prolongez pas l'abonnement sur un paiement partiel. - Montées et baisses de forfait. Le prorata est votre logique. Le plus simple est d'émettre une nouvelle facture pour la différence, ou d'appliquer le changement à partir de la période suivante.
- Remboursements. Un paiement crypto ne peut pas être récupéré ; un remboursement est donc un transfert que vous envoyez vous-même. Mettez la règle dans vos conditions.
- Comptabilité. Comptabilisez le chiffre d'affaires en dollars au montant de la facture et gardez l'
iddu paiement à côté de la facture pour le rapprochement. Vérifiez avec vos conseillers le traitement fiscal et comptable des encaissements en crypto.
Gardez peu d'états de facture et clairs : ouverte, payée, annulée.
Que dire aux clients, et que ne pas promettre
Décrivez la crypto honnêtement sur votre page de tarifs ou de facturation :
- vous payez vous-même chaque période, avec une facture et un lien de paiement ;
- quels actifs et réseaux vous acceptez (voir les monnaies prises en charge), et que le paiement doit se faire sur le réseau choisi sur la page de paiement ;
- que l'accès est prolongé lorsque le paiement est terminé, pas lorsque le client dit avoir payé ;
- votre règle de remboursement en une ligne.
Ne promettez ni renouvellement automatique, ni portefeuilles crypto enregistrés, ni nouvelles tentatives à la manière des cartes ; rien de cela n'existe dans ce modèle. Promettez ce qui marche : une facture claire, une page de paiement et une prolongation dès que le paiement est terminé.
Ce que cela coûte et ce qui est prêt aujourd'hui
Il n'y a pas d'abonnement pour la passerelle. La commission est individuelle pour votre projet et, selon la page des tarifs, part de 1 % et peut descendre jusqu'à 0,1 %. Retirer votre solde vers votre propre portefeuille ne coûte que les frais de réseau ; le retrait vers un compte bancaire en monnaie fiat n'est pas disponible.
L'intégration passe par l'API, ce qui demande un développeur ; il n'existe pas encore de plugin de facturation prêt à l'emploi, et les clients reviennent sur votre site d'eux-mêmes après avoir payé ; donnez-leur donc une page de facturation qui affiche l'état réel de la facture. Voir le cas d'usage SaaS, la documentation développeur et une facture de démonstration.
FAQ
Qvard prend-il en charge la facturation récurrente ou les abonnements automatiques ?
Non. Un paiement crypto est envoyé par le client à chaque fois. Le modèle qui marche est une facture par période de facturation, avec la logique de renouvellement, les rappels et le délai de grâce de votre côté.
Comment savoir qu'un client a payé ?
Qvard appelle votre webhook lorsque le paiement est terminé, avec l'identifiant de facture que vous avez envoyé et le statut. Ne marquez la facture payée que sur le statut completed et rendez le gestionnaire sûr s'il s'exécute deux fois.
Et si le client ne paie qu'une partie de la facture ?
Le paiement reçoit le statut partial et aucun webhook de fin n'est envoyé. Gardez la facture ouverte et demandez le reste, ou annulez et remboursez. Ne prolongez pas l'abonnement.
Puis-je fixer le prix de mes forfaits en dollars ?
Oui. Le prix est fixé en dollars américains et le client paie l'équivalent dans l'actif et le réseau qu'il choisit, à un taux fixé pendant une heure.


