API Fidel'me

Une API REST simple pour brancher votre caisse, votre site, ou tout outil externe sur vos données de fidélité — inscriptions, visites, récompenses, statistiques.

🔑 Authentification par clé API ↔ JSON 🪝 Webhooks temps réel

🔑 Authentification

Chaque requête doit porter votre clé API dans l'en-tête X-Api-Key (ou, à défaut, en paramètre d'URL ?api_key=…). Retrouvez votre clé dans votre espace commerçant, onglet API & Export — vous pouvez la régénérer à tout moment si elle a fuité.

curl -H "X-Api-Key: fmk_votre_cle" \
  https://fidel-me.fr/api/v1/customers
Cette clé donne un accès complet à vos données (lecture ET écriture — elle peut inscrire des clients, enregistrer des visites, valider des récompenses en votre nom). Ne l'exposez jamais dans du code exécuté côté navigateur ou dans une app mobile publique : passez toujours par votre propre serveur.

⏱️ Limites de débit

180 requêtes par minute et par endpoint, par clé API. Au-delà, l'API répond 429 avec un en-tête Retry-After (en secondes). Largement suffisant pour une caisse qui encaisse un ticket à la fois — contactez-nous si votre usage est différent.

📖 Lecture

GET/api/v1/customers
Liste tous vos clients (jusqu'à 5000), triés par montant dépensé décroissant.

Réponse

{
  "company": "Café Lumière",
  "count": 312,
  "customers": [
    { "id": 42, "name": "Camille Martin", "email": "camille@mail.fr",
      "visits": 7, "total_spent": 84.5, "stamps": 7,
      "token": "a1b2c3…", "segment": "Fidèle", "rfm_segment": "Champions" }
  ]
}
GET/api/v1/customers/:token
Fiche d'un client précis, identifié par son token (le même identifiant que celui encodé dans le QR code imprimé sur sa carte).

Réponse — 404 si le jeton est inconnu

{ "id": 42, "name": "Camille Martin", "visits": 7, "stamps": 7,
  "segment": "Fidèle", "rfm_segment": "Champions", "program_id": 3 }
GET/api/v1/programs
Vos cartes de fidélité actives — utile pour choisir le program_id à passer lors d'une inscription.

Réponse

{ "programs": [
  { "id": 3, "name": "Carte café", "type": "stamps", "stamps_required": 10, "reward": "Café offert" }
] }
GET/api/v1/stats
Indicateurs clés (KPIs) et répartition par segment — pour un tableau de bord externe.

Réponse

{ "company": "Café Lumière",
  "kpis": { "clients": 312, "atRisk": 14, … },
  "segments": { "Champion": 28, "Fidèle": 64, … } }

✍️ Écriture

POST/api/v1/enroll
Inscrit un nouveau client — l'équivalent, appelé depuis votre système, du formulaire d'inscription public. Si l'email ou le téléphone correspond à un client existant, aucun doublon n'est créé.

Corps de la requête

namerequisNom du client
emailoptionnel
phoneoptionnel
program_idoptionnelSinon, la première carte active du commerce est utilisée
curl -X POST -H "X-Api-Key: fmk_…" \
  -H "Content-Type: application/json" \
  -d '{"name":"Camille","email":"c@mail.fr"}' \
  https://fidel-me.fr/api/v1/enroll
{ "token": "a1b2c3…",
  "card_url": "https://fidel-me.fr/card.html?t=…" }
POST/api/v1/scan
Enregistre une visite — l'appel central pour brancher une caisse : un appel par ticket encaissé. Ajoute le tampon/les points/le cashback selon le type de carte, et déclenche la récompense si le palier est atteint.

Corps de la requête

tokenrequisJeton du client (QR code de sa carte)
amountvoir noteMontant du ticket, en euros
notevoir noteCommentaire libre

Au moins amount ou note est requis, pour garder une trace de chaque visite.

curl -X POST -H "X-Api-Key: fmk_…" \
  -H "Content-Type: application/json" \
  -d '{"token":"a1b2c3…","amount":12.5}' \
  https://fidel-me.fr/api/v1/scan
{ "ok": true, "stamps": 8, "reward": false,
  "type": "stamps", "message": "Tampon ajouté !" }
POST/api/v1/redeem
Valide la récompense de fidélité en cours pour ce client (remet son compteur à zéro) — l'équivalent API du bouton « Récompense donnée » en caisse.

Corps de la requête

tokenrequisJeton du client
curl -X POST -H "X-Api-Key: fmk_…" \
  -H "Content-Type: application/json" \
  -d '{"token":"a1b2c3…"}' \
  https://fidel-me.fr/api/v1/redeem
{ "ok": true, "message": "Café offert" }

🪝 Webhooks

Recevez un POST JSON sur votre propre URL à chaque événement — pas besoin d'interroger l'API en boucle. Configurez l'URL de destination depuis l'onglet API & Export de votre espace commerçant.

Événements disponibles

enroll
Nouvelle inscription
visit
Visite enregistrée
reward
Récompense donnée
level_up
Changement de palier VIP
bad_review
Avis négatif signalé

Format de la charge utile

{
  "event": "visit",
  "company_id": 7,
  "at": "2026-09-02T10:14:00.000Z",
  "data": { "customer": "Camille Martin", "token": "a1b2c3…", "amount": 12.5 }
}

Vérifier la signature

Chaque envoi porte l'en-tête X-Fidelme-Signature: t=<horodatage>,v1=<signature>. La signature est un HMAC-SHA256 (hexadécimal) de la chaîne t + "." + corps brut de la requête, calculé avec le secret de signature affiché à côté de votre webhook dans l'onglet API & Export. Recalculez-la de votre côté, comparez, et refusez les appels dont l'horodatage a plus de 5 minutes.

const [t, v1] = header.split(',').map(p => p.split('=')[1]);
const ok = crypto.createHmac('sha256', SECRET).update(t + '.' + rawBody).digest('hex') === v1;
Adresse de destination en https:// obligatoire. Livraison au mieux (best effort) : un essai unique, abandonné après 4 secondes, sans nouvelle tentative en cas d'échec.

← Retour à votre espace commerçant