Fidelioo
ai.fidelioo.co

Agent API Fidelioo

Interface machine-à-machine (M2M) de Fidelioo, conçue pour les agents IA, systèmes de caisse, automates et plateformes d'intégration.

Authentification par clé

En-tête X-Agent-Key au lieu d'un token Bearer — pas de session, pas de refresh.

Compatible OpenAI

Endpoint de découverte retournant les outils au format function calling d'OpenAI.

Scopes granulaires

Chaque clé dispose de scopes précis : lecture seule, lecture-écriture ou admin.

Audit complet

Chaque action effectuée via l'Agent API est tracée avec horodatage, IP et résultat.

Différences avec l'API REST standard

CaractéristiqueAPI RESTAgent API
AuthentificationAuthorization: Bearer {token}X-Agent-Key: fid_agent_xxx
Gestion de sessionToken avec expiration et refreshClé permanente (jusqu'à révocation)
Public cibleApplications web / mobileAgents IA, POS, automatisations
DiscoveryNon disponibleEndpoint /tools format OpenAI
Audit trailLogs standardJournaux d'audit détaillés et exportables
URL de base/api/{locale}/v1//api/agent/v1/
Plan requis : L'accès à l'Agent API est disponible exclusivement sur le plan Enterprise. Pour les intégrations basiques, l'API REST standard suffit et est disponible dès le plan Starter.

Créer une clé d'agent

Les clés d'agent se gèrent depuis le tableau de bord partenaire, rubrique Paramètres → API → Clés d'agent.

Étapes de création

  1. Accédez à Paramètres → Intégrations → Agent API
  2. Cliquez sur Nouvelle clé d'agent
  3. Donnez un nom descriptif à la clé (ex. : "Caisse principale - POS", "ChatBot WhatsApp")
  4. Sélectionnez le type de clé (lecture seule, lecture-écriture ou admin)
  5. Sélectionnez les scopes nécessaires
  6. Optionnellement, restreignez l'accès par adresse IP
  7. Cliquez sur Générer
Attention : La clé complète n'est affichée qu'une seule fois lors de la création. Copiez-la immédiatement et stockez-la dans un endroit sécurisé (gestionnaire de secrets). Il n'est pas possible de la récupérer ultérieurement — vous devrez en créer une nouvelle si vous la perdez.

Format d'une clé d'agent

fid_agent_sk_prod_a8b3c9d2e1f4g5h6i7j8k9l0m1n2o3p4

Les clés suivent le format fid_agent_{env}_{secret_aléatoire}env est sk_prod (production) ou sk_test (test).

Gestion du cycle de vie

ActionEndpoint adminDescription
ListerGET /api/agent/v1/partner/keysToutes les clés actives
CréerPOST /api/agent/v1/partner/keysNouvelle clé d'agent
DétailsGET /api/agent/v1/partner/keys/{id}Infos sur une clé (sans le secret)
ModifierPUT /api/agent/v1/partner/keys/{id}Renommer, modifier les scopes
RévoquerDELETE /api/agent/v1/partner/keys/{id}Révocation immédiate et permanente
RotationPOST /api/agent/v1/partner/keys/{id}/rotateRégénère le secret, révoque l'ancien

Première requête

Une fois votre clé générée, effectuez votre première requête pour vérifier que tout fonctionne correctement.

cURL — Première requête
curl -X GET https://fidelioo.co/api/agent/health \
  -H "X-Agent-Key: fid_agent_sk_prod_a8b3c9d2e1f4g5h6i7j8k9l0m1n2o3p4"
JSON — Réponse attendue
{
  "status": "ok",
  "timestamp": "2026-03-27T09:30:00Z",
  "version": "1.0.0",
  "agent": {
    "key_id": "key_48291",
    "name": "Caisse principale - POS",
    "partner": "Boulangerie Central",
    "type": "read_write",
    "scopes": ["members:read", "points:write", "stamps:write"],
    "ip_restriction": null
  }
}

En-têtes requis

En-têteValeurRequis
X-Agent-KeyVotre clé d'agent complèteOui
Content-Typeapplication/jsonPour les requêtes POST/PUT
X-Agent-Trace-IdIdentifiant unique de la requêteNon (recommandé)
X-Agent-SourceNom du système appelant (ex. : "POS-CAISSE-1")Non (recommandé)
Traçabilité : Fournissez toujours X-Agent-Trace-Id avec un UUID unique par requête. Cet identifiant apparaîtra dans les journaux d'audit et facilitera le débogage en production.

Vérification de santé

L'endpoint de santé permet de vérifier la disponibilité de l'Agent API sans authentification (pour les sondes de monitoring) ou avec authentification (pour vérifier la validité de la clé).

MéthodeEndpointAuth requiseDescription
GET/api/agent/healthNonStatut de l'API (public)
GET/api/agent/healthOuiStatut + infos de la clé
GET/api/agent/docsNonDocumentation HTML interactive
GET/api/agent/docs.jsonNonDocumentation au format JSON
JSON — Réponse health (sans auth)
{
  "status": "ok",
  "timestamp": "2026-03-27T09:30:00Z",
  "version": "1.0.0",
  "services": {
    "database": "ok",
    "cache": "ok",
    "sms": "ok"
  }
}

Types de clés

Fidelioo propose trois types de clés d'agent avec des niveaux d'accès progressifs :

LECTURE SEULE read_only

Peut uniquement lire les données (membres, cartes, transactions, statistiques). Aucune modification possible. Idéal pour les tableaux de bord et les systèmes d'analyse.

LECTURE-ÉCRITURE read_write

Peut lire et modifier les données opérationnelles : ajouter des points, valider des tampons, créer des membres, utiliser des bons. Recommandé pour les systèmes de caisse et les chatbots.

ADMIN admin

Accès complet incluant la gestion des partenaires, la configuration des plans et les opérations sensibles. À utiliser uniquement pour les automatisations d'administration internes.

Scopes disponibles

Chaque clé peut être limitée à des scopes spécifiques pour appliquer le principe du moindre privilège.

ScopeTypeDescription
members:readREADConsulter la liste et les profils des membres
members:writeWRITECréer et modifier des membres
points:readREADConsulter les soldes et l'historique des points
points:writeWRITEAttribuer et déduire des points
stamps:readREADConsulter les tampons collectés
stamps:writeWRITEValider des tampons
rewards:readREADLister les récompenses disponibles
rewards:writeWRITETraiter les échanges de récompenses
coupons:readREADConsulter et vérifier les bons
coupons:writeWRITECréer et distribuer des bons
clubs:readREADConsulter les clubs
clubs:writeWRITECréer et modifier des clubs
cards:readREADConsulter les cartes de fidélité et tampons
cards:writeWRITECréer et modifier des cartes
staff:readREADConsulter le staff
staff:writeWRITEGérer le staff et leurs permissions
transactions:readREADLire l'historique des transactions
stats:readREADAccéder aux statistiques et tableaux de bord
partners:readADMINLister et consulter tous les partenaires
partners:writeADMINCréer et modifier des partenaires
subscriptions:writeADMINModifier les abonnements des partenaires
audit:readADMINAccéder aux journaux d'audit complets

Sécurité

Restriction par IP

Chaque clé d'agent peut être restreinte à une liste d'adresses IP autorisées. Toute requête provenant d'une IP non autorisée sera rejetée avec une erreur 403 IP_NOT_ALLOWED.

JSON — Configuration restriction IP
{
  "name": "Caisse principale - POS",
  "type": "read_write",
  "scopes": ["members:read", "points:write", "stamps:write"],
  "allowed_ips": ["196.192.168.1", "196.192.168.2"]
}

Rotation des clés

Il est recommandé de faire tourner les clés d'agent régulièrement (tous les 90 jours en production). La rotation génère une nouvelle clé et révoque automatiquement l'ancienne après un délai de grâce configurable (0 à 24 heures).

Révocation d'urgence

En cas de compromission suspectée d'une clé, révoquez-la immédiatement depuis le tableau de bord ou via l'API admin. La révocation est instantanée — toutes les requêtes ultérieures avec cette clé retourneront 401 KEY_REVOKED.

Bonnes pratiques

  • Créez une clé distincte par système ou application (une clé par caisse, une clé par chatbot, etc.)
  • Appliquez le principe du moindre privilège : accordez uniquement les scopes nécessaires
  • Activez la restriction IP pour les systèmes avec une IP fixe
  • Stockez les clés dans un gestionnaire de secrets (HashiCorp Vault, AWS Secrets Manager, etc.)
  • Ne transmettez jamais les clés dans des URLs ou des logs
  • Configurez des alertes sur les anomalies d'utilisation dans les journaux d'audit
Ne commettez jamais vos clés dans git. Utilisez des variables d'environnement (.env) et assurez-vous que .env figure dans votre .gitignore.

Format OpenAI — Tool Calling

L'Agent API Fidelioo est entièrement compatible avec le format function calling d'OpenAI (et tout LLM supportant ce standard). L'endpoint de découverte retourne la liste des outils disponibles dans le format attendu par l'API OpenAI.

Cela permet à un agent IA (GPT-4, Claude, Gemini, etc.) d'appeler automatiquement les fonctions Fidelioo selon le contexte de la conversation avec le client.

Exemple d'outil — Format OpenAI

JSON — Réponse GET /api/agent/v1/tools?format=openai
{
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add_loyalty_points",
        "description": "Ajoute des points de fidélité à un membre en fonction du montant d'un achat",
        "parameters": {
          "type": "object",
          "properties": {
            "member_id": {
              "type": "integer",
              "description": "Identifiant unique du membre"
            },
            "card_id": {
              "type": "integer",
              "description": "Identifiant de la carte de fidélité"
            },
            "amount": {
              "type": "number",
              "description": "Montant de l'achat en XOF"
            },
            "note": {
              "type": "string",
              "description": "Note optionnelle pour la transaction"
            }
          },
          "required": ["member_id", "card_id", "amount"]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "validate_stamp",
        "description": "Valide un tampon pour un membre dans un programme tampon",
        "parameters": {
          "type": "object",
          "properties": {
            "member_id": {
              "type": "integer",
              "description": "Identifiant unique du membre"
            },
            "stamp_card_id": {
              "type": "integer",
              "description": "Identifiant du programme tampon"
            }
          },
          "required": ["member_id", "stamp_card_id"]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "get_member_by_phone",
        "description": "Recherche un membre par son numéro de téléphone et retourne son profil avec ses cartes",
        "parameters": {
          "type": "object",
          "properties": {
            "phone": {
              "type": "string",
              "description": "Numéro de téléphone au format international (ex: +22961000000)"
            }
          },
          "required": ["phone"]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "redeem_reward",
        "description": "Traite l'échange d'une récompense par un membre",
        "parameters": {
          "type": "object",
          "properties": {
            "redemption_code": {
              "type": "string",
              "description": "Code d'échange généré par le membre"
            },
            "member_pin": {
              "type": "string",
              "description": "PIN à 4 chiffres du membre pour confirmation"
            }
          },
          "required": ["redemption_code", "member_pin"]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "validate_coupon",
        "description": "Vérifie la validité d'un bon de réduction et l'applique à une transaction",
        "parameters": {
          "type": "object",
          "properties": {
            "coupon_code": {
              "type": "string",
              "description": "Code du bon de réduction"
            },
            "member_id": {
              "type": "integer",
              "description": "Identifiant du membre qui utilise le bon"
            },
            "purchase_amount": {
              "type": "number",
              "description": "Montant de l'achat en XOF avant réduction"
            }
          },
          "required": ["coupon_code", "purchase_amount"]
        }
      }
    }
  ]
}

Intégration avec un assistant IA

Voici comment utiliser ces outils avec l'API OpenAI :

Python — Intégration OpenAI
import requests
from openai import OpenAI

# Récupérer les outils Fidelioo
fidelioo_tools = requests.get(
    "https://fidelioo.co/api/agent/v1/tools",
    params={"format": "openai"},
    headers={"X-Agent-Key": "fid_agent_sk_prod_xxx"}
).json()["tools"]

# Initialiser le client OpenAI
client = OpenAI()

# Appel au LLM avec les outils Fidelioo disponibles
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "Tu es un assistant de caisse pour la Boulangerie Central."},
        {"role": "user", "content": "Le client +22961000001 vient d'acheter pour 3500 FCFA."}
    ],
    tools=fidelioo_tools,
    tool_choice="auto"
)

