{"ok":true,"name":"api2.autisme.lu","version":"1.0.0","publicUrl":"https://api2.autisme.lu","docs":"/docs","openapi":"/docs/openapi.yaml","routeInventory":"/docs/routes.json","health":"/healthz","endpointCount":156,"groups":[{"title":"Service","description":"Public diagnostics, metadata, and API documentation.","endpoints":[{"method":"GET","path":"/","summary":"API landing page or JSON service descriptor","public":true},{"method":"GET","path":"/docs","summary":"Interactive visual endpoint explorer","public":true},{"method":"GET","path":"/docs/openapi.yaml","summary":"OpenAPI specification source","public":true},{"method":"GET","path":"/docs/routes.json","summary":"Machine-readable endpoint inventory generated from registered Fastify routes","public":true},{"method":"GET","path":"/health","summary":"Process health check","public":true},{"method":"GET","path":"/healthz","summary":"Process health check","public":true},{"method":"GET","path":"/meta","summary":"Runtime metadata","public":true},{"method":"GET","path":"/readyz","summary":"Database readiness check","public":true}]},{"title":"Authentication","description":"Login, token lifecycle, and current-user routes.","endpoints":[{"method":"POST","path":"/auth/login","summary":"Authenticate with email/password and receive a bearer token","public":true},{"method":"POST","path":"/auth/logout","summary":"Revoke the current bearer token","public":false},{"method":"GET","path":"/auth/me","summary":"Return the current authenticated user","public":false},{"method":"POST","path":"/auth/refresh","summary":"Rotate the current bearer token","public":false}]},{"title":"NamNam","description":"Meal planning, menus, services, and daily registrations.","endpoints":[{"method":"GET","path":"/base-plans","summary":"Get the base plan for one person","public":false},{"method":"POST","path":"/base-plans","summary":"Upsert base plan entries","public":false},{"method":"GET","path":"/base-plans/by-service","summary":"Read /base-plans/by-service","public":false},{"method":"GET","path":"/base-plans/missing","summary":"Read /base-plans/missing","public":false},{"method":"GET","path":"/meal-choices","summary":"List available meal choices","public":false},{"method":"GET","path":"/meal-choices/for-day","summary":"Choices and menu context for a date","public":false},{"method":"GET","path":"/meal-registrations","summary":"List meal registrations with filters","public":false},{"method":"GET","path":"/meal-registrations/by-person-date","summary":"Read /meal-registrations/by-person-date","public":false},{"method":"POST","path":"/meal-registrations/return-from-leave","summary":"Create / run /meal-registrations/return-from-leave","public":false},{"method":"POST","path":"/meal-registrations/single","summary":"Upsert one registration","public":false},{"method":"POST","path":"/meal-registrations/week","summary":"Upsert one week for one person","public":false},{"method":"GET","path":"/namnam/bootstrap","summary":"Frontend bootstrap data for NamNam screens","public":false},{"method":"GET","path":"/people","summary":"List people with optional filters","public":false},{"method":"POST","path":"/people","summary":"Create a person","public":false},{"method":"GET","path":"/people/{id}","summary":"Read /people/{id}","public":false},{"method":"PATCH","path":"/people/{id}","summary":"Update /people/{id}","public":false},{"method":"PATCH","path":"/people/{id}/billing-category","summary":"Update /people/{id}/billing-category","public":false},{"method":"PATCH","path":"/people/{id}/toggle","summary":"Update /people/{id}/toggle","public":false},{"method":"GET","path":"/places","summary":"List places/services","public":false},{"method":"POST","path":"/places","summary":"Create a place/service","public":false},{"method":"GET","path":"/places/{id}","summary":"Read /places/{id}","public":false},{"method":"PATCH","path":"/places/{id}","summary":"Update /places/{id}","public":false},{"method":"GET","path":"/weekly-menus","summary":"Fetch a weekly menu","public":false},{"method":"POST","path":"/weekly-menus","summary":"Upsert menu data for a Monday","public":false},{"method":"GET","path":"/weekly-menus/latest","summary":"Read /weekly-menus/latest","public":false},{"method":"GET","path":"/weekly-menus/latest/html","summary":"Read /weekly-menus/latest/html","public":false},{"method":"GET","path":"/weekly-menus/latest/mailchimp","summary":"Read /weekly-menus/latest/mailchimp","public":false},{"method":"GET","path":"/weekly-menus/latest/pdf/{type}","summary":"Read /weekly-menus/latest/pdf/{type}","public":false}]},{"title":"Operations","description":"Reports, billing, settings, reserved dates, and imports.","endpoints":[{"method":"GET","path":"/billing/data","summary":"Read /billing/data","public":false},{"method":"GET","path":"/billing/non-billable-dates","summary":"Read /billing/non-billable-dates","public":false},{"method":"POST","path":"/billing/non-billable-dates","summary":"Create / run /billing/non-billable-dates","public":false},{"method":"DELETE","path":"/billing/non-billable-dates/{date}","summary":"Delete /billing/non-billable-dates/{date}","public":false},{"method":"POST","path":"/import/confirm","summary":"Create / run /import/confirm","public":false},{"method":"POST","path":"/import/preview","summary":"Create / run /import/preview","public":false},{"method":"GET","path":"/reports/data","summary":"Filtered report data grouped by service","public":false},{"method":"POST","path":"/reports/email/kitchen","summary":"Create / run /reports/email/kitchen","public":false},{"method":"GET","path":"/reports/generated","summary":"List generated reports","public":false},{"method":"GET","path":"/reports/generated/{filename}","summary":"Read /reports/generated/{filename}","public":false},{"method":"DELETE","path":"/reports/generated/{id}","summary":"Delete /reports/generated/{id}","public":false},{"method":"POST","path":"/reports/pdf/general","summary":"Generate a general PDF report","public":false},{"method":"POST","path":"/reports/pdf/kitchen","summary":"Generate a kitchen checklist PDF","public":false},{"method":"GET","path":"/reserved-dates","summary":"List reserved dates","public":false},{"method":"POST","path":"/reserved-dates","summary":"Create / run /reserved-dates","public":false},{"method":"DELETE","path":"/reserved-dates/{date}","summary":"Delete /reserved-dates/{date}","public":false},{"method":"POST","path":"/reserved-dates/fix-registrations","summary":"Create / run /reserved-dates/fix-registrations","public":false},{"method":"GET","path":"/settings","summary":"List application settings","public":false},{"method":"PATCH","path":"/settings","summary":"Update /settings","public":false}]},{"title":"Legacy compatibility","description":"Routes preserved for legacy Autisme Luxembourg clients.","endpoints":[{"method":"POST","path":"/commande/addProduit","summary":"Create / run /commande/addProduit","public":false},{"method":"POST","path":"/commande/addProduitCompose","summary":"Create / run /commande/addProduitCompose","public":false},{"method":"POST","path":"/commande/addToStock","summary":"Create / run /commande/addToStock","public":false},{"method":"GET","path":"/commande/clients","summary":"Read /commande/clients","public":false},{"method":"DELETE","path":"/commande/deletecommande","summary":"Delete /commande/deletecommande","public":false},{"method":"POST","path":"/commande/deleteCommande","summary":"Create / run /commande/deleteCommande","public":false},{"method":"POST","path":"/commande/deletePositionForCommande","summary":"Create / run /commande/deletePositionForCommande","public":false},{"method":"DELETE","path":"/commande/deletePositionForCommande","summary":"Delete /commande/deletePositionForCommande","public":false},{"method":"POST","path":"/commande/deleteProduitComposition","summary":"Create / run /commande/deleteProduitComposition","public":false},{"method":"GET","path":"/commande/getClient/{id}","summary":"Read /commande/getClient/{id}","public":false},{"method":"GET","path":"/commande/getClients","summary":"Legacy commande clients","public":false},{"method":"GET","path":"/commande/getCommande/{id}","summary":"Read /commande/getCommande/{id}","public":false},{"method":"GET","path":"/commande/getCommandeDetails/{id}","summary":"Read /commande/getCommandeDetails/{id}","public":false},{"method":"GET","path":"/commande/getCommanden","summary":"Read /commande/getCommanden","public":false},{"method":"POST","path":"/commande/getCommanden","summary":"Create / run /commande/getCommanden","public":false},{"method":"GET","path":"/commande/getCommandenDatatable","summary":"Read /commande/getCommandenDatatable","public":false},{"method":"GET","path":"/commande/getFournisseurs","summary":"Read /commande/getFournisseurs","public":false},{"method":"GET","path":"/commande/getPositionForCommandeWithSub/{id}","summary":"Read /commande/getPositionForCommandeWithSub/{id}","public":false},{"method":"GET","path":"/commande/getProductionProduct/{id}/{varficomm}","summary":"Read /commande/getProductionProduct/{id}/{varficomm}","public":false},{"method":"GET","path":"/commande/getProductionTotalDatatable","summary":"Read /commande/getProductionTotalDatatable","public":false},{"method":"GET","path":"/commande/getProductionUrgentDatatable","summary":"Read /commande/getProductionUrgentDatatable","public":false},{"method":"GET","path":"/commande/getProduit/{id}","summary":"Read /commande/getProduit/{id}","public":false},{"method":"GET","path":"/commande/getProduitAssociationForProduit/{id}/{produit}","summary":"Read /commande/getProduitAssociationForProduit/{id}/{produit}","public":false},{"method":"GET","path":"/commande/getProduitCompose/{id}","summary":"Read /commande/getProduitCompose/{id}","public":false},{"method":"GET","path":"/commande/getProduitComposeStock/{id}","summary":"Read /commande/getProduitComposeStock/{id}","public":false},{"method":"GET","path":"/commande/getProduits","summary":"Read /commande/getProduits","public":false},{"method":"GET","path":"/commande/getProduitsAssociationForProduit/{id}","summary":"Read /commande/getProduitsAssociationForProduit/{id}","public":false},{"method":"GET","path":"/commande/getProduitsCompose","summary":"Read /commande/getProduitsCompose","public":false},{"method":"GET","path":"/commande/getProduitsComposeAll","summary":"Read /commande/getProduitsComposeAll","public":false},{"method":"GET","path":"/commande/getProduitsComposeStock/{id}","summary":"Read /commande/getProduitsComposeStock/{id}","public":false},{"method":"GET","path":"/commande/getProduitsCompositionForProduit/{id}","summary":"Read /commande/getProduitsCompositionForProduit/{id}","public":false},{"method":"GET","path":"/commande/getProduitsDatatable","summary":"Read /commande/getProduitsDatatable","public":false},{"method":"GET","path":"/commande/getProduitsDatatableAll","summary":"Read /commande/getProduitsDatatableAll","public":false},{"method":"GET","path":"/commande/getSubProduit/{id}","summary":"Read /commande/getSubProduit/{id}","public":false},{"method":"POST","path":"/commande/insertClient","summary":"Create / run /commande/insertClient","public":false},{"method":"POST","path":"/commande/insertCommande","summary":"Create / run /commande/insertCommande","public":false},{"method":"POST","path":"/commande/insertProduit","summary":"Create / run /commande/insertProduit","public":false},{"method":"POST","path":"/commande/insertProduitCommande","summary":"Create / run /commande/insertProduitCommande","public":false},{"method":"POST","path":"/commande/insertProduitComposition","summary":"Create / run /commande/insertProduitComposition","public":false},{"method":"GET","path":"/commande/orders","summary":"Read /commande/orders","public":false},{"method":"GET","path":"/commande/products","summary":"Read /commande/products","public":false},{"method":"POST","path":"/commande/updateClient","summary":"Create / run /commande/updateClient","public":false},{"method":"POST","path":"/commande/updateCommande","summary":"Create / run /commande/updateCommande","public":false},{"method":"POST","path":"/commande/updateCommandePosition","summary":"Create / run /commande/updateCommandePosition","public":false},{"method":"POST","path":"/commande/updateProduction","summary":"Create / run /commande/updateProduction","public":false},{"method":"POST","path":"/commande/updateProductionCommande","summary":"Create / run /commande/updateProductionCommande","public":false},{"method":"POST","path":"/commande/updateProduit","summary":"Create / run /commande/updateProduit","public":false},{"method":"POST","path":"/commande/updateStock","summary":"Create / run /commande/updateStock","public":false},{"method":"GET","path":"/kleeder/assignments","summary":"Read /kleeder/assignments","public":false},{"method":"POST","path":"/kleeder/createKleed","summary":"Create / run /kleeder/createKleed","public":false},{"method":"POST","path":"/kleeder/createKleedForPersoun","summary":"Create / run /kleeder/createKleedForPersoun","public":false},{"method":"GET","path":"/kleeder/getKleed/{id}","summary":"Read /kleeder/getKleed/{id}","public":false},{"method":"GET","path":"/kleeder/getKleeder","summary":"Legacy clothing items","public":false},{"method":"GET","path":"/kleeder/getKleeder/{ignored}","summary":"Read /kleeder/getKleeder/{ignored}","public":false},{"method":"GET","path":"/kleeder/getKleederForPersoun/{id}","summary":"Read /kleeder/getKleederForPersoun/{id}","public":false},{"method":"GET","path":"/kleeder/getPersonalKleed/{id}","summary":"Read /kleeder/getPersonalKleed/{id}","public":false},{"method":"GET","path":"/kleeder/getPersonalKleeder","summary":"Read /kleeder/getPersonalKleeder","public":false},{"method":"GET","path":"/kleeder/items","summary":"Read /kleeder/items","public":false},{"method":"PUT","path":"/kleeder/putKleed","summary":"Replace /kleeder/putKleed","public":false},{"method":"PUT","path":"/kleeder/putKleedForPersoun","summary":"Replace /kleeder/putKleedForPersoun","public":false},{"method":"GET","path":"/menu-assets","summary":"Read /menu-assets","public":false},{"method":"POST","path":"/menu-assets","summary":"Create / run /menu-assets","public":false},{"method":"POST","path":"/translation/createWordForm","summary":"Create / run /translation/createWordForm","public":false},{"method":"POST","path":"/translation/fillOccurencesWithData","summary":"Create / run /translation/fillOccurencesWithData","public":false},{"method":"POST","path":"/translation/getArticleFor","summary":"Create / run /translation/getArticleFor","public":false},{"method":"GET","path":"/translation/getArticles","summary":"Legacy translation passthrough","public":false},{"method":"GET","path":"/translation/getMeaningsFor/{id}","summary":"Legacy translation passthrough","public":false},{"method":"GET","path":"/translation/getMp3Files/{withcustom}","summary":"Legacy translation passthrough","public":false},{"method":"POST","path":"/translation/getOccurenceForKonterbont","summary":"Create / run /translation/getOccurenceForKonterbont","public":false},{"method":"POST","path":"/translation/getOccurences","summary":"Create / run /translation/getOccurences","public":false},{"method":"GET","path":"/translation/getOccurencesForArticle/{id}","summary":"Legacy translation passthrough","public":false},{"method":"GET","path":"/translation/getSelectedIdsForOccurrence/{id}","summary":"Legacy translation passthrough","public":false},{"method":"GET","path":"/translation/getWordforms","summary":"Legacy translation passthrough","public":false},{"method":"GET","path":"/translation/insertCustomMp3/{id}","summary":"Legacy translation passthrough","public":false},{"method":"PUT","path":"/translation/setOccurenceMeaningFor","summary":"Replace /translation/setOccurenceMeaningFor","public":false},{"method":"POST","path":"/translation/UpdateAudioForMeaning","summary":"Create / run /translation/UpdateAudioForMeaning","public":false}]},{"title":"Assets","description":"Uploaded files and generated downloadable assets.","endpoints":[{"method":"GET","path":"/uploads/{filename}","summary":"Read /uploads/{filename}","public":false}]},{"title":"Other routes","description":"Additional application endpoints.","endpoints":[{"method":"GET","path":"/{handler}/{action}","summary":"Read /{handler}/{action}","public":false},{"method":"POST","path":"/{handler}/{action}","summary":"Create / run /{handler}/{action}","public":false},{"method":"PUT","path":"/{handler}/{action}","summary":"Replace /{handler}/{action}","public":false},{"method":"PATCH","path":"/{handler}/{action}","summary":"Update /{handler}/{action}","public":false},{"method":"DELETE","path":"/{handler}/{action}","summary":"Delete /{handler}/{action}","public":false},{"method":"TRACE","path":"/{handler}/{action}","summary":"Legacy trace /{handler}/{action}","public":false},{"method":"GET","path":"/{handler}/{action}/{id}","summary":"Read /{handler}/{action}/{id}","public":false},{"method":"POST","path":"/{handler}/{action}/{id}","summary":"Create / run /{handler}/{action}/{id}","public":false},{"method":"PUT","path":"/{handler}/{action}/{id}","summary":"Replace /{handler}/{action}/{id}","public":false},{"method":"PATCH","path":"/{handler}/{action}/{id}","summary":"Update /{handler}/{action}/{id}","public":false},{"method":"DELETE","path":"/{handler}/{action}/{id}","summary":"Delete /{handler}/{action}/{id}","public":false},{"method":"TRACE","path":"/{handler}/{action}/{id}","summary":"Legacy trace /{handler}/{action}/{id}","public":false},{"method":"GET","path":"/{handler}/{action}/{id}/{extra}","summary":"Read /{handler}/{action}/{id}/{extra}","public":false},{"method":"POST","path":"/{handler}/{action}/{id}/{extra}","summary":"Create / run /{handler}/{action}/{id}/{extra}","public":false},{"method":"PUT","path":"/{handler}/{action}/{id}/{extra}","summary":"Replace /{handler}/{action}/{id}/{extra}","public":false},{"method":"PATCH","path":"/{handler}/{action}/{id}/{extra}","summary":"Update /{handler}/{action}/{id}/{extra}","public":false},{"method":"DELETE","path":"/{handler}/{action}/{id}/{extra}","summary":"Delete /{handler}/{action}/{id}/{extra}","public":false},{"method":"TRACE","path":"/{handler}/{action}/{id}/{extra}","summary":"Legacy trace /{handler}/{action}/{id}/{extra}","public":false},{"method":"GET","path":"/assets/css/docs-landing.css","summary":"Read /assets/css/docs-landing.css","public":true},{"method":"GET","path":"/assets/js/docs-landing.js","summary":"Read /assets/js/docs-landing.js","public":true}]}]}