API LogeBenin

Guide Exhaustif pour l'Intégration Frontend

🛠 Informations Générales

Ce guide fournit toutes les spécifications techniques nécessaires pour intégrer l'API LogeBenin.

  • Base URL (Local): http://localhost:8000/api
  • Base URL (Production): https://api.logebenin.com/api
  • Langue: Header X-Locale: fr (défaut) ou en.
  • Headers obligatoires:
    • Accept: application/json
    • Content-Type: application/json
    • X-Locale: fr (Optionnel)

🔐 Authentification & Profil

L'authentification repose sur des tokens JWT sécurisés. Le token doit être envoyé dans le header Authorization: Bearer {token}.

1. Inscription

POST /auth/register

Description: Crée un nouveau compte utilisateur.

{
  "firstname": "John",
  "lastname": "Doe",
  "username": "johndoe",
  "email": "john@example.com",
  "msisdn": "+22997000000",
  "password": "SecretPassword123!",
  "password_confirmation": "SecretPassword123!"
}

201 Created: Email de vérification envoyé.

422 Unprocessable Entity: Erreur de validation.

2. Vérification d'Email

GET /auth/register/verify/{token}

Description: Active le compte via le lien reçu par email.

200 OK: Compte activé avec succès.

3. Connexion

POST /auth/login

{
  "email": "john@example.com",
  "password": "SecretPassword123!"
}

200 OK: Retourne access_token, token_type, expires_in et l'objet user.

401 Unauthorized: Identifiants incorrects.

403 Forbidden: Compte non activé.

4. Rafraîchissement du Token

POST /auth/refresh

Auth: Bearer Token obligatoire.

200 OK: Nouveau token généré.

5. Mot de Passe Oublié (Flux OTP)

POST /auth/forgot-password (Body: {"email": "..."})

POST /auth/verify-reset-password-otp (Body: {"email": "...", "otp": "..."})

POST /auth/reset-password (Body: {"reset_token": "...", "password": "..."})

6. Session Utilisateur (Me)

GET /user

Description: Retourne les informations de l'utilisateur connecté.

Auth: Bearer Token obligatoire.

7. Gestion du Profil

PUT /profile

Description: Met à jour les informations de base (firstname, lastname, language, etc.).

POST /change-password

{
  "current_password": "...",
  "new_password": "...",
  "new_password_confirmation": "..."
}

8. Social Auth

GET /auth/google/url: Récupère l'URL de connexion Google.

GET /auth/apple: Flux d'authentification Apple.

9. Déconnexion

POST /auth/logout

Auth: Bearer Token obligatoire.

200 OK: Token révoqué.

🌍 Gestion Multi-Langues

Les champs traduisibles sont des objets JSON. Vous devez toujours envoyer et recevoir l'objet complet pour préserver les traductions.

"title": {
  "fr": "Villa de Luxe",
  "en": "Luxury Villa"
}

✨ Caractéristiques (Features)

Gérez les équipements des propriétés (Piscine, Garage, etc.).

GET /features: Liste toutes les caractéristiques.

POST /features: Créer une caractéristique.

GET /features/{id}: Détails d'une caractéristique.

PUT /features/{id}: Modifier une caractéristique.

DELETE /features/{id}: Supprimer une caractéristique.

🏡 Module Propriétés

1. Liste & Filtres Avancés

GET /properties

ParamètreTypeValeurs / Description
transaction_typeStringlouer, acheter
categoryStringrésidentiel, commercial, terrain
typeStringType spécifique (ex: Appartement, Villa)
cityStringFiltrer par ville
min_price / max_priceNumberGamme de prix
min_surface / max_surfaceNumberSurface en m²
bedroomsIntegerNombre min de chambres
bathroomsIntegerNombre min de salles de bain
features[]ArrayTableau de noms de caractéristiques
sort_byStringprice_asc, price_desc, date_desc, date_asc

200 OK: Liste paginée d'objets Propriétés.