Endpoints de découverte

MéthodeEndpointDescription
GET/api/agent/healthVérification de santé de l'Agent API
GET/api/agent/docsDocumentation HTML interactive complète
GET/api/agent/docs.jsonDocumentation machine-readable (JSON Schema)
GET/api/agent/v1/toolsListe des outils disponibles (format natif)
GET/api/agent/v1/tools?format=openaiOutils au format OpenAI function calling
GET/api/agent/v1/tools?format=anthropicOutils au format Anthropic tool use
GET/api/agent/v1/tools/{name}Détails d'un outil spécifique
GET/api/agent/v1/scopesListe des scopes disponibles pour cette clé

Paramètres de l'endpoint tools

ParamètreValeursDescription
formatnative, openai, anthropicFormat de sortie des outils
scopeex. points:writeFiltrer les outils par scope
categorymembers, points, stamps, etc.Filtrer par catégorie
langfr, enLangue des descriptions

Référence — Endpoints Admin

Ces endpoints nécessitent une clé de type ADMIN avec les scopes correspondants.

Gestion des partenaires

MéthodeEndpointScopeDescription
GET/api/agent/v1/admin/partnerspartners:readLister tous les partenaires
GET/api/agent/v1/admin/partners/{id}partners:readDétails d'un partenaire
POST/api/agent/v1/admin/partnerspartners:writeCréer un partenaire
PUT/api/agent/v1/admin/partners/{id}partners:writeModifier un partenaire
PATCH/api/agent/v1/admin/partners/{id}/suspendpartners:writeSuspendre un partenaire
PATCH/api/agent/v1/admin/partners/{id}/activatepartners:writeRéactiver un partenaire

