API route inventory — Visionary Oral dentalapp @ a6b4429¶
Generated 2026-10-27 from git ls-tree and git show at commit a6b4429 (Next.js App Router: one route.js per path; methods are the exported functions). "Middleware public" = listed in isPublicRoute in dentalapp/src/middleware.js:6-31 (the route then checks auth itself). Auth helpers are the ones the route calls.
| # | Path | Methods (file:line) | Auth checks used | Middleware public |
|---|---|---|---|---|
| 1 | /api/admin/api-usage | GET :6 | none found | no |
| 2 | /api/admin/auth | POST :8 | none found | no |
| 3 | /api/admin/doctor-api-usage | GET :8 | admin | no |
| 4 | /api/admin/doctors/[clerkId]/approve | POST :13 | admin, clerk | no |
| 5 | /api/admin/doctors/[clerkId]/offline-days | GET :22, POST :66 | admin | no |
| 6 | /api/admin/doctors/[clerkId]/patients | GET :7 | admin | no |
| 7 | /api/admin/doctors/[clerkId]/recalculate | PATCH :7 | admin | no |
| 8 | /api/admin/doctors/[clerkId] | DELETE :20, GET :173 | admin, clerk | no |
| 9 | /api/admin/doctors/[clerkId]/suspend | POST :14 | admin, clerk | no |
| 10 | /api/admin/doctors/[clerkId]/unsuspend | POST :12 | admin, clerk | no |
| 11 | /api/admin/doctors/patients/[patientId] | DELETE :7 | admin | no |
| 12 | /api/admin/doctors | GET :10, POST :208, PUT :470, DELETE :645 | admin | no |
| 13 | /api/admin/global-stats | GET :7 | admin | no |
| 14 | /api/admin/invitations/[invitationId]/resend-invitation | POST :12 | admin | no |
| 15 | /api/admin/logout | POST :3 | none found | no |
| 16 | /api/admin/patient-sample | GET :5 | none found | no |
| 17 | /api/admin/patients/[clerkId]/recalculate | PATCH :15 | admin | no |
| 18 | /api/admin/patients/[clerkId] | DELETE :19 | admin, clerk | no |
| 19 | /api/admin/patients/[clerkId]/suspend | POST :12 | admin, clerk | no |
| 20 | /api/admin/patients/[clerkId]/unsuspend | POST :11 | admin, clerk | no |
| 21 | /api/admin/patients/invitations/[invitationId]/resend-invitation | POST :18 | admin | no |
| 22 | /api/admin/patients/invite | POST :19 | admin | no |
| 23 | /api/admin/patients | GET :20 | admin | no |
| 24 | /api/admin/payments | GET :5 | admin | no |
| 25 | /api/admin/plans | GET :23, POST :43, PATCH :87, DELETE :135 | clerk | no |
| 26 | /api/admin/signup | POST :14 | none found | yes |
| 27 | /api/admin/users | GET :10 | admin | no |
| 28 | /api/analyze-gemini | POST :475 | public-session | no |
| 29 | /api/billing/plans | GET :4 | none found | no |
| 30 | /api/billing/subscription/cancel | POST :7 | clerk | no |
| 31 | /api/billing/subscription/create | POST :8 | clerk | no |
| 32 | /api/billing/subscription/redirect-handler | POST :3, GET :36 | none found | yes |
| 33 | /api/billing/subscription/retry | POST :8 | clerk | no |
| 34 | /api/billing/subscription/verify | GET :4 | none found | yes |
| 35 | /api/clinic/generate-qr | POST :6 | clerk | no |
| 36 | /api/clinic/update | POST :5 | clerk | no |
| 37 | /api/clinic/upload-logo | POST :7 | clerk | no |
| 38 | /api/detect-gemini | POST :305 | none found | no |
| 39 | /api/doctor/feedback | POST :6, GET :56 | doctor | no |
| 40 | /api/doctor/notifications | GET :6, PATCH :28 | doctor | no |
| 41 | /api/download-report | GET :9 | public-session | no |
| 42 | /api/image | GET :19 | clerk | yes |
| 43 | /api/invitations/metadata | GET :11 | none found | no |
| 44 | /api/invitations/token-metadata | GET :11 | none found | no |
| 45 | /api/onboarding | POST :8 | clerk | no |
| 46 | /api/patient-onboarding | GET :17, POST :95 | clerk | no |
| 47 | /api/patients/[id] | GET :70, PUT :127, DELETE :322 | doctor | no |
| 48 | /api/patients/me | GET :57, PATCH :116 | patient, clerk | no |
| 49 | /api/patients | GET :42, POST :163 | doctor | no |
| 50 | /api/payments/create-order | POST :8 | clerk | no |
| 51 | /api/payments/history | GET :5 | clerk | no |
| 52 | /api/payments/verify | GET :5 | clerk | yes |
| 53 | /api/personalized-analysis | POST :77 | patient, public-session | no |
| 54 | /api/public/create-scan-session | POST :6 | none found | yes |
| 55 | /api/public/patient-registration | POST :30 | none found | yes |
| 56 | /api/public/session | GET :5 | none found | yes |
| 57 | /api/retry-email | POST :37, GET :290 | clerk | no |
| 58 | /api/scans/analysis | POST :37 | doctor | yes |
| 59 | /api/scans/me | GET :11 | patient | yes |
| 60 | /api/scans/pdf | GET :10 | none found | yes |
| 61 | /api/scans | POST :19, GET :167, PATCH :513, DELETE :632 | admin, doctor, patient, public-session | yes |
| 62 | /api/send-email | POST :11 | public-session | no |
| 63 | /api/speech-to-text | POST :9 | none found | no |
| 64 | /api/support/messages | GET :17, POST :52 | none found | yes |
| 65 | /api/support | POST :20 | none found | yes |
| 66 | /api/support/tickets | GET :5, PATCH :48 | none found | yes |
| 67 | /api/upload | POST :121 | patient, clerk, public-session | yes |
| 68 | /api/user/account-status | GET :9 | clerk | no |
| 69 | /api/user/offline-limit-exceeded | POST :21 | clerk | no |
| 70 | /api/user/profile | GET :9 | clerk | no |
| 71 | /api/user/role | GET :14 | clerk | no |
| 72 | /api/validate-scan | POST :8 | none found | no |
| 73 | /api/webhooks/cashfree-subscription | POST :65 | webhook-signature | yes |
| 74 | /api/webhooks/cashfree | POST :5 | webhook-signature | yes |
| 75 | /api/webhooks/clerk | POST :27 | webhook-signature | yes |
Total: 75 route files.