api.fidelioo.co
API REST Fidelioo
Référence complète de l'API REST Fidelioo. Intégrez la fidélité client dans vos applications, systèmes de caisse et plateformes e-commerce.
URL de base
https://fidelioo.co/api/{locale}/v1
Remplacez {locale} par le code de langue souhaité : fr-fr, en-us, etc.
Conventions générales
| Propriété | Valeur |
| Format | JSON (Content-Type: application/json) |
| Encodage | UTF-8 |
| Authentification | Bearer Token (Authorization: Bearer {token}) |
| Pagination | Paramètres page et per_page (défaut : 20) |
| Dates | Format ISO 8601 : YYYY-MM-DDTHH:MM:SSZ |
| Fuseaux horaires | Africa/Porto-Novo (UTC+1) par défaut |
Structure de réponse standard
{
"success": true,
"data": { ... },
"meta": {
"current_page": 1,
"last_page": 5,
"per_page": 20,
"total": 98
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Le champ téléphone est requis.",
"details": {
"phone": ["Le champ téléphone est requis."]
}
}
}
Authentification — Token Bearer
L'API REST Fidelioo utilise des tokens Bearer pour authentifier les requêtes. Le token doit être inclus dans le header HTTP Authorization de chaque requête protégée.
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2ZpZGVsaW9vLmNvIiwic3ViIjo0MiwiaWF0IjoxNzQwMDAwMDAwLCJleHAiOjE3NDAzNjAwMDB9.xxxxx
Durée de validité des tokens
| Type d'utilisateur | Durée | Renouvellement |
| Admin | 24 heures | Via POST /admin/auth/refresh |
| Partenaire | 7 jours | Via POST /partner/auth/refresh |
| Staff | 12 heures | Via POST /staff/auth/refresh |
| Membre | 30 jours | Via POST /member/auth/refresh |
Sécurité : Ne stockez jamais vos tokens dans le code source ou dans des dépôts publics. Utilisez des variables d'environnement et des coffres-forts de secrets.
Obtenir un token
Chaque type d'utilisateur dispose de son propre flux d'authentification. Le processus général en deux étapes (envoi OTP puis vérification) s'applique aux partenaires, staff et membres.
curl -X POST https://fidelioo.co/api/fr-fr/v1/partner/auth/send-otp \
-H "Content-Type: application/json" \
-d '{"phone": "+22961000000"}'
curl -X POST https://fidelioo.co/api/fr-fr/v1/partner/auth/verify-otp \
-H "Content-Type: application/json" \
-d '{
"phone": "+22961000000",
"otp": "482917"
}'
{
"success": true,
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"token_type": "Bearer",
"expires_in": 604800,
"partner": {
"id": 42,
"name": "Boulangerie Central",
"phone": "+22961000000",
"subscription_status": "active",
"plan": "business"
}
}
Admin — Connexion
Les administrateurs Fidelioo s'authentifient avec un email et un mot de passe (pas d'OTP).
| Méthode | Endpoint | Description |
| POST | /api/fr-fr/v1/admin/auth/login | Connexion administrateur (email + mot de passe) |
| POST | /api/fr-fr/v1/admin/auth/logout | Déconnexion et révocation du token |
| POST | /api/fr-fr/v1/admin/auth/refresh | Renouvellement du token |
| GET | /api/fr-fr/v1/admin/auth/me | Informations du compte admin connecté |
curl -X POST https://fidelioo.co/api/fr-fr/v1/admin/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "admin@fidelioo.co",
"password": "motdepasse_securise"
}'
Admin — Gestion des partenaires
Tous ces endpoints nécessitent un token admin valide.
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/admin/partners | Lister tous les partenaires (paginé) |
| GET | /api/fr-fr/v1/admin/partners/{id} | Détails d'un partenaire |
| POST | /api/fr-fr/v1/admin/partners | Créer un partenaire manuellement |
| PUT | /api/fr-fr/v1/admin/partners/{id} | Mettre à jour un partenaire |
| DELETE | /api/fr-fr/v1/admin/partners/{id} | Supprimer un partenaire |
| PATCH | /api/fr-fr/v1/admin/partners/{id}/suspend | Suspendre un compte partenaire |
| PATCH | /api/fr-fr/v1/admin/partners/{id}/activate | Réactiver un compte partenaire |
| GET | /api/fr-fr/v1/admin/partners/{id}/stats | Statistiques d'un partenaire |
| GET | /api/fr-fr/v1/admin/partners/{id}/subscription | Abonnement actuel d'un partenaire |
| POST | /api/fr-fr/v1/admin/partners/{id}/subscription | Modifier l'abonnement d'un partenaire |
| GET | /api/fr-fr/v1/admin/subscription-plans | Lister tous les plans d'abonnement |
| POST | /api/fr-fr/v1/admin/subscription-plans | Créer un nouveau plan |
| PUT | /api/fr-fr/v1/admin/subscription-plans/{id} | Modifier un plan |
| GET | /api/fr-fr/v1/admin/transactions | Toutes les transactions de paiement |
| GET | /api/fr-fr/v1/admin/stats/overview | Statistiques globales de la plateforme |
Admin — Permissions
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/admin/admins | Lister les comptes administrateurs |
| POST | /api/fr-fr/v1/admin/admins | Créer un compte administrateur |
| PUT | /api/fr-fr/v1/admin/admins/{id} | Modifier un administrateur |
| DELETE | /api/fr-fr/v1/admin/admins/{id} | Supprimer un administrateur |
| GET | /api/fr-fr/v1/admin/roles | Lister les rôles disponibles |
| POST | /api/fr-fr/v1/admin/admins/{id}/roles | Assigner un rôle à un admin |
Partenaire — Connexion
| Méthode | Endpoint | Description |
| POST | /api/fr-fr/v1/partner/auth/send-otp | Envoyer un OTP par SMS |
| POST | /api/fr-fr/v1/partner/auth/verify-otp | Vérifier OTP et obtenir le token |
| POST | /api/fr-fr/v1/partner/auth/register | Inscription d'un nouveau partenaire |
| POST | /api/fr-fr/v1/partner/auth/logout | Déconnexion |
| POST | /api/fr-fr/v1/partner/auth/refresh | Renouveler le token |
| GET | /api/fr-fr/v1/partner/auth/me | Profil du partenaire connecté |
| PUT | /api/fr-fr/v1/partner/auth/me | Mettre à jour le profil partenaire |
Abonnement partenaire
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/subscription | Abonnement actuel |
| GET | /api/fr-fr/v1/partner/subscription/plans | Plans disponibles |
| POST | /api/fr-fr/v1/partner/subscription/checkout | Initier un paiement d'abonnement |
| GET | /api/fr-fr/v1/partner/subscription/history | Historique des paiements |
Partenaire — Clubs
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/clubs | Lister tous les clubs |
| POST | /api/fr-fr/v1/partner/clubs | Créer un club |
| GET | /api/fr-fr/v1/partner/clubs/{id} | Détails d'un club |
| PUT | /api/fr-fr/v1/partner/clubs/{id} | Modifier un club |
| DELETE | /api/fr-fr/v1/partner/clubs/{id} | Supprimer un club (si vide) |
| GET | /api/fr-fr/v1/partner/clubs/{id}/stats | Statistiques du club |
| PATCH | /api/fr-fr/v1/partner/clubs/{id}/toggle | Activer / désactiver un club |
curl -X POST https://fidelioo.co/api/fr-fr/v1/partner/clubs \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Club Fidèle Boulangerie Central",
"description": "Programme de fidélité de la Boulangerie Central",
"color": "#f59e0b"
}'
Partenaire — Cartes de fidélité
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/cards/loyalty | Lister les cartes de fidélité |
| POST | /api/fr-fr/v1/partner/cards/loyalty | Créer une carte de fidélité |
| GET | /api/fr-fr/v1/partner/cards/loyalty/{id} | Détails d'une carte |
| PUT | /api/fr-fr/v1/partner/cards/loyalty/{id} | Modifier une carte |
| DELETE | /api/fr-fr/v1/partner/cards/loyalty/{id} | Supprimer une carte |
| GET | /api/fr-fr/v1/partner/cards/loyalty/{id}/rewards | Lister les récompenses d'une carte |
| POST | /api/fr-fr/v1/partner/cards/loyalty/{id}/rewards | Ajouter une récompense |
| PUT | /api/fr-fr/v1/partner/cards/loyalty/{id}/rewards/{rid} | Modifier une récompense |
| DELETE | /api/fr-fr/v1/partner/cards/loyalty/{id}/rewards/{rid} | Supprimer une récompense |
| GET | /api/fr-fr/v1/partner/cards/loyalty/{id}/levels | Niveaux de fidélité |
| POST | /api/fr-fr/v1/partner/cards/loyalty/{id}/levels | Créer un niveau |
| PUT | /api/fr-fr/v1/partner/cards/loyalty/{id}/levels/{lid} | Modifier un niveau |
| GET | /api/fr-fr/v1/partner/cards/loyalty/{id}/stats | Statistiques de la carte |
Partenaire — Cartes tampons
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/cards/stamp | Lister les programmes tampons |
| POST | /api/fr-fr/v1/partner/cards/stamp | Créer un programme tampon |
| GET | /api/fr-fr/v1/partner/cards/stamp/{id} | Détails d'un programme |
| PUT | /api/fr-fr/v1/partner/cards/stamp/{id} | Modifier un programme |
| DELETE | /api/fr-fr/v1/partner/cards/stamp/{id} | Supprimer un programme |
| GET | /api/fr-fr/v1/partner/cards/stamp/{id}/stats | Statistiques tampons |
| PATCH | /api/fr-fr/v1/partner/cards/stamp/{id}/toggle | Activer / désactiver |
Partenaire — Staff
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/staff | Lister les membres du staff |
| POST | /api/fr-fr/v1/partner/staff | Ajouter un membre au staff |
| GET | /api/fr-fr/v1/partner/staff/{id} | Détails d'un membre du staff |
| PUT | /api/fr-fr/v1/partner/staff/{id} | Modifier un membre du staff |
| DELETE | /api/fr-fr/v1/partner/staff/{id} | Retirer un membre du staff |
| GET | /api/fr-fr/v1/partner/staff/{id}/permissions | Permissions d'un staff |
| PUT | /api/fr-fr/v1/partner/staff/{id}/permissions | Modifier les permissions |
| PATCH | /api/fr-fr/v1/partner/staff/{id}/suspend | Suspendre un compte staff |
curl -X POST https://fidelioo.co/api/fr-fr/v1/partner/staff \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"phone": "+22966000001",
"first_name": "Koffi",
"last_name": "Mensah",
"club_ids": [12, 15],
"permissions": ["scan_stamps", "add_points", "validate_coupons"]
}'
Partenaire — Membres
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/members | Lister tous les membres |
| POST | /api/fr-fr/v1/partner/members | Inscrire un membre manuellement |
| GET | /api/fr-fr/v1/partner/members/{id} | Profil complet d'un membre |
| PUT | /api/fr-fr/v1/partner/members/{id} | Modifier le profil d'un membre |
| DELETE | /api/fr-fr/v1/partner/members/{id} | Supprimer un membre |
| GET | /api/fr-fr/v1/partner/members/{id}/points | Solde et historique de points |
| POST | /api/fr-fr/v1/partner/members/{id}/points/adjust | Ajuster les points (+ ou -) |
| GET | /api/fr-fr/v1/partner/members/{id}/stamps | Tampons collectés |
| GET | /api/fr-fr/v1/partner/members/{id}/coupons | Bons de réduction |
| GET | /api/fr-fr/v1/partner/members/{id}/transactions | Historique des transactions |
| PATCH | /api/fr-fr/v1/partner/members/{id}/block | Bloquer un membre |
| PATCH | /api/fr-fr/v1/partner/members/{id}/unblock | Débloquer un membre |
| GET | /api/fr-fr/v1/partner/members/export | Exporter la liste en CSV |
| POST | /api/fr-fr/v1/partner/members/import | Importer des membres via CSV |
Partenaire — Bons de réduction
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/coupons | Lister les campagnes de bons |
| POST | /api/fr-fr/v1/partner/coupons | Créer une campagne de bons |
| GET | /api/fr-fr/v1/partner/coupons/{id} | Détails d'une campagne |
| PUT | /api/fr-fr/v1/partner/coupons/{id} | Modifier une campagne |
| DELETE | /api/fr-fr/v1/partner/coupons/{id} | Supprimer une campagne |
| GET | /api/fr-fr/v1/partner/coupons/{id}/codes | Lister les codes générés |
| POST | /api/fr-fr/v1/partner/coupons/{id}/generate | Générer de nouveaux codes |
| POST | /api/fr-fr/v1/partner/coupons/{id}/distribute | Distribuer les codes par SMS |
| GET | /api/fr-fr/v1/partner/coupons/{id}/stats | Statistiques d'utilisation |
| GET | /api/fr-fr/v1/partner/coupons/validate/{code} | Vérifier la validité d'un code |
curl -X POST https://fidelioo.co/api/fr-fr/v1/partner/coupons \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"campaign_name": "Promo Rentrée 2026",
"type": "percent",
"value": 20,
"min_purchase": 5000,
"max_discount": 10000,
"valid_from": "2026-09-01",
"valid_until": "2026-09-30",
"max_uses": 200,
"max_uses_per_member": 1,
"club_id": 12
}'
Partenaire — Récompenses
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/rewards | Lister toutes les récompenses |
| POST | /api/fr-fr/v1/partner/rewards | Créer une récompense |
| GET | /api/fr-fr/v1/partner/rewards/{id} | Détails d'une récompense |
| PUT | /api/fr-fr/v1/partner/rewards/{id} | Modifier une récompense |
| DELETE | /api/fr-fr/v1/partner/rewards/{id} | Supprimer une récompense |
| GET | /api/fr-fr/v1/partner/rewards/{id}/redemptions | Historique des échanges |
| PATCH | /api/fr-fr/v1/partner/rewards/{id}/toggle | Activer / désactiver |
Partenaire — Transactions
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/partner/transactions | Toutes les transactions (paginé) |
| GET | /api/fr-fr/v1/partner/transactions/{id} | Détails d'une transaction |
| GET | /api/fr-fr/v1/partner/transactions/points | Transactions de points uniquement |
| GET | /api/fr-fr/v1/partner/transactions/stamps | Transactions de tampons uniquement |
| GET | /api/fr-fr/v1/partner/transactions/redemptions | Échanges de récompenses |
| GET | /api/fr-fr/v1/partner/stats/dashboard | Statistiques du tableau de bord |
| GET | /api/fr-fr/v1/partner/stats/members | Statistiques des membres |
| GET | /api/fr-fr/v1/partner/stats/revenue | Indicateurs de revenu et rétention |
Staff — Connexion
| Méthode | Endpoint | Description |
| POST | /api/fr-fr/v1/staff/auth/send-otp | Envoyer un OTP |
| POST | /api/fr-fr/v1/staff/auth/verify-otp | Vérifier OTP et obtenir le token |
| POST | /api/fr-fr/v1/staff/auth/logout | Déconnexion |
| GET | /api/fr-fr/v1/staff/auth/me | Profil du staff connecté |
| GET | /api/fr-fr/v1/staff/auth/permissions | Permissions accordées |
Staff — Membres
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/staff/members | Rechercher un membre |
| GET | /api/fr-fr/v1/staff/members/{id} | Profil d'un membre |
| GET | /api/fr-fr/v1/staff/members/{id}/cards | Cartes d'un membre |
| GET | /api/fr-fr/v1/staff/members/lookup | Recherche par numéro de téléphone |
| POST | /api/fr-fr/v1/staff/members | Inscrire un nouveau membre |
curl -X GET "https://fidelioo.co/api/fr-fr/v1/staff/members/lookup?phone=%2B22961000001" \
-H "Authorization: Bearer {token}"
Staff — Opérations
| Méthode | Endpoint | Description |
| POST | /api/fr-fr/v1/staff/members/points | Attribuer des points (par montant) |
| POST | /api/fr-fr/v1/staff/members/points/manual | Attribution manuelle de points |
| POST | /api/fr-fr/v1/staff/stamps/scan | Valider un tampon (QR code) |
| POST | /api/fr-fr/v1/staff/rewards/redeem | Traiter un échange de récompense |
| POST | /api/fr-fr/v1/staff/coupons/validate | Valider un bon de réduction |
| GET | /api/fr-fr/v1/staff/transactions | Transactions traitées par ce staff |
curl -X POST https://fidelioo.co/api/fr-fr/v1/staff/members/points \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"member_id": 123,
"card_id": 5,
"amount": 7500,
"note": "Achat caisse principale #12983"
}'
curl -X POST https://fidelioo.co/api/fr-fr/v1/staff/rewards/redeem \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"redemption_code": "RDM-48291-K",
"member_pin": "1234"
}'
Membre — Connexion
| Méthode | Endpoint | Description |
| POST | /api/fr-fr/v1/member/auth/send-otp | Envoyer un OTP |
| POST | /api/fr-fr/v1/member/auth/verify-otp | Vérifier OTP et obtenir le token |
| POST | /api/fr-fr/v1/member/auth/logout | Déconnexion |
| POST | /api/fr-fr/v1/member/auth/refresh | Renouveler le token |
| GET | /api/fr-fr/v1/member/auth/me | Profil du membre connecté |
| PUT | /api/fr-fr/v1/member/auth/me | Modifier le profil |
| POST | /api/fr-fr/v1/member/auth/pin | Définir ou modifier le PIN |
| POST | /api/fr-fr/v1/member/auth/pin/reset | Réinitialiser le PIN via OTP |
Membre — Cartes
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/member/cards | Toutes les cartes du membre |
| GET | /api/fr-fr/v1/member/cards/loyalty | Cartes de fidélité uniquement |
| GET | /api/fr-fr/v1/member/cards/loyalty/{id} | Détails et solde de points |
| GET | /api/fr-fr/v1/member/cards/loyalty/{id}/rewards | Récompenses disponibles |
| POST | /api/fr-fr/v1/member/cards/loyalty/{id}/rewards/{rid}/request | Demander un échange de récompense |
| GET | /api/fr-fr/v1/member/cards/loyalty/{id}/transactions | Historique des points |
| GET | /api/fr-fr/v1/member/cards/stamp | Cartes tampons |
| GET | /api/fr-fr/v1/member/cards/stamp/{id} | Détails et compteur de tampons |
| GET | /api/fr-fr/v1/member/qr-code | QR code personnel du membre |
| POST | /api/fr-fr/v1/member/cards/join/{club_id} | Rejoindre un club |
{
"success": true,
"data": [
{
"id": 5,
"name": "Carte Fidélité Premium",
"club": { "id": 12, "name": "Boulangerie Central" },
"points_balance": 127,
"level": {
"name": "Or",
"multiplier": 2,
"next_level": "Platine",
"points_to_next": 373
},
"color": "#2563eb",
"available_rewards": 3
}
]
}
Membre — Bons
| Méthode | Endpoint | Description |
| GET | /api/fr-fr/v1/member/coupons | Tous les bons du membre |
| GET | /api/fr-fr/v1/member/coupons/active | Bons actifs et utilisables |
| GET | /api/fr-fr/v1/member/coupons/{code} | Détails d'un bon spécifique |
| POST | /api/fr-fr/v1/member/coupons/redeem | Utiliser un bon |
| GET | /api/fr-fr/v1/member/notifications | Notifications du membre |
| PATCH | /api/fr-fr/v1/member/notifications/{id}/read | Marquer comme lu |
Codes d'erreur
L'API Fidelioo retourne des codes d'erreur HTTP standards accompagnés d'un code d'erreur applicatif pour faciliter le débogage.
| HTTP | Code applicatif | Description |
400 | VALIDATION_ERROR | Données de la requête invalides ou manquantes |
401 | UNAUTHENTICATED | Token absent, invalide ou expiré |
403 | FORBIDDEN | Action non autorisée pour ce rôle ou cette ressource |
403 | SUBSCRIPTION_REQUIRED | Abonnement actif requis pour cette fonctionnalité |
403 | PLAN_LIMIT_REACHED | Limite du plan atteinte (ex. : nombre de cartes max.) |
404 | NOT_FOUND | Ressource introuvable |
409 | ALREADY_EXISTS | La ressource existe déjà |
409 | OTP_ALREADY_SENT | Un OTP a déjà été envoyé, patientez avant de renvoyer |
422 | OTP_INVALID | Code OTP incorrect |
422 | OTP_EXPIRED | Code OTP expiré (délai de 10 minutes dépassé) |
422 | PIN_INVALID | PIN membre incorrect |
422 | INSUFFICIENT_POINTS | Points insuffisants pour cet échange |
422 | COUPON_EXPIRED | Bon de réduction expiré |
422 | COUPON_ALREADY_USED | Bon déjà utilisé par ce membre |
422 | COUPON_MAX_USES_REACHED | Quota d'utilisation de ce bon épuisé |
422 | MEMBER_BLOCKED | Compte membre suspendu |
429 | TOO_MANY_ATTEMPTS | Trop de tentatives, patientez 15 minutes |
500 | SERVER_ERROR | Erreur interne du serveur |
503 | PAYMENT_GATEWAY_ERROR | Erreur de communication avec Feexpay |
Rate limiting
L'API applique des limites de débit pour protéger la plateforme :
| Endpoint | Limite | Fenêtre |
| Envoi OTP | 3 requêtes | 15 minutes par numéro |
| Vérification OTP | 3 tentatives | 15 minutes par numéro |
| API générale (auth) | 60 requêtes | 1 minute par token |
| API générale (non auth) | 30 requêtes | 1 minute par IP |
Les en-têtes de rate limiting sont inclus dans chaque réponse : X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.