Gestion des abonnements

MéthodeEndpointScopeDescription
GET/api/agent/v1/admin/partners/{id}/subscriptionpartners:readAbonnement d'un partenaire
POST/api/agent/v1/admin/partners/{id}/subscriptionsubscriptions:writeModifier l'abonnement
POST/api/agent/v1/admin/partners/{id}/subscription/extendsubscriptions:writeProlonger l'abonnement
GET/api/agent/v1/admin/statsstats:readStatistiques globales plateforme

Référence — Endpoints Partenaire

Ces endpoints permettent à un système d'automatiser la gestion complète d'un espace partenaire.

Membres

MéthodeEndpointScopeDescription
GET/api/agent/v1/partner/membersmembers:readLister les membres
GET/api/agent/v1/partner/members/{id}members:readProfil d'un membre
GET/api/agent/v1/partner/members/lookupmembers:readRecherche par téléphone
POST/api/agent/v1/partner/membersmembers:writeCréer un membre
PUT/api/agent/v1/partner/members/{id}members:writeModifier un membre

Points et tampons

MéthodeEndpointScopeDescription
GET/api/agent/v1/partner/members/{id}/pointspoints:readSolde et historique de points
POST/api/agent/v1/partner/points/addpoints:writeAttribuer des points (par montant)
POST/api/agent/v1/partner/points/deductpoints:writeDéduire des points
GET/api/agent/v1/partner/members/{id}/stampsstamps:readTampons collectés
POST/api/agent/v1/partner/stamps/validatestamps:writeValider un tampon

