Facturation SaaS avec un merchant of record : formules, essais, frais à l'usage et webhooks
Skalp peut facturer votre SaaS en tant que merchant of record. Votre application ouvre un paiement d'abonnement, Skalp encaisse, ajoute la TVA du pays du client et émet chaque facture, et des webhooks signés tiennent votre base à jour. L'usage au-delà de la formule passe sur la même carte.
Chaque formule est un produit facturé chaque semaine, chaque mois ou chaque année, avec un essai optionnel de 14 jours maximum. Les prix sont hors taxes et dans la devise de votre boutique. Vous pouvez aussi donner à une formule un prix rond dans trois autres devises au maximum pour les clients en Pologne, dans la zone euro, aux États-Unis et au Brésil.
Ouvrir le paiement
client := skalp.New(skalp.Options{})
session, err := client.CreateSubscriptionCheckout(ctx, skalp.CreateSubscriptionCheckoutParams{
ProductSlug: "pro-monthly",
ExternalRef: orgID,
ReturnURL: "https://app.example.com/billing?checkout=success",
})
if err != nil {
return err
}
http.Redirect(w, r, session.URL, http.StatusSeeOther)
En Node, le même appel est skalp.subscriptions.createCheckout(...). Le client paie sur la page de Skalp, votre application n'affiche donc jamais de formulaire de carte. Une entreprise de l'UE peut y saisir son numéro de TVA et achète en autoliquidation. ExternalRef revient dans chaque événement de l'abonnement, ce qui vous évite de stocker des identifiants Skalp avant le premier paiement.
Des webhooks pour tout le cycle de vie
| Événement | Quand il arrive |
subscription.created | L'abonnement a démarré. |
subscription.renewed | Une période a été payée. Contient l'identifiant de facture, le montant et la nouvelle date de fin. |
subscription.past_due | Un renouvellement a échoué. Contient le nombre de tentatives et la prochaine. |
subscription.updated | Quelque chose a changé, par exemple la formule ou une résiliation prévue en fin de période. |
subscription.canceled | La formule est terminée. Contient cancelReason. |
subscription.refunded, subscription.disputed | Un paiement a été remboursé, ou la banque du client a ouvert un litige. |
Chaque requête porte une signature HMAC-SHA256 dans l'en-tête Skalp-Signature. skalp.webhooks.constructEvent en Node et client.ConstructEvent en Go la vérifient et rejettent les envois de plus de cinq minutes.
subscriptions.changePlan fait passer un client à une autre formule et calcule la différence au prorata. subscriptions.cancel arrête la formule à la fin de la période payée, le client garde donc l'accès jusque-là.
Frais à l'usage
const charge = await skalp.subscriptions.createUsageCharge(subscription.id, {
amount: 12.34,
currency: 'EUR',
description: 'Seats over the plan, September 2026',
idempotencyKey: `seats:${orgId}:2026-09`,
periodStart: new Date('2026-09-01T00:00:00Z'),
periodEnd: new Date('2026-10-01T00:00:00Z'),
})
if (charge.status === 'open') await sendPaymentLink(charge.hostedUrl)
Les frais à l'usage sont prélevés dans la devise de votre boutique sur la carte enregistrée. Le même idempotencyKey renvoie toujours le même frais, vous pouvez donc réessayer après un timeout ou une erreur 5xx sans facturer deux fois. Chaque abonnement a un plafond quotidien de frais à l'usage, que le support de Skalp peut relever.
Paiements échoués
Quand un renouvellement échoue, le client reçoit une facture ouverte qu'il peut régler avec n'importe quelle carte, et cette carte sert pour les renouvellements suivants. Vous recevez subscription.past_due et pouvez afficher un bandeau dans votre application jusqu'à l'arrivée de subscription.renewed.
Factures, coupons et taxes
Skalp émet une facture PDF pour chaque paiement avec la TVA du pays du client, et subscriptions.listInvoices vous les renvoie pour votre page de facturation. Les coupons d'une formule peuvent s'appliquer au premier paiement, à un nombre de mois donné ou à tout l'abonnement.
Questions fréquentes
Au nom de qui est la facture ?
De Skalp. Skalp est le merchant of record, il vend donc la formule à votre client et vous reverse votre part.
Puis-je garder ma propre page de tarifs ?
Oui. Votre page de tarifs appelle l'API et envoie le client vers le paiement renvoyé.
Le client a-t-il besoin d'un compte Skalp ?
Non. Les clients qui arrivent par l'API gèrent leur abonnement avec un code reçu par e-mail.
Combien ça coûte ?
10 % de chaque paiement, ou 7 % dès que vos ventes des 30 derniers jours dépassent 20 000 $, traitement des paiements inclus et sans abonnement mensuel.