Documentation/API publique

Référence API

Documentation complète des endpoints REST Flendra. Tous les endpoints retournent du JSON avec un discriminateur success: true/false.

Authentification

Deux méthodes sont supportées :

  1. Cookie de session — défini après POST /auth/login. Header : Cookie: session=...
  2. Clé API — pour les accès programme. Header : X-API-Key: ak_votrecle

Catalogue public

GET/catalogue

Liste publique du catalogue. Aucune authentification requise.

Paramètres de requête

ParamTypeDescription
querystringRecherche texte
categorySlugstringFiltrer par catégorie
sortBystringnewest | price_asc | price_desc | popularity | commission_desc
featuredbooleanOffres en vedette uniquement
limitintegerNb résultats (défaut 20)
offsetintegerPagination (défaut 0)
json
{
  "success": true,
  "data": [
    {
      "id": "off_abc123",
      "productId": "prod_xyz",
      "vendorId": "usr_vendor1",
      "title": "Formation Marketing Digital",
      "description": "Apprenez le marketing digital en 30 jours",
      "price": 4999,
      "currency": "EUR",
      "commissionType": "percentage",
      "commissionValue": 30,
      "status": "active",
      "featured": true,
      "popularityScore": 152,
      "category": "Formation",
      "imageUrl": "https://...",
      "offerUrl": "/offers/off_abc123"
    }
  ],
  "meta": { "total": 42, "limit": 20, "offset": 0 }
}
GET/catalogue/featured

Retourne les offres en vedette triées par popularité. Paramètre optionnel limit (défaut 6).

GET/catalogue/:id

Détail public d'une offre active. Retourne 404 si l'offre n'existe pas ou n'est pas active.

Commissions

GET/api/commissions

Liste les commissions de l'utilisateur authentifié. Supporte les filtres par statut et période.

Paramètres de requête

ParamDescription
statuspending | approved | available | paid | reversed
fromDate début (ISO 8601)
toDate fin (ISO 8601)
offerIdFiltrer par offre

Clés API

GET/api/api-keys

Liste les clés API actives de l'utilisateur. Les préfixes sont visibles, les clés complètes ne le sont jamais après création.

POST/api/api-keys

Crée une nouvelle clé API. La clé brute est retournée une seule fois dans data.apiKey.

json
// Request body
{
  "name": "Mon integration",
  "scopes": ["read", "write"],
  "permissions": ["PRODUCT_READ", "OFFER_READ"]
}

// Response
{
  "success": true,
  "data": {
    "id": "key_abc123",
    "name": "Mon integration",
    "keyPrefix": "ak_abc1...",
    "apiKey": "ak_abc123def456...complet",
    "scopes": ["read", "write"],
    "permissions": ["PRODUCT_READ", "OFFER_READ"],
    "expiresAt": null,
    "createdAt": "2026-06-17T10:30:00.000Z"
  }
}
POST/api/api-keys/:id/rotate

Révoque l'ancienne clé et en génère une nouvelle. L'ancienne cesse de fonctionner immédiatement.

DELETE/api/api-keys/:id

Révoque (soft delete) une clé API. La clé ne pourra plus être utilisée.

Scopes des clés API

ScopePermissions
readLecture des ressources publiques et privées
writeCréation et modification des ressources
adminActions administratives (config, utilisateurs)
webhookGestion des webhooks/postbacks

Codes d'erreur

CodeHTTPDescription
VALIDATION_ERROR400Données invalides
UNAUTHORIZED401Authentification requise
FORBIDDEN403Permissions insuffisantes
NOT_FOUND404Ressource inexistante
RATE_LIMIT_EXCEEDED429Trop de requêtes
INTERNAL_ERROR500Erreur serveur

Pagination

Les endpoints paginés utilisent limit/offset et retournent un objet meta :

json
{
  "success": true,
  "data": [...],
  "meta": {
    "total": 150,
    "limit": 20,
    "offset": 0
  }
}