REST over JSON at /api/v1/..., documented with OpenAPI (Swagger/Scribe).
| Group | Examples |
|---|---|
| Authentication | POST /auth/register · /auth/login · /auth/otp · /auth/refresh · /auth/logout |
| Questionnaire | GET /questionnaire · POST /questionnaire/answers |
| Subscription | GET /plans · POST /subscriptions · GET /subscriptions/current |
| Payments | POST /payments · POST /webhooks/payment |
| Training | GET /me/program · POST /workouts/sessions · POST /workouts/sessions/{id}/sets |
| Nutrition | GET /me/meal-plan · POST /food-logs · GET /foods?q= |
| Progress | POST /measurements · POST /photos · GET /me/progress · GET /me/reports |
| Habits | POST /habits/logs · POST /water |
| Chat | GET /conversations · POST /messages + a WebSocket channel |
| Meetings | GET /meetings · POST /meetings |
| Notifications | GET /notifications · POST /devices (FCM registration) |
| Tracking | POST /track/events · POST /track/video |
| Assistant | POST /assistant/messages |
Conventions: consistent pagination, a consistent error envelope, Accept-Language for locale, and the app version in a header to support forced updates.