Récompenses et bons

MéthodeEndpointScopeDescription
GET/api/agent/v1/partner/rewardsrewards:readLister les récompenses actives
POST/api/agent/v1/partner/rewards/redeemrewards:writeTraiter un échange de récompense
GET/api/agent/v1/partner/coupons/check/{code}coupons:readVérifier un bon de réduction
POST/api/agent/v1/partner/coupons/applycoupons:writeAppliquer un bon à une transaction
POST/api/agent/v1/partner/coupons/generatecoupons:writeGénérer un bon pour un membre

Statistiques

MéthodeEndpointScopeDescription
GET/api/agent/v1/partner/stats/dashboardstats:readKPIs du tableau de bord
GET/api/agent/v1/partner/stats/membersstats:readStatistiques membres
GET/api/agent/v1/partner/transactionstransactions:readHistorique des transactions
cURL — Attribuer des points via Agent API
curl -X POST https://fidelioo.co/api/agent/v1/partner/points/add \
  -H "X-Agent-Key: fid_agent_sk_prod_a8b3c9d2e1f4g5h6" \
  -H "X-Agent-Trace-Id: req_7f3a9b2c-1d4e-5f6a-7b8c-9d0e1f2a3b4c" \
  -H "X-Agent-Source: POS-CAISSE-1" \
  -H "Content-Type: application/json" \
  -d '{
    "member_id": 123,
    "card_id": 5,
    "amount": 7500,
    "note": "Achat caisse #4892 - 27/03/2026"
  }'