2. Filtrer par ID de Caractéristiques

GET /properties/filter-by-features

Paramètre: featuresIds (Liste de UUID séparés par des virgules).

3. Détails d'une Propriété

GET /properties/{id}

200 OK: Retourne l'objet complet de la propriété.

4. Recherche Globale

GET /properties/search?q={query}

Description: Recherche par mot-clé dans les titres, villes et quartiers.

4. Création & Modification

POST /properties

PUT /properties/{id}

{
  "property_type_id": "UUID",
  "transaction_type": "BUY",
  "category_id": "UUID",
  "title": { "fr": "...", "en": "..." },
  "price": 150000,
  "currency": "XOF",
  "surface": 85,
  "city": "Cotonou",
  "address": "Fidjrossè",
  "status": "ACTIVE"
}

Auth: Bearer Token obligatoire.

📸 Gestion des Images

POST /properties/{id}/images

Format: multipart/form-data (image, is_main, position)

PATCH /property-images/{id}/set-main

Description: Définit une image comme image principale.

PATCH /property-images/reorder

Description: Réordonne les images via un tableau d'objets {id, position}.

DELETE /property-images/{id}

⭐ Favoris

Gérez les propriétés favorites de l'utilisateur.

GET /favorites: Liste des favoris (paginée).

POST /favorites: Ajouter aux favoris (Body: {"property_id": "UUID"}).

POST /favorites/toggle: Toggle favori.

DELETE /favorites/{property_id}: Retirer des favoris.

GET /favorites/check/{property_id}: Vérifie si une propriété est en favori.

💾 Recherches Sauvegardées

Permet aux utilisateurs de sauvegarder leurs filtres de recherche et d'activer des alertes.

GET /saved-searches: Liste les recherches sauvegardées.

POST /saved-searches: Créer une recherche sauvegardée.

DELETE /saved-searches/{id}: Supprimer.

🚫 Propriétés Masquées

Permet à l'utilisateur de masquer des propriétés qu'il ne souhaite plus voir.

GET /hidden-properties: Liste des propriétés masquées.

POST /hidden-properties: Masquer une propriété.

DELETE /hidden-properties/{property_id}: Démasquer.

DELETE /hidden-properties: Tout vider.

📂 Catégories & Types

Récupérez les structures de données pour les formulaires et filtres.

GET /categories: Liste des catégories (Résidentiel, etc.).

GET /property-types: Liste des types (Appartement, Villa, etc.).

📄 Pages Statiques

Contenu géré via le CMS (À propos, CGU, etc.).

GET /static-pages: Liste toutes les pages.

POST /static-pages: Créer une page (Admin).

GET /static-pages/{slug}: Détails d'une page.

PUT /static-pages/{slug}: Modifier une page (Admin).

DELETE /static-pages/{slug}: Supprimer une page (Admin).

🔔 Notifications

Gérez les notifications push, base de données et SMS.

GET /notifications-sms: Liste des notifications utilisateur.

POST /notifications-sms: Envoyer une notification (Interne/Admin).

📧 Contact & Feedback

Formulaires de contact et systèmes de retour utilisateur.

POST /contacts: Formulaire de contact (Vente, Support, Expert).

POST /feedback: Envoyer un feedback ou signaler un bug.

🚨 Codes Erreurs

CodeSignificationDescription
200/201SuccessRequête traitée avec succès.
401UnauthenticatedToken invalide, manquant ou expiré.
403ForbiddenAccès refusé ou compte non activé/vérifié.
404Not FoundLa ressource demandée n'existe pas.
422Validation ErrorDonnées transmises invalides (renvoie un objet errors).
500Server ErrorErreur interne du serveur.

🛠 Outils Pratiques

  • Swagger UI: Accédez à /api/documentation pour tester l'API interactivement.
  • Debug OTP: En local, les codes OTP sont visibles dans storage/logs/laravel.log.
  • JWT: Utilisez jwt.io pour décoder vos tokens.