Lumeo API

API Documentation

Plateforme de micro-services • REST JSON • Authentification JWT (Lexik)

Aperçu

Base URL
https://admin.lumeo.jeremyduc.dev/api
Format
  • JSON UTF-8
  • En-tête Authorization: Bearer <JWT> pour les endpoints protégés

Authentification

POST /api/login_check
Request:
POST /api/login_check
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "secret"
}

Response 200:
{
  "token": "<jwt>"
}
Utilisez ce jeton dans l’en-tête Authorization: Bearer <jwt>.

Services

GET /api/services
200 OK
[
  { "id": 1, "title": "Logo minimaliste", "cost": 50, "isAvailable": true, ... }
]
GET /api/services/{id}
200 OK
{ "id": 1, "title": "Logo minimaliste", "description": "...", "cost": 50, ... }
POST /api/services
Auth: Bearer
Body (JSON):
{
  "title": "Traduction FR-EN",
  "description": "Je traduis vos textes",
  "cost": 25,
  "tags": [1, 2]  // ids de catégories
}
PUT /api/services/{id}
Auth: Bearer (propriétaire)
Body (JSON): mêmes champs que création (hors "status")
Remplace les catégories avec "tags".
DELETE /api/services/{id}
Auth: Bearer (propriétaire)
204 No Content
POST /api/services/{id}/purchase
Auth: Bearer
Body (JSON) optionnel:
{ "message": "Bonjour, j'ai besoin de ..." }

Effets:
- Crée une réservation (reserved)
- Crée une conversation liée
- Rend le service indisponible
- Publie des notifications (Mercure)

Response 201:
{
  "reservation": { ... },
  "conversation": { ... }
}

Conversations

GET /api/conversations
Auth: Bearer
200 OK: liste des conversations de l'utilisateur (buyer/seller)
GET /api/conversations/{id}
Auth: Bearer + doit être participant
200 OK: conversation + messages
POST /api/conversations/{id}/messages
Auth: Bearer + doit être participant
Body:
{ "content": "Votre message" }

Response 201: message créé + publication Mercure

Réservations

POST /api/reservations/{id}/complete
Auth: Bearer (vendeur)
Effets:
- Marque la réservation "completed"
- Rend le service à nouveau disponible
- Publie des notifications "reservation.completed"

Response 200: réservation mise à jour

Profil

GET /api/myprofile
Auth: Bearer
200 OK: profil courant (groups: profile:read)
POST /api/profile/edit
Auth: Bearer
Body:
{ "username": "Alice", "description": "Graphiste" }
POST /api/profile/edit-image
Auth: Bearer
Form-Data:
imageFile: (fichier)

Commandes

GET /api/myorders
Auth: Bearer
200 OK: commandes (achats de LumCoins)

Paiements

POST /api/payment/create
Auth: Bearer
Body:
{ "amount": 10, "coins": 100 }

Response 200:
{ "checkoutUrl": "https://checkout.stripe.com/..." }
POST /api/payment/confirm-checkout
Body:
{ "session_id": "<CHECKOUT_SESSION_ID>" }

Effet: crédite les LumCoins si paiement "paid".

Mercure (temps réel)

Topics principaux
  • https://lumeo.app/profiles/{profileId}/notifications — événements: message.created, reservation.created, reservation.completed
  • https://lumeo.app/conversations/{conversationId} — événements: message.created
Exemple payload "message.created":
{
  "type": "message.created",
  "conversationId": 123,
  "message": {
    "id": 456,
    "content": "Bonjour !",
    "senderProfileId": 7,
    "createdAt": "2025-09-07T12:34:56+00:00"
  }
}

Erreurs & Statuts

  • 200 OK
  • 201 Created
  • 204 No Content
  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 409 Conflict
  • 422 Unprocessable Entity
  • 500 Internal Server Error
Format d’erreur typique
{ "error": "Message explicatif" }