EventCollab — API Documentation · Plateforme Super Admin (GroupDev SAS)

Base URL : https://api.eventcollab.app/api/v1 Auth : Bearer Token (Laravel Sanctum) Rôle requis : super_admin Content-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