Facebook Pixel
Fit'DistanceDocumentation
Ouvrir l'app
Sur cette page

Un achat en ligne → une invitation

Quand un client règle un achat sur Stripe, invite-le dans ton coaching avec Fit'Distance, après un premier passage en aperçu, avec n8n ou Make.

Quand un client règle un achat sur Stripe, il reçoit l'e-mail d'invitation de Fit'Distance avec son code. Ce cas pratique écrit en ton nom et prévient quelqu'un : il lui faut une clé avec Élèves › Écrire (students:write) et une offre qui inclut les écritures. Crée la clé dans l'app, conditions d'usage acceptées.

Ce que fait ce cas pratique

  1. Déclencheur : Stripe envoie checkout.session.completed à la fin du paiement, et checkout.session.async_payment_succeeded quand un prélèvement ou un virement est encaissé ; une session dont payment_status est unpaid n'invite personne. L'adresse de l'acheteur est dans data.object.customer_details.email, l'identifiant de la session dans data.object.id (il commence par cs_).
  2. Durée : le contrat commence à la date du paiement et dure weeks semaines, lues dans data.object.metadata.weeks, 12 sans valeur.
  3. Invitation : un POST /operations/students.invite crée un code et envoie l'e-mail d'invitation à l'acheteur.
  4. Pour toi : un e-mail facultatif te dit qui a été invité, jusqu'à quand.
curl -X POST https://api.fitdistance.io/api/partner/v1/operations/students.invite \
  -H "Authorization: Bearer fd_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: vente-cs_live_a1B2" \
  -d '{"email": "lea@example.com", "contractStartAt": "2026-10-26T09:00:00.000Z", "contractEndAt": "2027-01-18T09:00:00.000Z", "dry_run": true}'

L'Idempotency-Key vaut vente-<cs_…>, l'identifiant de la session : deux événements distincts pour la même session ne font qu'une invitation, et le rejeu du même événement est remboursé, tant que la clé est gardée, de 24 à 48 heures. Voir Écritures et idempotence.

Poser weeks dans Stripe

Seules les métadonnées de la session arrivent dans l'événement, pas celles du produit. Pose weeks dans les métadonnées de ton lien de paiement, que Stripe copie sur chaque session du lien, ou à la création de la session. Un weeks qui n'est pas un nombre entier de 1 à 520, ou un achat sans e-mail, arrête le workflow avant l'invitation.

Ce que ça coûte

Une écriture coûte un crédit, débité avant l'appel : une invitation par achat. Un aperçu (dry_run: true) et l'e-mail pour toi ne coûtent rien. Un argument que le schéma de l'opération refuse est remboursé ; un 401, un 403 ou un 429 ne coûtent rien ; un rejeu est remboursé.

Un premier passage en aperçu

Le workflow est livré avec dry_run: true : rien n'est créé ni envoyé, et le message de la réponse dit ce qui partirait. Passe dry_run à false quand l'aperçu te convient. Il fait partie du corps : un achat déjà prévisualisé, rejoué ensuite, reçoit un 409 IDEMPOTENCY_MISMATCH gratuit ; les achats suivants ont une nouvelle clé.

Dans n8n

  1. Choisis Import from URL… et colle https://fitdistance.io/documentation/api/cas-pratiques/vente-en-ligne-invitation.n8n.json, ou télécharge le workflow et choisis Import from File…. Choisis l'identifiant Fit'Distance API de Brancher n8n dans le nœud HTTP Request.
  2. Dans Checkout completed, crée l'identifiant Stripe de n8n avec ta clé secrète de test (sk_test_…) : activer le workflow enregistre son adresse chez Stripe, dans le mode de la clé. Le fichier écoute deux événements ; si tu rouvres le champ Events, garde les deux : n8n n'affiche pas le second dans sa liste, mais Stripe le reconnaît.
  3. Dans Email me, choisis ton compte SMTP et remplace l'adresse d'exemple par la tienne, ou supprime le nœud.
  4. Exécute le workflow, fais un achat en mode test, puis lis le message de Invite the buyer.

L'invitation écrit à un vrai client

Invite the buyer est livré en aperçu. Une fois dry_run à false, chaque achat envoie l'e-mail d'invitation à son acheteur.

  1. Remplace la clé de l'identifiant Stripe par ta clé live (sk_live_…), passe dry_run à false, puis active le workflow : son adresse s'enregistre alors en mode live.

Contract dates tire les dates de l'événement, pas de l'heure du passage : un rejeu envoie le même corps.

Dans Make

  1. Premier module Stripe › Watch Events, pour les événements checkout.session.completed et checkout.session.async_payment_succeeded, puis un filtre : payment_status différent de unpaid. Comme dans n8n, teste avec une clé de test, puis passe sur la clé live avant d'activer le scénario.
  2. HTTP › Make a request : POST sur https://api.fitdistance.io/api/partner/v1/operations/students.invite, Idempotency-Key = vente- suivi de l'identifiant de la session (data.object.id), Body content type application/JSON, Body input method JSON string, corps {"email": "…", "contractEndAt": "{{addDays(now; 84)}}", "dry_run": true}, avec l'adresse de customer_details.email. Avec weeks, remplace 84 par sept fois sa valeur.

Dans Make, now change à chaque exécution : un rejeu reçoit un 409 IDEMPOTENCY_MISMATCH gratuit, sans seconde invitation. Avec Systeme.io ou Shopify, le chemin est le même : leur webhook de commande payée (chez Shopify, orders/paid) remplace Stripe ; la clé prend l'identifiant de la commande. Référence : invitation d'un élève.

Page suivanteUn DM Instagram → un code d'activation, avec ManyChatQuand quelqu'un t'écrit un mot-clé en message privé Instagram, ManyChat lui répond avec un code d'activation créé par Fit'Distance, avec n8n ou Make.