My App
API

Modules API

Inventaire exhaustif des modules Elysia avec leurs endpoints

Référence rapide pour savoir où chercher un endpoint. Chaque module est un dossier dans packages/api/src/modules/<module>/ suivant la structure modulaire.

Vue d'ensemble

ModulePrefixAuthUsage
cardex/cardexstaff+gestion des guests
rooms/roomsstaff+inventory chambres
booking/bookingauthservices guest (restaurant/room-service/laundry/spa)
chat/chatauthconversations guest ↔ AI ↔ staff
ai/aiauthconcierge IA (streaming)
payment/paymentauthStripe Payment Intents
integrations/integrationsadmin+PMS adapters config
tickets/ticketsstaff+escalations
today/todaystaff+notes staff du jour
menu/menustaff+ (CRUD), auth (read)catalogue services
users/usersmanager+staff list + invite
analytics/analyticsmanager+KPIs et reports
auth proxy/api/auth/*Better Auth handler
webhooks/webhooks/:providerHMACingestion PMS / Stripe
health/healthliveness probe

cardex

Gestion des profils guest (lecture, création, lien avec user, envoi d'email de check-in, confirmation d'arrivée, checkout).

MéthodeRouteAuthRésumé
GET/cardex/guestsstaff+Liste guests (query: search, vipOnly, staying)
GET/cardex/guests/:idstaff+Détail guest
GET/cardex/guest-groups/:idstaff+Détail groupe + membres
POST/cardex/guestsstaff+Création manuelle guest
PATCH/cardex/guests/:idstaff+Update guest
DELETE/cardex/guests/:idmanager+Soft delete
POST/cardex/guests/toggle-vipstaff+Bulk toggle VIP (body: { guestIds, isVip })
POST/cardex/send-check-in-emailstaff+Reacher + BullMQ send (body: { guestId })
POST/cardex/confirm-arrivalstaff+Passe arrived, bridge PMS check-in
POST/cardex/checkout-gueststaff+Passe checked_out, bridge PMS process
POST/cardex/link-guest-to-userauthPost-signup : lier guest existant au user
POST/cardex/complete-check-inauthGuest : marquer digital done
GET/cardex/my-statusauthGuest : fetch check_in_status courant
GET/cardex/status-streamauthGuest : SSE pour unlock

rooms

CRUD de l'inventory, update status + bridge PMS.

MéthodeRouteAuthRésumé
GET/roomsstaff+Liste rooms (query: status, type, floor)
GET/rooms/:idstaff+Détail room
POST/roomsmanager+Création room
PATCH/rooms/:idmanager+Update room
DELETE/rooms/:idmanager+Delete
POST/rooms/update-statusstaff+Update status (body: { roomId, status }), bridge PMS

booking

Sous-modules : restaurant, room-service, laundry, spa. Chaque sous-module a le même pattern.

MéthodeRouteAuthRésumé
POST/booking/restaurantauth (guest)Crée restaurant_booking
GET/booking/restaurant/mineauth (guest)Liste mes bookings restaurant
GET/booking/restaurantstaff+Liste toutes les bookings restaurant de l'org
POST/booking/restaurant/update-statusstaff+Update status
(idem pour /booking/room-service, /booking/laundry, /booking/spa)

Tous : création enqueue job bridgePostCharges vers PMS après paiement confirmé (webhook Stripe).

chat

Conversations unifiées (guest_ai / guest_staff / staff_internal).

MéthodeRouteAuthRésumé
GET/chat/activestaff+Liste des chats actifs (query: search, priority, isResolved)
GET/chat/:idstaff+Détail conversation + messages
POST/chat/:id/send-replystaff+Staff envoie un message
POST/chat/:id/assignstaff+Assigner à un staff
POST/chat/:id/update-metadatastaff+Priority / tags
POST/chat/:id/mark-resolvedstaff+Toggle is_resolved
POST/chat/:id/escalateauth (guest)Guest demande un humain
GET/chat/:id/streamauthSSE messages

ai

Concierge IA. Utilise @elysiajs/ai-sdk.

MéthodeRouteAuthRésumé
POST/ai/chatauthEnvoie un message, streame la réponse (SSE)
POST/ai/generate-titleauthAI-generate titre d'une conversation depuis le premier message
GET/ai/user-profileauthContexte du guest courant (room, hôtel, dates) pour l'UI

payment

Stripe. Tout est async via webhook.

MéthodeRouteAuthRésumé
POST/payment/create-intentauthCrée PaymentIntent Stripe (amount, currency, metadata)
GET/payment/status/:intentIdauthVérifie statut côté Stripe
POST/webhooks/stripeHMACReçoit webhook Stripe, verify signature, enqueue job

integrations

Hub PMS.

MéthodeRouteAuthRésumé
GET/integrationsadmin+Liste les intégrations de l'org
POST/integrations/configureadmin+Add/update (body: provider, credentials, platformUrl) — test connexion
POST/integrations/:id/full-syncadmin+Enqueue full sync immédiat
POST/integrations/:id/toggleadmin+Activate / deactivate
DELETE/integrations/:idadmin+Delete
GET/integrations/:id/sync-logsadmin+Logs sync (pagination)
POST/webhooks/mewsHMACWebhook Mews entrant
POST/webhooks/operaHMACWebhook Opera entrant (futur)
POST/webhooks/:providerHMACDynamic webhook endpoint

tickets

Escalations.

MéthodeRouteAuthRésumé
GET/ticketsstaff+Liste (query: status, priority, category)
GET/tickets/statsstaff+Counts par statut
GET/tickets/:idstaff+Détail + comments
POST/ticketsstaff+Création (body: conversationId?, category, priority, title, description)
POST/tickets/:id/update-statusstaff+Change status (state machine validé)
POST/tickets/:id/assignmanager+Assign to staff
POST/tickets/:id/commentsstaff+Ajouter un commentaire

today

Staff notes.

MéthodeRouteAuthRésumé
GET/today/notesstaff+Liste (query: status, priority, search)
POST/today/notesstaff+Création
PATCH/today/notes/:idstaff+Update (comment trail enregistré)
POST/today/notes/:id/update-statusstaff+Change status
DELETE/today/notes/:idstaff+Delete
GET/today/notes/:id/historystaff+Audit trail

Catalogue des services.

MéthodeRouteAuthRésumé
GET/menu/categoriesauthListe categories (query: categoryType)
GET/menu/categories/:idauthCatégorie + items
POST/menu/categoriesmanager+Création
PATCH/menu/categories/:idmanager+Update
DELETE/menu/categories/:idmanager+Delete
GET/menu/itemsauthListe items (query: categoryId, featured)
POST/menu/itemsmanager+Création item
PATCH/menu/items/:idmanager+Update item
DELETE/menu/items/:idmanager+Delete item

users

Staff + invitations (Better Auth en backend).

MéthodeRouteAuthRésumé
GET/users/meauthMon profil + mes orgs
GET/usersmanager+Liste staff + invitations pending
POST/users/invitemanager+Invite par email (délègue à Better Auth)
POST/users/:id/update-roleownerChange role
DELETE/users/:idownerRévoquer du org
DELETE/users/invitations/:idmanager+Annuler invitation

analytics

KPIs et reports.

MéthodeRouteAuthRésumé
GET/analytics/hotel-statsmanager+RevPAR, Occupancy, Revenue, Satisfaction (live)
GET/analytics/interactionsmanager+Chats/jour (period, offset)
GET/analytics/conversionmanager+Funnel chat → booking
GET/analytics/time-savedmanager+Minutes économisées par l'IA
GET/analytics/requestsmanager+Breakdown par service
GET/analytics/satisfactionmanager+% positives
GET/analytics/upsellsmanager+Revenus upsells par canal
GET/analytics/activitymanager+Heatmap horaire
GET/calendar/overviewstaff+Calendar mensuel (arrivées, départs, events)

auth proxy

Les routes /api/auth/* sont gérées directement par Better Auth — pas dans un module Elysia manuel. On monte betterAuth.handler sur ces paths.

Endpoints standards :

  • POST /api/auth/sign-up
  • POST /api/auth/sign-in/email
  • POST /api/auth/sign-out
  • POST /api/auth/forget-password
  • POST /api/auth/reset-password
  • POST /api/auth/organization/invite
  • POST /api/auth/organization/accept-invitation
  • POST /api/auth/magic-link/send
  • GET /api/auth/magic-link/verify

webhooks

MéthodeRouteVerifyAction
POST/webhooks/stripeHMAC Stripe signatureUpdate payment status, enqueue process job
POST/webhooks/mewsHMAC Mews webhookSecretEnqueue sync entity
POST/webhooks/:providerHMAC par providerDynamic ingestion

Tous retournent 200 immédiatement (acknowledgment), le traitement est async via BullMQ.

health

MéthodeRouteAuthRésumé
GET/healthLiveness (DB ping, Redis ping)
GET/health/readyReadiness (schema migrations up, BullMQ reachable)

Utilisé par Docker healthcheck + Dokploy.

Ajouter un nouveau module

Voir le skill bell-feature-module (à scaffolder) ou manuellement :

  1. mkdir packages/api/src/modules/<name>/
  2. Créer <name>.schemas.ts, <name>.service.ts, <name>.repository.ts, <name>.routes.ts
  3. Tester avec <name>.service.test.ts + <name>.routes.test.ts
  4. Ajouter l'import + .use(<name>Module) dans packages/api/src/index.ts
  5. Le type App se met à jour, Eden Treaty côté client détecte automatiquement le nouveau module

On this page