EventCollab — API Documentation · Plateforme Super Admin (GroupDev SAS)
Base URL :
https://api.eventcollab.app/api/v1Auth : Bearer Token (Laravel Sanctum) Rôle requis :super_adminContent-Type :application/json
Authentification
Tous les appels (sauf login) nécessitent le header :
Authorization: Bearer {token}
1. Auth
Login
POST /auth/login
{
"email": "admin@groupdev.app",
"password": "motdepasse"
}
Réponse
{
"success": true,
"data": {
"token": "1|abc123...",
"user": {
"id": 1,
"name": "Super Admin",
"email": "admin@groupdev.app",
"roles": ["super_admin"]
}
}
}
Profil connecté
GET /auth/me
Logout
POST /auth/logout
2. Tableau de bord global
Statistiques de la plateforme
GET /admin/stats
Réponse
{
"data": {
"total_organizations": 48,
"active_organizations": 42,
"total_users": 1230,
"plans_breakdown": [
{ "subscription_plan": "starter", "count": 18 },
{ "subscription_plan": "pro", "count": 22 },
{ "subscription_plan": "enterprise", "count": 8 }
]
}
}
3. Gestion des Organisations
Lister toutes les organisations (avec soft-deleted)
GET /admin/organizations?search=GPBM&plan=pro&per_page=20
Query params : search, plan (starter|pro|enterprise), per_page
Créer une organisation
POST /admin/organizations
{
"name": "Institut de Formation GPBM",
"email": "contact@gpbm.bj",
"phone": "+22997000000",
"country": "Bénin",
"subscription_plan": "pro"
}
Suspendre une organisation
POST /admin/organizations/{id}/suspend
{
"reason": "Facture impayée depuis 30 jours"
}
Restaurer une organisation suspendue
POST /admin/organizations/{id}/restore
Changer le plan d'abonnement
POST /admin/organizations/{id}/plan
{
"plan": "enterprise",
"note": "Négociation commerciale — contrat signé le 2026-06-27"
}
4. Plans d'abonnement
Lister les plans
GET /admin/plans
Créer un plan
POST /admin/plans
{
"name": "Enterprise",
"slug": "enterprise",
"price": 150000,
"currency": "XOF",
"billing_cycle": "monthly",
"features": {
"max_programs": null,
"max_participants": null,
"max_users": null,
"has_kahoot": true,
"has_certificates": true,
"has_accommodation": true,
"has_api_access": true
},
"is_active": true
}
Modifier un plan
PUT /admin/plans/{id}
(même body que POST, tous les champs optionnels)
5. Méthodes de Paiement & Grille Tarifaire
Lister les méthodes de paiement
GET /admin/payment-methods
Créer une méthode de paiement
POST /admin/payment-methods
{
"code": "mtn_bj",
"name": "MTN Mobile Money Bénin",
"type": "mobile_money",
"gateway_driver": "feexpay",
"country_id": 1,
"logo_path": "/images/mtn.png",
"color": "#FFCC00",
"ussd_code": "*880#",
"min_amount": 100,
"max_amount": 1000000,
"usable_for_payment": true,
"usable_for_withdrawal": true,
"is_active": true,
"gateway_config": {
"requires_otp": false,
"requires_return_url": false,
"feexpay_operator": "MTN"
}
}
Modifier une méthode
PUT /admin/payment-methods/{id}
Activer / Désactiver
PATCH /admin/payment-methods/{id}/toggle
Lister les paliers tarifaires d'une méthode
GET /admin/payment-methods/{id}/tiers
Ajouter un palier tarifaire
POST /admin/payment-methods/{id}/tiers
{
"label": "Standard MTN BJ",
"amount_min": 100,
"amount_max": null,
"aggregator_fee_type": "percentage",
"aggregator_percentage": 1.70,
"aggregator_flat": 0,
"aggregator_cap": null,
"platform_fee_type": "percentage",
"platform_percentage": 0.80,
"platform_flat": 0,
"platform_cap": null,
"who_pays": "participant",
"is_active": true
}
Explication des taux :
aggregator_*: ce que FeexPay prélève (non négociable, 1.7% MTN BJ)platform_*: commission EventCollab (0.8% MTN BJ)who_pays: par défaut qui supporte les frais (peut être surchargé par programme)
Modifier un palier
PUT /admin/payment-methods/{id}/tiers/{tierId}
Supprimer un palier
DELETE /admin/payment-methods/{id}/tiers/{tierId}
6. Gestion des Retraits (validation admin)
Lister tous les retraits en attente
GET /admin/withdrawals?status=pending&per_page=20
Query params : status (pending|approved|rejected|completed), organization_id
Traiter un retrait (approuver ou rejeter)
PATCH /admin/withdrawals/{id}/process
{
"action": "approve",
"note": "Virement effectué le 2026-06-27"
}
{
"action": "reject",
"note": "Compte de retrait non vérifié"
}
Vérifier un compte de retrait d'une org
PATCH /admin/payout-accounts/{id}/verify
{
"verified": true,
"note": "Document d'identité validé"
}
7. Support (Tickets)
Lister les tickets
GET /admin/tickets?status=open&per_page=20
Query params : status (open|in_progress|resolved|closed)
Mettre à jour le statut d'un ticket
PATCH /admin/tickets/{id}
{
"status": "in_progress",
"assigned_to": 3
}
Répondre à un ticket
POST /admin/tickets/{id}/reply
{
"message": "Bonjour, votre problème a été escaladé à l'équipe technique."
}
8. Taux Négociés par Organisation
Permet d'accorder un taux plateforme réduit à une organisation spécifique.
Créer un taux négocié
POST /org-rate-overrides
{
"organization_id": 5,
"payment_method_id": 1,
"platform_fee_type": "percentage",
"platform_percentage": 0.50,
"platform_flat": 0,
"platform_cap": null,
"effective_from": "2026-07-01",
"effective_until": "2026-12-31",
"note": "Contrat Volume — 500+ transactions/mois"
}
payment_method_id: null→ override global (s'applique à toutes les méthodes)
9. Pays (référentiel)
Lister les pays actifs
GET /countries
{
"data": [
{ "id": 1, "name": "Bénin", "iso2": "BJ", "currency_code": "XOF", "phone_prefix": "+229" },
{ "id": 2, "name": "Togo", "iso2": "TG", "currency_code": "XOF", "phone_prefix": "+228" }
]
}
Codes de réponse
| Code | Signification |
|---|---|
| 200 | Succès |
| 201 | Créé |
| 401 | Non authentifié |
| 403 | Accès refusé (pas super_admin) |
| 404 | Ressource introuvable |
| 422 | Erreur de validation |
| 500 | Erreur serveur |
Format d'erreur standard :
{
"success": false,
"message": "Validation error",
"errors": {
"email": ["Le champ email est obligatoire."]
}
}
WebSocket (Reverb)
Serveur : ws://api.eventcollab.app:8080
Driver : Laravel Reverb
Auth : Sanctum Bearer dans le handshake
Le super admin peut monitorer en temps réel les sessions Kahoot actives via les canaux broadcast.
Généré le 2026-06-28 — EventCollab API v1 — GroupDev SAS