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 :
- Cookie de session — défini après
POST /auth/login. Header :Cookie: session=... - Clé API — pour les accès programme. Header :
X-API-Key: ak_votrecle
Catalogue public
/catalogueListe publique du catalogue. Aucune authentification requise.
Paramètres de requête
| Param | Type | Description |
|---|---|---|
query | string | Recherche texte |
categorySlug | string | Filtrer par catégorie |
sortBy | string | newest | price_asc | price_desc | popularity | commission_desc |
featured | boolean | Offres en vedette uniquement |
limit | integer | Nb résultats (défaut 20) |
offset | integer | Pagination (défaut 0) |
{
"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 }
}/catalogue/featuredRetourne les offres en vedette triées par popularité. Paramètre optionnel limit (défaut 6).
/catalogue/:idDétail public d'une offre active. Retourne 404 si l'offre n'existe pas ou n'est pas active.
Commissions
/api/commissionsListe les commissions de l'utilisateur authentifié. Supporte les filtres par statut et période.
Paramètres de requête
| Param | Description |
|---|---|
status | pending | approved | available | paid | reversed |
from | Date début (ISO 8601) |
to | Date fin (ISO 8601) |
offerId | Filtrer par offre |
Clés API
/api/api-keysListe 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.
/api/api-keysCrée une nouvelle clé API. La clé brute est retournée une seule fois dans data.apiKey.
// 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"
}
}/api/api-keys/:id/rotateRévoque l'ancienne clé et en génère une nouvelle. L'ancienne cesse de fonctionner immédiatement.
/api/api-keys/:idRévoque (soft delete) une clé API. La clé ne pourra plus être utilisée.
Scopes des clés API
| Scope | Permissions |
|---|---|
read | Lecture des ressources publiques et privées |
write | Création et modification des ressources |
admin | Actions administratives (config, utilisateurs) |
webhook | Gestion des webhooks/postbacks |
Codes d'erreur
| Code | HTTP | Description |
|---|---|---|
VALIDATION_ERROR | 400 | Données invalides |
UNAUTHORIZED | 401 | Authentification requise |
FORBIDDEN | 403 | Permissions insuffisantes |
NOT_FOUND | 404 | Ressource inexistante |
RATE_LIMIT_EXCEEDED | 429 | Trop de requêtes |
INTERNAL_ERROR | 500 | Erreur serveur |
Pagination
Les endpoints paginés utilisent limit/offset et retournent un objet meta :
{
"success": true,
"data": [...],
"meta": {
"total": 150,
"limit": 20,
"offset": 0
}
}