JSON — Réponse succès
{
  "success": true,
  "data": {
    "transaction_id": "txn_48291abc",
    "member_id": 123,
    "card_id": 5,
    "amount_spent": 7500,
    "points_earned": 15,
    "points_balance_before": 127,
    "points_balance_after": 142,
    "level": "Or",
    "multiplier_applied": 2,
    "timestamp": "2026-03-27T09:35:12Z"
  },
  "audit": {
    "trace_id": "req_7f3a9b2c-1d4e-5f6a-7b8c-9d0e1f2a3b4c",
    "agent_key_id": "key_48291",
    "source": "POS-CAISSE-1"
  }
}

Référence — Endpoints Staff

Ces endpoints sont dédiés aux opérations de point de vente effectuées au nom d'un membre du staff.

MéthodeEndpointScopeDescription
GET/api/agent/v1/staff/members/lookupmembers:readChercher un membre par téléphone ou QR
POST/api/agent/v1/staff/points/addpoints:writeAttribuer des points (avec ID staff)
POST/api/agent/v1/staff/stamps/scanstamps:writeScanner et valider un tampon
POST/api/agent/v1/staff/rewards/redeemrewards:writeValider un échange de récompense
POST/api/agent/v1/staff/coupons/validatecoupons:writeValider et appliquer un bon
GET/api/agent/v1/staff/transactionstransactions:readTransactions du staff
cURL — Scanner un tampon via Agent API
curl -X POST https://fidelioo.co/api/agent/v1/staff/stamps/scan \
  -H "X-Agent-Key: fid_agent_sk_prod_a8b3c9d2e1f4g5h6" \
  -H "X-Agent-Trace-Id: req_unique_uuid_here" \
  -H "Content-Type: application/json" \
  -d '{
    "qr_token": "QR_M123_STAMP_1711530912_abc123",
    "staff_id": 7,
    "stamp_card_id": 3
  }'
