API reference
The routes both apps use. Linked routes are public. The others need the login token the app receives after entering the emailed code.
| Method | Route | What it does |
|---|---|---|
| POST | /auth/request-code | Email a 6-digit login code (golfer or coach) |
| POST | /auth/verify-code | Check the code, create the account if new, return a login token |
| GET | /settings | Terms, privacy, support and how-it-works texts |
| GET | /faq | FAQ |
| GET | /packages | Plans and prices |
| GET | /me | Signed-in profile · PATCH to edit · DELETE to delete the account |
| GET | /categories | Drill categories (signed in) |
| GET | /drills | Drills with levels, steps and the best-matched coach's recordings (signed in); ?coachId= to choose a coach |
| GET | /levels | Levels with their match and hold times (signed in) |
| GET | /routines | Golfer's routines · POST to create · PUT/DELETE /routines/:id |
| GET | /sessions | Golfer's practice history · POST to record a session |
| GET | /coach/drills | Coach: drills with recording status |
| GET | /instructors | Golfer: golf instructors to book, with their next free time · /instructors/:id/slots for all free times |
| GET | /lessons | Video lessons of the signed-in golfer or instructor · POST to book (golfer) · PATCH /lessons/:id {status: cancelled} |
| GET | /notices | Notifications (lesson booked or cancelled) · POST /notices/read |
| PUT | /coach/drills/:drillId/levels/:levelId/video | Coach: upload a reference video (max 30 MB) |
| PUT | /coach/drills/:drillId/positions/:positionId | Coach: save the recorded skeleton for one swing position (same at every level) · DELETE to re-record |
| PUT | /coach/drills/:drillId/positions/:positionId/photo | Coach: optional photo for a recorded position (max 2 MB) |
| POST | /webhooks/revenuecat | App Store / Google Play purchases (from RevenueCat only) |