{"app":"ZoomBro backend","routes":{"GET /api/health":"Backend health check","POST /api/auth/register":"Register user (body: name, email, password)","POST /api/auth/login":"Login (body: email, password)","POST /api/auth/otp/send":"Send phone OTP (body: phone, flow=login|register)","POST /api/auth/otp/login":"Phone OTP login (body: phone, reqId, code)","POST /api/auth/otp/register":"Phone OTP registration (body: name, phone, reqId, code)","POST /api/auth/phone/send-otp":"Send OTP to verify phone (Bearer, body: phone)","POST /api/auth/phone/verify-otp":"Verify phone OTP (Bearer, body: phone, reqId, code)","GET /api/auth/google/redirect-config":"Google redirect sign-in config","GET /api/auth/google/start":"Start Google OAuth redirect","GET /api/auth/google/callback":"Google OAuth callback","POST /api/auth/google":"Google ID token login (body: credential)","GET /api/auth/me":"Current user (header: Authorization Bearer <token>)","POST /api/auth/forgot-password":"Password reset email","POST /api/auth/reset-password":"Complete reset with token + new password","POST /api/auth/verify-email":"Verify email with token","POST /api/auth/resend-verification":"Resend verification email","PATCH /api/auth/profile":"Update name/email (Bearer)","POST /api/auth/change-password":"Change password (Bearer)","POST /api/auth/avatar":"Upload avatar (Bearer, multipart)","DELETE /api/auth/avatar":"Delete avatar (Bearer)","GET /api/auth/carpool-provider-profile":"Saved driver/vehicle verification profile (Bearer)","PUT /api/auth/carpool-provider-profile":"Update saved verification profile (Bearer)","GET /api/auth/emergency-contacts":"Emergency safety contacts (Bearer)","GET /api/auth/emergency-contacts/status":"Emergency contact setup status for profile hub (Bearer)","PUT /api/auth/emergency-contacts":"Replace emergency contacts (Bearer, body: emergencyContacts[])","POST /api/safety/share-trip":"SMS trip details to emergency contacts (Bearer, body: bookingId)","POST /api/safety/sos":"SOS alert to emergency contacts (Bearer, body: bookingId)","GET /api/users/:userId":"Public user profile (minimal, no auth)","GET /api/users/blocked":"List users you blocked (Bearer)","POST /api/users/:userId/block":"Block a user (Bearer)","DELETE /api/users/:userId/block":"Unblock a user (Bearer)","POST /api/carpool/reports":"Report a user/trip (Bearer)","GET /api/carpool/reports/mine":"List your submitted trust reports and outcomes (Bearer)","GET /api/admin/carpool/reports":"Admin: list user-submitted carpool reports","PATCH /api/admin/carpool/reports/:id":"Admin: update report status/notes","GET /api/admin/carpool/document-compliance":"Admin: rides with expiring/expired provider documents","POST /api/admin/carpool/document-compliance/sweep":"Admin: recompute document compliance on rides","GET /api/admin/feedback":"Admin: list in-app user feedback","GET /api/admin/in-app-messages":"Admin: list in-app message configs","PUT /api/admin/in-app-messages/:slot":"Admin: create/update in-app message","PATCH /api/admin/in-app-messages/:slot/enabled":"Admin: enable/disable in-app message","GET /api/in-app-messages/active?slot=":"Active in-app message for current user (Bearer)","GET /api/public/terms?type=carpooling":"Carpooling terms content (public)","GET /api/public/market-pulse?city=":"Anonymous corridor offer/need counts (public)","GET /api/terms/by-type?type=Carpooling&status=active":"Carpooling terms (compat for VOIZE UI)","GET /api/agreements/check/:type":"Check if user accepted latest terms (Bearer)","POST /api/agreements":"Record terms acceptance (Bearer)","POST /api/rides":"Create a new ride (Bearer)","GET /api/rides":"List rides (Bearer)","POST /api/rides/request":"Create ride request (Bearer)","GET /api/rides/requests":"List user ride requests (Bearer)","GET /api/rides/bookings":"List user bookings (Bearer)","GET /api/rides/history":"Ride history (Bearer)","GET /api/notifications":"In-app notifications (Bearer)","PATCH /api/notifications/:id/read":"Mark notification read (Bearer)","POST /api/notifications/read-all":"Mark all notifications read (Bearer)","GET /api/notifications/push/vapid-public-key":"VAPID public key for Web Push (Bearer)","POST /api/notifications/push/subscribe":"Save browser push subscription (Bearer)","DELETE /api/notifications/push/subscribe":"Remove push subscription (Bearer)","POST /api/feedback":"Submit in-app feedback (Bearer, multipart: category, message, pageUrl?, userAgent?, screenshot?)","GET /api/compatibility/path/:userId":"Social graph stub (empty; ZoomBro v1)","POST /api/organisations":"Create an organisation (Bearer)","GET /api/organisations/mine":"Organisations you belong to (Bearer)","GET /api/organisations/discover?q=":"Discover active organisations (Bearer)","POST /api/organisations/sync":"Auto-join verified-domain organisations (Bearer)","GET /api/organisations/:idOrSlug":"Organisation detail (Bearer)","PATCH /api/organisations/:id":"Update organisation (admin)","POST /api/organisations/:id/join":"Request to join / auto-join (Bearer)","POST /api/organisations/:id/leave":"Leave organisation (Bearer)","GET /api/organisations/:id/members?status=":"List members (admin)","POST /api/organisations/:id/members/:membershipId/approve":"Approve a join request (admin)","POST /api/organisations/:id/members/:membershipId/reject":"Reject a join request (admin)","PATCH /api/organisations/:id/members/:membershipId/role":"Change a member's role (owner)","DELETE /api/organisations/:id/members/:membershipId":"Remove a member (admin)","POST /api/organisations/:id/invites":"Invite a member by email (admin)","POST /api/organisations/invites/accept":"Accept an invite (Bearer, body: token)","POST /api/organisations/:id/domains":"Claim a domain (admin)","POST /api/organisations/:id/domains/:domainId/verify":"Verify a domain via DNS TXT (admin)","DELETE /api/organisations/:id/domains/:domainId":"Remove a domain (admin)","GET /api/organisations/:id/groups":"List sub-groups (member)","POST /api/organisations/:id/groups":"Create a sub-group (admin)","PATCH /api/organisations/:id/groups/:groupId":"Update a sub-group (admin)","DELETE /api/organisations/:id/groups/:groupId":"Delete a sub-group (admin)","POST /api/organisations/:id/groups/:groupId/join":"Join a sub-group (member)","POST /api/organisations/:id/groups/:groupId/leave":"Leave a sub-group (member)"}}