GET/api/v1/providers200, 400
Recherche de prestataires (domaine, ville, date, budget) triée par note — SELECT filtré + tri rating
GET/api/v1/providers/{id}200, 404
Fiche détaillée d un prestataire avec avis
POST/api/v1/eventsAuth requise201, 401, 422
Créer un événement (client authentifié)
POST/api/v1/events/{id}/briefAuth requise201, 403, 422
Publier le cahier des charges de l événement
POST/api/v1/bookingsAuth requise201, 409
Engager un prestataire sur un brief (statut pending) — Crée booking + brief fermé
POST/api/v1/bookings/{id}/tasksAuth requise201, 403
Ajouter une tâche au prestataire
POST/api/v1/bookings/{id}/escrowAuth requise201, 402, 409
Approvisionner le séquestre (funds) — escrow_transactions.status = in_escrow
POST/api/v1/bookings/{id}/releaseAuth requise200, 403, 409
Libérer les fonds après validation des livrables — status = released
POST/api/v1/bookings/{id}/disputeAuth requise201, 409
Ouvrir un litige (bloque la libération) — status = disputed
POST/api/v1/bookings/{id}/reviewsAuth requise201, 403
Déposer un avis après un booking terminé
GET/api/v1/categories200
Liste des domaines de prestataires (référentiel des filtres)
GET/api/v1/providers/meAuth requise200, 404
Profil prestataire de l'utilisateur connecté
PATCH/api/v1/providers/meAuth requise200, 403, 422
Mettre à jour son profil prestataire (domaine, tarif, description)
GET/api/v1/providers/me/availabilityAuth requise200
Liste de ses créneaux de disponibilité
POST/api/v1/providers/me/availabilityAuth requise201, 422
Déclarer un créneau de disponibilité
Exemple de requête
{"start_at":"2027-01-10T08:00:00Z","end_at":"2027-01-10T20:00:00Z","kind":"available"}
Exemple de réponse
{"id":"uuid","kind":"available"}
POST/api/v1/providers/{id}/verifyAuth requise200, 403
Valider le KYC d'un prestataire (admin)
POST/api/v1/events/{id}/brief/invitationsAuth requise201, 403, 422
Inviter des prestataires ciblés sur un cahier des charges
Exemple de requête
{"provider_ids":["uuid1","uuid2"]}
Exemple de réponse
{"created":2}
GET/api/v1/briefs/{id}/offersAuth requise200, 403
Offres reçues sur un cahier des charges (client)
POST/api/v1/briefs/{id}/offersAuth requise201, 403, 409, 422
Soumettre une offre sur un brief (prestataire vérifié)
Exemple de requête
{"amount":450000,"delivery_days":14,"message":"Traiteur 300 couverts, menu joint"}
Exemple de réponse
{"id":"uuid","status":"pending"}
POST/api/v1/offers/{id}/withdrawAuth requise200, 403, 409
Retirer son offre tant qu'elle n'est pas acceptée
POST/api/v1/offers/{id}/acceptAuth requise201, 403, 409
Accepter une offre : crée le booking et rejette les autres offres
Exemple de réponse
{"booking_id":"uuid","rejected_offers":3}
PATCH/api/v1/bookings/{id}/confirmAuth requise200, 403, 409
Confirmer le booking après approvisionnement du séquestre
PATCH/api/v1/bookings/{id}/startAuth requise200, 403, 409
Démarrer la prestation (prestataire)
PATCH/api/v1/bookings/{id}/completeAuth requise200, 403, 409
Déclarer la prestation terminée (toutes tâches faites)
PATCH/api/v1/booking-tasks/{id}Auth requise200, 403
Mettre à jour une tâche (statut, échéance)
POST/api/v1/bookings/{id}/tasks/reorderAuth requise200, 422
Réordonner les tâches du booking
GET/api/v1/bookings/{id}/escrow/historyAuth requise200, 403
Journal complet des mouvements de fonds du séquestre
Exemple de réponse
[{"entry_type":"fund","amount":450000,"balance_after":450000}]
POST/api/v1/escrow/{id}/refundAuth requise200, 403, 409
Rembourser le client — réservé à la résolution d'un litige (admin)
GET/api/v1/payoutsAuth requise200
Historique des retraits du prestataire connecté
POST/api/v1/payoutsAuth requise201, 402, 403
Demander un retrait des fonds libérés (KYC requis)
Exemple de requête
{"amount":300000,"method":"mobile_money","destination":"+22507…"}
Exemple de réponse
{"id":"uuid","status":"requested"}
POST/api/v1/disputesAuth requise201, 409, 422
Ouvrir un litige sur un booking (gèle le séquestre)
Exemple de requête
{"booking_id":"uuid","reason":"Livrable incomplet : 80 sur 300 couverts"}
Exemple de réponse
{"id":"uuid","status":"open"}
POST/api/v1/disputes/{id}/messagesAuth requise201, 403
Ajouter un message au fil du litige
POST/api/v1/disputes/{id}/resolveAuth requise200, 403, 409
Trancher un litige : release / refund / split (admin)
Exemple de requête
{"outcome":"split","client_amount":150000,"provider_amount":300000}
Exemple de réponse
{"status":"resolved_split"}
GET/api/v1/me/notificationsAuth requise200
Notifications de l'utilisateur connecté
PATCH/api/v1/me/notifications/readAuth requise200
Marquer des notifications comme lues
Exemple de requête
{"ids":["uuid1"]}
GET/api/v1/me/bookingsAuth requise200
Mes réservations (client ou prestataire selon le rôle)
GET/api/v1/me/earningsAuth requise200
Gains du prestataire : libérés, séquestrés, en attente de retrait
Exemple de réponse
{"released":900000,"in_escrow":450000,"pending_payout":300000}