{"name":"Rally App API","hint":"Source primaire eWRC via EWRC_API_BASE (proxy Tailscale recommandé).","workflow":["1. POST /waitlist → inscription liste d’attente (landing)","2. POST /auth/register → inscription + code e-mail","3. POST /auth/verify-email → validation compte + tokens","4. GET /me/follows → suivis synchronisés","5. GET /me/notification-preferences → alertes push","6. GET /follows/trending → popularité des suivis","7. GET /races/home → feed accueil depuis Postgres (sync cron eWRC)","8. GET /news → actus (sync cron AutoHebdo → Postgres)"],"routes":[{"method":"POST","path":"/waitlist","example":"/waitlist"},{"method":"POST","path":"/auth/register","example":"/auth/register"},{"method":"POST","path":"/auth/verify-email","example":"/auth/verify-email"},{"method":"POST","path":"/auth/login","example":"/auth/login"},{"method":"GET","path":"/me","example":"/me"},{"method":"DELETE","path":"/me","example":"/me"},{"method":"GET","path":"/me/follows","example":"/me/follows"},{"method":"GET","path":"/me/notification-preferences","example":"/me/notification-preferences"},{"method":"POST","path":"/me/push-tokens","example":"/me/push-tokens"},{"method":"GET","path":"/follows/trending","query":{"type":"race|league|person|country","personType":"driver|codriver","limit":"12"},"example":"/follows/trending?type=race&limit=12"},{"method":"GET","path":"/health","example":"/health"},{"method":"GET","path":"/ready","example":"/ready"},{"method":"GET","path":"/health/ewrc","example":"/health/ewrc"},{"method":"GET","path":"/news","query":{"offset":"0","limit":"20","source":"autohebdo"},"example":"/news?limit=20"},{"method":"GET","path":"/news/:id","example":"/news/1"},{"method":"GET","path":"/news/media/*","example":"/news/media/wp-content/uploads/2026/08/foo.jpg"},{"method":"POST","path":"/news/sync","query":{"maxPages":"5","full":"1"},"example":"/news/sync"},{"method":"GET","path":"/races/search","query":{"q":"monte","limit":"10"},"example":"/races/search?q=monte"},{"method":"GET","path":"/races/seasons","example":"/races/seasons"},{"method":"GET","path":"/media/*","example":"/media/icon/logo.png"},{"method":"GET","path":"/races/home","query":{"day":"YYYY-MM-DD","before":"60","after":"90"},"example":"/races/home?day=2026-07-19"},{"method":"POST","path":"/races/home/sync","example":"/races/home/sync"},{"method":"GET","path":"/races/ligues","query":{"year":"2026"},"example":"/races/ligues?year=2026"},{"method":"GET","path":"/races/results","query":{"offset":"0","search":"","resultsOnly":"true"},"example":"/races/results?resultsOnly=true"},{"method":"GET","path":"/races/upcoming","query":{"offset":"0","search":""},"example":"/races/upcoming"},{"method":"GET","path":"/races/events/:eventId/engages","example":"/races/events/99073/engages"},{"method":"GET","path":"/races/events/:eventId/special-stages","example":"/races/events/99073/special-stages"},{"method":"GET","path":"/races/events/:eventId/special-stages/:n/classification","query":{"type":"manche | cumul"},"example":"/races/events/99073/special-stages/1/classification?type=cumul"},{"method":"GET","path":"/races/events/:eventId/classification/final","example":"/races/events/99073/classification/final"}]}