JSON — Réponse tampon validé
{
  "success": true,
  "data": {
    "stamp_transaction_id": "stmp_91827abc",
    "member": {
      "id": 123,
      "name": "Kouassi Attiogbe",
      "phone": "+22961000001"
    },
    "stamp_card": {
      "id": 3,
      "name": "10ème café offert",
      "stamps_before": 6,
      "stamps_after": 7,
      "stamps_required": 10,
      "progress_percent": 70
    },
    "reward_unlocked": false,
    "timestamp": "2026-03-27T10:15:44Z"
  }
}

Journaux d'audit

Chaque requête effectuée via l'Agent API génère une entrée dans le journal d'audit. Ces journaux sont immuables, horodatés et conservés pendant 2 ans.

Structure d'une entrée d'audit

JSON — Entrée journal d'audit
{
  "id": "audit_1a2b3c4d5e",
  "timestamp": "2026-03-27T10:15:44Z",
  "agent_key": {
    "id": "key_48291",
    "name": "Caisse principale - POS"
  },
  "partner_id": 42,
  "action": "points.add",
  "resource_type": "member",
  "resource_id": 123,
  "source_ip": "196.192.168.1",
  "trace_id": "req_7f3a9b2c-1d4e-5f6a-7b8c-9d0e1f2a3b4c",
  "source_label": "POS-CAISSE-1",
  "request_body": {
    "member_id": 123,
    "card_id": 5,
    "amount": 7500
  },
  "response_status": 200,
  "result": "success",
  "duration_ms": 48
}

Accès aux journaux d'audit

MéthodeEndpointDescription
GET/api/agent/v1/admin/auditLister les entrées d'audit (admin)
GET/api/agent/v1/partner/auditJournaux d'audit du partenaire
GET/api/agent/v1/partner/audit/{id}Détails d'une entrée spécifique
GET/api/agent/v1/partner/audit/exportExporter en CSV (date de début/fin)

Filtres de recherche

Les journaux peuvent être filtrés avec les paramètres suivants :

  • from / to — Plage de dates (ISO 8601)
  • action — Type d'action (ex. : points.add, stamps.validate)
  • key_id — Filtrer par clé d'agent spécifique
  • member_id — Toutes les actions sur un membre donné
  • resultsuccess ou error
  • trace_id — Recherche exacte par trace ID

Checklist production

Avant de mettre votre intégration Agent API en production, vérifiez les points suivants :

Clé de test vs production
Utilisez une clé sk_test en développement et une clé sk_prod en production. Ne mélangez jamais les deux environnements.
Scopes au minimum nécessaire
N'accordez que les scopes dont votre système a réellement besoin. Un système de caisse n'a pas besoin de subscriptions:write.
Restriction IP activée
Si votre système dispose d'une IP fixe, activez la restriction IP pour empêcher toute utilisation non autorisée de la clé.
Gestion des erreurs implémentée
Gérez au minimum : 401 (clé invalide), 429 (rate limit), 422 (erreur métier), 5xx (erreurs serveur avec retry exponentiel).
X-Agent-Trace-Id envoyé à chaque requête
Générez un UUID unique par requête et envoyez-le dans l'en-tête X-Agent-Trace-Id. Conservez ce trace ID dans vos propres logs pour corrélation.
Idempotence vérifiée
Pour les opérations d'écriture critiques (ajout de points, validation de tampons), testez le comportement en cas de double envoi. Utilisez le même trace_id pour les retentatives afin d'éviter les doublons.
Health check intégré à votre monitoring
Sondez GET /api/agent/health depuis votre système de monitoring (Uptime Kuma, Datadog, etc.) pour être alerté en cas d'indisponibilité.
Plan de rotation des clés défini
Planifiez la rotation automatique des clés tous les 90 jours. Utilisez l'endpoint /keys/{id}/rotate avec un délai de grâce de 1 heure pour éviter les interruptions.
Prêt pour la production ? Si tous ces points sont vérifiés, votre intégration est prête. Pour toute question ou assistance, contactez notre équipe technique via fidelioo.co/contact.