KrinosAI — API Inventory¶
Template ID:
TPL-06-04| Stage: 06-Build-and-Document | Version: 0.3
Record:KAI-VORAL-APII-001— retrospective draft for Visionary Oral. Not approved.
Purpose: List every API endpoint, webhook and event actually present in code, with owner, auth and verification date.
Required inputs: Source code at a pinned SHA; API contracts; gateway configuration.
Document control¶
| Field | Required entry |
|---|---|
| Document ID | KAI-VORAL-APII-001 |
| Template used | TPL-06-04 API Inventory v0.3 |
| Product / project / software version or commit SHA | VORAL (Visionary Oral) / PRJ-001 / a6b4429e3165 (branch app_dev of AI-Dental-Project/Visionary_Oral) |
| Record status and version | Draft v0.1 |
| Author / technical reviewer / quality reviewer | Claude Code (drafted with Claude Code for KrinosAI) / Tech Lead (name to be assigned) / Security & Privacy Officer (name to be assigned) |
| Created / updated / approved dates | 2026-10-27 / 2026-10-27 / Pending |
| Applicable SOP and revision | SOP-LC-06 v0.3 |
| Related issue, commit, requirement and evidence links | KAI-VORAL-APC-001 (operation IDs); docs/lifecycle/_evidence/api-inventory-a6b4429.md |
| Approver and decision record | Pending |
Applicability and evidence baseline¶
Product / system boundary: Web app and API (dentalapp/), doctor/admin mobile app (mobile/), PDF Lambda (dentalapp/pdf-lambda/) at a6b4429e3165, and the external services they call.
Related approved requirements, risks and change records: None approved. Related drafts are listed in document control.
Retrospective record? Yes — follows the Retrospective Documentation Protocol (KrinosAI lifecycle pack, 05-References/). Items are labelled Observed (code or Git at a6b4429), Measured (dated run), Stated (named person, dated) or Not recorded. Observed in code and Git at a6b4429. 97 operations in 75 route files; IDs match KAI-VORAL-APC-001.
Acceptable evidence: an implementation reference (file:line at a commit SHA), a dated test record, a signed decision, a vendor agreement, or another independently verifiable artifact. Never invent approvals, clinical results, measurements or performance data.
1. Unique API ID and consumer¶
| API ID | Consumers |
|---|---|
| API-001 (APC) | Web |
| API-002 (APC) | Web |
| API-003 (APC) | Web |
| API-004 (APC) | Mobile app, web |
| API-005 (APC) | Mobile app, web |
| API-006 (APC) | Mobile app, web |
| API-007 (APC) | Mobile app, web |
| API-008 (APC) | Mobile app, web |
| API-009 (APC) | Mobile app, web |
| API-010 (APC) | Mobile app, web |
| API-011 (APC) | Mobile app, web |
| API-012 (APC) | Mobile app, web |
| API-013 (APC) | Mobile app, web |
| API-014 (APC) | Mobile app, web |
| API-015 (APC) | Mobile app, web |
| API-016 (APC) | Mobile app, web |
| API-017 (APC) | Mobile app, web |
| API-018 (APC) | Web |
| API-019 (APC) | Mobile app, web |
| API-020 (APC) | Web |
| API-021 (APC) | Web |
| API-022 (APC) | Mobile app, web |
| API-023 (APC) | Mobile app, web |
| API-024 (APC) | Mobile app, web |
| API-025 (APC) | Mobile app, web |
| API-026 (APC) | Mobile app, web |
| API-027 (APC) | Mobile app, web |
| API-028 (APC) | Mobile app, web |
| API-029 (APC) | Web |
| API-030 (APC) | Web |
| API-031 (APC) | Web |
| API-032 (APC) | Web |
| API-033 (APC) | Web |
| API-034 (APC) | Web |
| API-035 (APC) | Web |
| API-036 (APC) | Web |
| API-037 (APC) | Web |
| API-038 (APC) | Web |
| API-039 (APC) | Web |
| API-040 (APC) | Web |
| API-041 (APC) | Web |
| API-042 (APC) | Web |
| API-043 (APC) | Web |
| API-044 (APC) | Mobile app, web |
| API-045 (APC) | Mobile app, web |
| API-046 (APC) | Mobile app, web |
| API-047 (APC) | Web |
| API-048 (APC) | Web |
| API-049 (APC) | Web |
| API-050 (APC) | Web |
| API-051 (APC) | Web |
| API-052 (APC) | Web |
| API-053 (APC) | Web |
| API-054 (APC) | Web |
| API-055 (APC) | Web |
| API-056 (APC) | Mobile app, web |
| API-057 (APC) | Web |
| API-058 (APC) | Web |
| API-059 (APC) | Mobile app, web |
| API-060 (APC) | Mobile app, web |
| API-061 (APC) | Mobile app, web |
| API-062 (APC) | Mobile app, web |
| API-063 (APC) | Mobile app, web |
| API-064 (APC) | Mobile app, web |
| API-065 (APC) | Mobile app, web |
| API-066 (APC) | Web |
| API-067 (APC) | Web |
| API-068 (APC) | Web |
| API-069 (APC) | Web |
| API-070 (APC) | Web |
| API-071 (APC) | Web |
| API-072 (APC) | Web |
| API-073 (APC) | Web |
| API-074 (APC) | Web |
| API-075 (APC) | Mobile app, web |
| API-076 (APC) | Mobile app, web |
| API-077 (APC) | Mobile app, web |
| API-078 (APC) | Mobile app, web |
| API-079 (APC) | Mobile app, web |
| API-080 (APC) | Mobile app, web |
| API-081 (APC) | Mobile app, web |
| API-082 (APC) | Web |
| API-083 (APC) | Web |
| API-084 (APC) | Web |
| API-085 (APC) | Web |
| API-086 (APC) | Web |
| API-087 (APC) | Web |
| API-088 (APC) | Web |
| API-089 (APC) | Mobile app, web |
| API-090 (APC) | Mobile app, web |
| API-091 (APC) | Mobile app, web |
| API-092 (APC) | Mobile app, web |
| API-093 (APC) | Mobile app, web |
| API-094 (APC) | Web |
| API-095 (APC) | Vendors (webhooks) |
| API-096 (APC) | Vendors (webhooks) |
| API-097 (APC) | Vendors (webhooks) |
2. HTTP method route and service¶
| API ID | Method | Route | Service |
|---|---|---|---|
| API-001 (APC) | GET | /api/admin/api-usage | Web app API (DES-02) |
| API-002 (APC) | POST | /api/admin/auth | Web app API (DES-02) |
| API-003 (APC) | GET | /api/admin/doctor-api-usage | Web app API (DES-02) |
| API-004 (APC) | POST | /api/admin/doctors/[clerkId]/approve | Web app API (DES-02) |
| API-005 (APC) | GET | /api/admin/doctors/[clerkId]/offline-days | Web app API (DES-02) |
| API-006 (APC) | POST | /api/admin/doctors/[clerkId]/offline-days | Web app API (DES-02) |
| API-007 (APC) | GET | /api/admin/doctors/[clerkId]/patients | Web app API (DES-02) |
| API-008 (APC) | PATCH | /api/admin/doctors/[clerkId]/recalculate | Web app API (DES-02) |
| API-009 (APC) | DELETE | /api/admin/doctors/[clerkId] | Web app API (DES-02) |
| API-010 (APC) | GET | /api/admin/doctors/[clerkId] | Web app API (DES-02) |
| API-011 (APC) | POST | /api/admin/doctors/[clerkId]/suspend | Web app API (DES-02) |
| API-012 (APC) | POST | /api/admin/doctors/[clerkId]/unsuspend | Web app API (DES-02) |
| API-013 (APC) | DELETE | /api/admin/doctors/patients/[patientId] | Web app API (DES-02) |
| API-014 (APC) | GET | /api/admin/doctors | Web app API (DES-02) |
| API-015 (APC) | POST | /api/admin/doctors | Web app API (DES-02) |
| API-016 (APC) | PUT | /api/admin/doctors | Web app API (DES-02) |
| API-017 (APC) | DELETE | /api/admin/doctors | Web app API (DES-02) |
| API-018 (APC) | GET | /api/admin/global-stats | Web app API (DES-02) |
| API-019 (APC) | POST | /api/admin/invitations/[invitationId]/resend-invitation | Web app API (DES-02) |
| API-020 (APC) | POST | /api/admin/logout | Web app API (DES-02) |
| API-021 (APC) | GET | /api/admin/patient-sample | Web app API (DES-02) |
| API-022 (APC) | PATCH | /api/admin/patients/[clerkId]/recalculate | Web app API (DES-02) |
| API-023 (APC) | DELETE | /api/admin/patients/[clerkId] | Web app API (DES-02) |
| API-024 (APC) | POST | /api/admin/patients/[clerkId]/suspend | Web app API (DES-02) |
| API-025 (APC) | POST | /api/admin/patients/[clerkId]/unsuspend | Web app API (DES-02) |
| API-026 (APC) | POST | /api/admin/patients/invitations/[invitationId]/resend-invitation | Web app API (DES-02) |
| API-027 (APC) | POST | /api/admin/patients/invite | Web app API (DES-02) |
| API-028 (APC) | GET | /api/admin/patients | Web app API (DES-02) |
| API-029 (APC) | GET | /api/admin/payments | Web app API (DES-02) |
| API-030 (APC) | GET | /api/admin/plans | Web app API (DES-02) |
| API-031 (APC) | POST | /api/admin/plans | Web app API (DES-02) |
| API-032 (APC) | PATCH | /api/admin/plans | Web app API (DES-02) |
| API-033 (APC) | DELETE | /api/admin/plans | Web app API (DES-02) |
| API-034 (APC) | POST | /api/admin/signup | Web app API (DES-02) |
| API-035 (APC) | GET | /api/admin/users | Web app API (DES-02) |
| API-036 (APC) | POST | /api/analyze-gemini | Web app API (DES-02) |
| API-037 (APC) | GET | /api/billing/plans | Web app API (DES-02) |
| API-038 (APC) | POST | /api/billing/subscription/cancel | Web app API (DES-02) |
| API-039 (APC) | POST | /api/billing/subscription/create | Web app API (DES-02) |
| API-040 (APC) | POST | /api/billing/subscription/redirect-handler | Web app API (DES-02) |
| API-041 (APC) | GET | /api/billing/subscription/redirect-handler | Web app API (DES-02) |
| API-042 (APC) | POST | /api/billing/subscription/retry | Web app API (DES-02) |
| API-043 (APC) | GET | /api/billing/subscription/verify | Web app API (DES-02) |
| API-044 (APC) | POST | /api/clinic/generate-qr | Web app API (DES-02) |
| API-045 (APC) | POST | /api/clinic/update | Web app API (DES-02) |
| API-046 (APC) | POST | /api/clinic/upload-logo | Web app API (DES-02) |
| API-047 (APC) | POST | /api/detect-gemini | Web app API (DES-02) |
| API-048 (APC) | POST | /api/doctor/feedback | Web app API (DES-02) |
| API-049 (APC) | GET | /api/doctor/feedback | Web app API (DES-02) |
| API-050 (APC) | GET | /api/doctor/notifications | Web app API (DES-02) |
| API-051 (APC) | PATCH | /api/doctor/notifications | Web app API (DES-02) |
| API-052 (APC) | GET | /api/download-report | Web app API (DES-02) |
| API-053 (APC) | GET | /api/image | Web app API (DES-02) |
| API-054 (APC) | GET | /api/invitations/metadata | Web app API (DES-02) |
| API-055 (APC) | GET | /api/invitations/token-metadata | Web app API (DES-02) |
| API-056 (APC) | POST | /api/onboarding | Web app API (DES-02) |
| API-057 (APC) | GET | /api/patient-onboarding | Web app API (DES-02) |
| API-058 (APC) | POST | /api/patient-onboarding | Web app API (DES-02) |
| API-059 (APC) | GET | /api/patients/[id] | Web app API (DES-02) |
| API-060 (APC) | PUT | /api/patients/[id] | Web app API (DES-02) |
| API-061 (APC) | DELETE | /api/patients/[id] | Web app API (DES-02) |
| API-062 (APC) | GET | /api/patients/me | Web app API (DES-02) |
| API-063 (APC) | PATCH | /api/patients/me | Web app API (DES-02) |
| API-064 (APC) | GET | /api/patients | Web app API (DES-02) |
| API-065 (APC) | POST | /api/patients | Web app API (DES-02) |
| API-066 (APC) | POST | /api/payments/create-order | Web app API (DES-02) |
| API-067 (APC) | GET | /api/payments/history | Web app API (DES-02) |
| API-068 (APC) | GET | /api/payments/verify | Web app API (DES-02) |
| API-069 (APC) | POST | /api/personalized-analysis | Web app API (DES-02) |
| API-070 (APC) | POST | /api/public/create-scan-session | Web app API (DES-02) |
| API-071 (APC) | POST | /api/public/patient-registration | Web app API (DES-02) |
| API-072 (APC) | GET | /api/public/session | Web app API (DES-02) |
| API-073 (APC) | POST | /api/retry-email | Web app API (DES-02) |
| API-074 (APC) | GET | /api/retry-email | Web app API (DES-02) |
| API-075 (APC) | POST | /api/scans/analysis | Web app API (DES-02) |
| API-076 (APC) | GET | /api/scans/me | Web app API (DES-02) |
| API-077 (APC) | GET | /api/scans/pdf | Web app API (DES-02) |
| API-078 (APC) | POST | /api/scans | Web app API (DES-02) |
| API-079 (APC) | GET | /api/scans | Web app API (DES-02) |
| API-080 (APC) | PATCH | /api/scans | Web app API (DES-02) |
| API-081 (APC) | DELETE | /api/scans | Web app API (DES-02) |
| API-082 (APC) | POST | /api/send-email | Web app API (DES-02) |
| API-083 (APC) | POST | /api/speech-to-text | Web app API (DES-02) |
| API-084 (APC) | GET | /api/support/messages | Web app API (DES-02) |
| API-085 (APC) | POST | /api/support/messages | Web app API (DES-02) |
| API-086 (APC) | POST | /api/support | Web app API (DES-02) |
| API-087 (APC) | GET | /api/support/tickets | Web app API (DES-02) |
| API-088 (APC) | PATCH | /api/support/tickets | Web app API (DES-02) |
| API-089 (APC) | POST | /api/upload | Web app API (DES-02) |
| API-090 (APC) | GET | /api/user/account-status | Web app API (DES-02) |
| API-091 (APC) | POST | /api/user/offline-limit-exceeded | Web app API (DES-02) |
| API-092 (APC) | GET | /api/user/profile | Web app API (DES-02) |
| API-093 (APC) | GET | /api/user/role | Web app API (DES-02) |
| API-094 (APC) | POST | /api/validate-scan | Web app API (DES-02) |
| API-095 (APC) | POST | /api/webhooks/cashfree-subscription | Web app API (DES-02) |
| API-096 (APC) | POST | /api/webhooks/cashfree | Web app API (DES-02) |
| API-097 (APC) | POST | /api/webhooks/clerk | Web app API (DES-02) |
3. Controller source file and commit¶
| API ID | Handler | SHA |
|---|---|---|
| API-001 (APC) | dentalapp/src/app/api/admin/api-usage/route.js:6 |
a6b4429 |
| API-002 (APC) | dentalapp/src/app/api/admin/auth/route.js:8 |
a6b4429 |
| API-003 (APC) | dentalapp/src/app/api/admin/doctor-api-usage/route.js:8 |
a6b4429 |
| API-004 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/approve/route.js:13 |
a6b4429 |
| API-005 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/offline-days/route.js:22 |
a6b4429 |
| API-006 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/offline-days/route.js:66 |
a6b4429 |
| API-007 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/patients/route.js:7 |
a6b4429 |
| API-008 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/recalculate/route.js:7 |
a6b4429 |
| API-009 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/route.js:20 |
a6b4429 |
| API-010 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/route.js:173 |
a6b4429 |
| API-011 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/suspend/route.js:14 |
a6b4429 |
| API-012 (APC) | dentalapp/src/app/api/admin/doctors/[clerkId]/unsuspend/route.js:12 |
a6b4429 |
| API-013 (APC) | dentalapp/src/app/api/admin/doctors/patients/[patientId]/route.js:7 |
a6b4429 |
| API-014 (APC) | dentalapp/src/app/api/admin/doctors/route.js:10 |
a6b4429 |
| API-015 (APC) | dentalapp/src/app/api/admin/doctors/route.js:208 |
a6b4429 |
| API-016 (APC) | dentalapp/src/app/api/admin/doctors/route.js:470 |
a6b4429 |
| API-017 (APC) | dentalapp/src/app/api/admin/doctors/route.js:645 |
a6b4429 |
| API-018 (APC) | dentalapp/src/app/api/admin/global-stats/route.js:7 |
a6b4429 |
| API-019 (APC) | dentalapp/src/app/api/admin/invitations/[invitationId]/resend-invitation/route.js:12 |
a6b4429 |
| API-020 (APC) | dentalapp/src/app/api/admin/logout/route.js:3 |
a6b4429 |
| API-021 (APC) | dentalapp/src/app/api/admin/patient-sample/route.js:5 |
a6b4429 |
| API-022 (APC) | dentalapp/src/app/api/admin/patients/[clerkId]/recalculate/route.js:15 |
a6b4429 |
| API-023 (APC) | dentalapp/src/app/api/admin/patients/[clerkId]/route.js:19 |
a6b4429 |
| API-024 (APC) | dentalapp/src/app/api/admin/patients/[clerkId]/suspend/route.js:12 |
a6b4429 |
| API-025 (APC) | dentalapp/src/app/api/admin/patients/[clerkId]/unsuspend/route.js:11 |
a6b4429 |
| API-026 (APC) | dentalapp/src/app/api/admin/patients/invitations/[invitationId]/resend-invitation/route.js:18 |
a6b4429 |
| API-027 (APC) | dentalapp/src/app/api/admin/patients/invite/route.js:19 |
a6b4429 |
| API-028 (APC) | dentalapp/src/app/api/admin/patients/route.js:20 |
a6b4429 |
| API-029 (APC) | dentalapp/src/app/api/admin/payments/route.js:5 |
a6b4429 |
| API-030 (APC) | dentalapp/src/app/api/admin/plans/route.js:23 |
a6b4429 |
| API-031 (APC) | dentalapp/src/app/api/admin/plans/route.js:43 |
a6b4429 |
| API-032 (APC) | dentalapp/src/app/api/admin/plans/route.js:87 |
a6b4429 |
| API-033 (APC) | dentalapp/src/app/api/admin/plans/route.js:135 |
a6b4429 |
| API-034 (APC) | dentalapp/src/app/api/admin/signup/route.js:14 |
a6b4429 |
| API-035 (APC) | dentalapp/src/app/api/admin/users/route.js:10 |
a6b4429 |
| API-036 (APC) | dentalapp/src/app/api/analyze-gemini/route.js:475 |
a6b4429 |
| API-037 (APC) | dentalapp/src/app/api/billing/plans/route.js:4 |
a6b4429 |
| API-038 (APC) | dentalapp/src/app/api/billing/subscription/cancel/route.js:7 |
a6b4429 |
| API-039 (APC) | dentalapp/src/app/api/billing/subscription/create/route.js:8 |
a6b4429 |
| API-040 (APC) | dentalapp/src/app/api/billing/subscription/redirect-handler/route.js:3 |
a6b4429 |
| API-041 (APC) | dentalapp/src/app/api/billing/subscription/redirect-handler/route.js:36 |
a6b4429 |
| API-042 (APC) | dentalapp/src/app/api/billing/subscription/retry/route.js:8 |
a6b4429 |
| API-043 (APC) | dentalapp/src/app/api/billing/subscription/verify/route.js:4 |
a6b4429 |
| API-044 (APC) | dentalapp/src/app/api/clinic/generate-qr/route.js:6 |
a6b4429 |
| API-045 (APC) | dentalapp/src/app/api/clinic/update/route.js:5 |
a6b4429 |
| API-046 (APC) | dentalapp/src/app/api/clinic/upload-logo/route.js:7 |
a6b4429 |
| API-047 (APC) | dentalapp/src/app/api/detect-gemini/route.js:305 |
a6b4429 |
| API-048 (APC) | dentalapp/src/app/api/doctor/feedback/route.js:6 |
a6b4429 |
| API-049 (APC) | dentalapp/src/app/api/doctor/feedback/route.js:56 |
a6b4429 |
| API-050 (APC) | dentalapp/src/app/api/doctor/notifications/route.js:6 |
a6b4429 |
| API-051 (APC) | dentalapp/src/app/api/doctor/notifications/route.js:28 |
a6b4429 |
| API-052 (APC) | dentalapp/src/app/api/download-report/route.js:9 |
a6b4429 |
| API-053 (APC) | dentalapp/src/app/api/image/route.js:19 |
a6b4429 |
| API-054 (APC) | dentalapp/src/app/api/invitations/metadata/route.js:11 |
a6b4429 |
| API-055 (APC) | dentalapp/src/app/api/invitations/token-metadata/route.js:11 |
a6b4429 |
| API-056 (APC) | dentalapp/src/app/api/onboarding/route.js:8 |
a6b4429 |
| API-057 (APC) | dentalapp/src/app/api/patient-onboarding/route.js:17 |
a6b4429 |
| API-058 (APC) | dentalapp/src/app/api/patient-onboarding/route.js:95 |
a6b4429 |
| API-059 (APC) | dentalapp/src/app/api/patients/[id]/route.js:70 |
a6b4429 |
| API-060 (APC) | dentalapp/src/app/api/patients/[id]/route.js:127 |
a6b4429 |
| API-061 (APC) | dentalapp/src/app/api/patients/[id]/route.js:322 |
a6b4429 |
| API-062 (APC) | dentalapp/src/app/api/patients/me/route.js:57 |
a6b4429 |
| API-063 (APC) | dentalapp/src/app/api/patients/me/route.js:116 |
a6b4429 |
| API-064 (APC) | dentalapp/src/app/api/patients/route.js:42 |
a6b4429 |
| API-065 (APC) | dentalapp/src/app/api/patients/route.js:163 |
a6b4429 |
| API-066 (APC) | dentalapp/src/app/api/payments/create-order/route.js:8 |
a6b4429 |
| API-067 (APC) | dentalapp/src/app/api/payments/history/route.js:5 |
a6b4429 |
| API-068 (APC) | dentalapp/src/app/api/payments/verify/route.js:5 |
a6b4429 |
| API-069 (APC) | dentalapp/src/app/api/personalized-analysis/route.js:77 |
a6b4429 |
| API-070 (APC) | dentalapp/src/app/api/public/create-scan-session/route.js:6 |
a6b4429 |
| API-071 (APC) | dentalapp/src/app/api/public/patient-registration/route.js:30 |
a6b4429 |
| API-072 (APC) | dentalapp/src/app/api/public/session/route.js:5 |
a6b4429 |
| API-073 (APC) | dentalapp/src/app/api/retry-email/route.js:37 |
a6b4429 |
| API-074 (APC) | dentalapp/src/app/api/retry-email/route.js:290 |
a6b4429 |
| API-075 (APC) | dentalapp/src/app/api/scans/analysis/route.js:37 |
a6b4429 |
| API-076 (APC) | dentalapp/src/app/api/scans/me/route.js:11 |
a6b4429 |
| API-077 (APC) | dentalapp/src/app/api/scans/pdf/route.js:10 |
a6b4429 |
| API-078 (APC) | dentalapp/src/app/api/scans/route.js:19 |
a6b4429 |
| API-079 (APC) | dentalapp/src/app/api/scans/route.js:167 |
a6b4429 |
| API-080 (APC) | dentalapp/src/app/api/scans/route.js:513 |
a6b4429 |
| API-081 (APC) | dentalapp/src/app/api/scans/route.js:632 |
a6b4429 |
| API-082 (APC) | dentalapp/src/app/api/send-email/route.js:11 |
a6b4429 |
| API-083 (APC) | dentalapp/src/app/api/speech-to-text/route.js:9 |
a6b4429 |
| API-084 (APC) | dentalapp/src/app/api/support/messages/route.js:17 |
a6b4429 |
| API-085 (APC) | dentalapp/src/app/api/support/messages/route.js:52 |
a6b4429 |
| API-086 (APC) | dentalapp/src/app/api/support/route.js:20 |
a6b4429 |
| API-087 (APC) | dentalapp/src/app/api/support/tickets/route.js:5 |
a6b4429 |
| API-088 (APC) | dentalapp/src/app/api/support/tickets/route.js:48 |
a6b4429 |
| API-089 (APC) | dentalapp/src/app/api/upload/route.js:121 |
a6b4429 |
| API-090 (APC) | dentalapp/src/app/api/user/account-status/route.js:9 |
a6b4429 |
| API-091 (APC) | dentalapp/src/app/api/user/offline-limit-exceeded/route.js:21 |
a6b4429 |
| API-092 (APC) | dentalapp/src/app/api/user/profile/route.js:9 |
a6b4429 |
| API-093 (APC) | dentalapp/src/app/api/user/role/route.js:14 |
a6b4429 |
| API-094 (APC) | dentalapp/src/app/api/validate-scan/route.js:8 |
a6b4429 |
| API-095 (APC) | dentalapp/src/app/api/webhooks/cashfree-subscription/route.js:65 |
a6b4429 |
| API-096 (APC) | dentalapp/src/app/api/webhooks/cashfree/route.js:5 |
a6b4429 |
| API-097 (APC) | dentalapp/src/app/api/webhooks/clerk/route.js:27 |
a6b4429 |
4. Authz required and sensitive fields¶
| API ID | Auth | Sensitive fields |
|---|---|---|
| API-001 (APC) | NONE — unprotected (OPEN-026) | Doctor data (DAT-08) |
| API-002 (APC) | NONE — unprotected (OPEN-026) | Doctor data (DAT-08) |
| API-003 (APC) | admin | Doctor data (DAT-08) |
| API-004 (APC) | admin, clerk | Doctor data (DAT-08) |
| API-005 (APC) | admin | Doctor data (DAT-08) |
| API-006 (APC) | admin | Doctor data (DAT-08) |
| API-007 (APC) | admin | Patient data (DAT-01–06) |
| API-008 (APC) | admin | Doctor data (DAT-08) |
| API-009 (APC) | admin, clerk | Doctor data (DAT-08) |
| API-010 (APC) | admin, clerk | Doctor data (DAT-08) |
| API-011 (APC) | admin, clerk | Doctor data (DAT-08) |
| API-012 (APC) | admin, clerk | Doctor data (DAT-08) |
| API-013 (APC) | admin | Patient data (DAT-01–06) |
| API-014 (APC) | admin | Doctor data (DAT-08) |
| API-015 (APC) | admin | Doctor data (DAT-08) |
| API-016 (APC) | admin | Doctor data (DAT-08) |
| API-017 (APC) | admin | Doctor data (DAT-08) |
| API-018 (APC) | admin | Doctor data (DAT-08) |
| API-019 (APC) | admin | Doctor data (DAT-08) |
| API-020 (APC) | NONE — unprotected (OPEN-026) | Doctor data (DAT-08) |
| API-021 (APC) | NONE — unprotected (OPEN-026) | Doctor data (DAT-08) |
| API-022 (APC) | admin | Patient data (DAT-01–06) |
| API-023 (APC) | admin, clerk | Patient data (DAT-01–06) |
| API-024 (APC) | admin, clerk | Patient data (DAT-01–06) |
| API-025 (APC) | admin, clerk | Patient data (DAT-01–06) |
| API-026 (APC) | admin | Patient data (DAT-01–06) |
| API-027 (APC) | admin | Patient data (DAT-01–06) |
| API-028 (APC) | admin | Patient data (DAT-01–06) |
| API-029 (APC) | admin | Doctor data (DAT-08) |
| API-030 (APC) | clerk | Doctor data (DAT-08) |
| API-031 (APC) | clerk | Doctor data (DAT-08) |
| API-032 (APC) | clerk | Doctor data (DAT-08) |
| API-033 (APC) | clerk | Doctor data (DAT-08) |
| API-034 (APC) | NONE — unprotected (OPEN-026) | Doctor data (DAT-08) |
| API-035 (APC) | admin | Doctor data (DAT-08) |
| API-036 (APC) | public-session | Patient data (DAT-01–06) |
| API-037 (APC) | NONE — unprotected (OPEN-026) | — |
| API-038 (APC) | clerk | — |
| API-039 (APC) | clerk | — |
| API-040 (APC) | NONE — unprotected (OPEN-026) | — |
| API-041 (APC) | NONE — unprotected (OPEN-026) | — |
| API-042 (APC) | clerk | — |
| API-043 (APC) | NONE — unprotected (OPEN-026) | — |
| API-044 (APC) | clerk | Doctor data (DAT-08) |
| API-045 (APC) | clerk | Doctor data (DAT-08) |
| API-046 (APC) | clerk | Patient data (DAT-01–06) |
| API-047 (APC) | NONE — unprotected (OPEN-026) | Patient data (DAT-01–06) |
| API-048 (APC) | doctor | — |
| API-049 (APC) | doctor | — |
| API-050 (APC) | doctor | — |
| API-051 (APC) | doctor | — |
| API-052 (APC) | public-session | Patient data (DAT-01–06) |
| API-053 (APC) | clerk | Patient data (DAT-01–06) |
| API-054 (APC) | NONE — unprotected (OPEN-026) | — |
| API-055 (APC) | NONE — unprotected (OPEN-026) | — |
| API-056 (APC) | clerk | — |
| API-057 (APC) | clerk | — |
| API-058 (APC) | clerk | — |
| API-059 (APC) | doctor | Patient data (DAT-01–06) |
| API-060 (APC) | doctor | Patient data (DAT-01–06) |
| API-061 (APC) | doctor | Patient data (DAT-01–06) |
| API-062 (APC) | patient, clerk | Patient data (DAT-01–06) |
| API-063 (APC) | patient, clerk | Patient data (DAT-01–06) |
| API-064 (APC) | doctor | Patient data (DAT-01–06) |
| API-065 (APC) | doctor | Patient data (DAT-01–06) |
| API-066 (APC) | clerk | — |
| API-067 (APC) | clerk | — |
| API-068 (APC) | clerk | — |
| API-069 (APC) | patient, public-session | Patient data (DAT-01–06) |
| API-070 (APC) | NONE — unprotected (OPEN-026) | Patient data (DAT-01–06) |
| API-071 (APC) | NONE — unprotected (OPEN-026) | Patient data (DAT-01–06) |
| API-072 (APC) | NONE — unprotected (OPEN-026) | Patient data (DAT-01–06) |
| API-073 (APC) | clerk | — |
| API-074 (APC) | clerk | — |
| API-075 (APC) | doctor | Patient data (DAT-01–06) |
| API-076 (APC) | patient | Patient data (DAT-01–06) |
| API-077 (APC) | NONE — unprotected (OPEN-026) | Patient data (DAT-01–06) |
| API-078 (APC) | admin, doctor, patient, public-session | Patient data (DAT-01–06) |
| API-079 (APC) | admin, doctor, patient, public-session | Patient data (DAT-01–06) |
| API-080 (APC) | admin, doctor, patient, public-session | Patient data (DAT-01–06) |
| API-081 (APC) | admin, doctor, patient, public-session | Patient data (DAT-01–06) |
| API-082 (APC) | public-session | — |
| API-083 (APC) | NONE — unprotected (OPEN-026) | — |
| API-084 (APC) | NONE — unprotected (OPEN-026) | — |
| API-085 (APC) | NONE — unprotected (OPEN-026) | — |
| API-086 (APC) | NONE — unprotected (OPEN-026) | — |
| API-087 (APC) | NONE — unprotected (OPEN-026) | — |
| API-088 (APC) | NONE — unprotected (OPEN-026) | — |
| API-089 (APC) | patient, clerk, public-session | Patient data (DAT-01–06) |
| API-090 (APC) | clerk | Doctor data (DAT-08) |
| API-091 (APC) | clerk | Doctor data (DAT-08) |
| API-092 (APC) | clerk | Doctor data (DAT-08) |
| API-093 (APC) | clerk | Doctor data (DAT-08) |
| API-094 (APC) | NONE — unprotected (OPEN-026) | — |
| API-095 (APC) | webhook-signature | — |
| API-096 (APC) | webhook-signature | — |
| API-097 (APC) | webhook-signature | — |
5. Request response and error schema references¶
| API ID | OpenAPI operationId |
|---|---|
| API-001 (APC) | No OpenAPI — OPEN-036 |
| API-002 (APC) | No OpenAPI — OPEN-036 |
| API-003 (APC) | No OpenAPI — OPEN-036 |
| API-004 (APC) | No OpenAPI — OPEN-036 |
| API-005 (APC) | No OpenAPI — OPEN-036 |
| API-006 (APC) | No OpenAPI — OPEN-036 |
| API-007 (APC) | No OpenAPI — OPEN-036 |
| API-008 (APC) | No OpenAPI — OPEN-036 |
| API-009 (APC) | No OpenAPI — OPEN-036 |
| API-010 (APC) | No OpenAPI — OPEN-036 |
| API-011 (APC) | No OpenAPI — OPEN-036 |
| API-012 (APC) | No OpenAPI — OPEN-036 |
| API-013 (APC) | No OpenAPI — OPEN-036 |
| API-014 (APC) | No OpenAPI — OPEN-036 |
| API-015 (APC) | No OpenAPI — OPEN-036 |
| API-016 (APC) | No OpenAPI — OPEN-036 |
| API-017 (APC) | No OpenAPI — OPEN-036 |
| API-018 (APC) | No OpenAPI — OPEN-036 |
| API-019 (APC) | No OpenAPI — OPEN-036 |
| API-020 (APC) | No OpenAPI — OPEN-036 |
| API-021 (APC) | No OpenAPI — OPEN-036 |
| API-022 (APC) | No OpenAPI — OPEN-036 |
| API-023 (APC) | No OpenAPI — OPEN-036 |
| API-024 (APC) | No OpenAPI — OPEN-036 |
| API-025 (APC) | No OpenAPI — OPEN-036 |
| API-026 (APC) | No OpenAPI — OPEN-036 |
| API-027 (APC) | No OpenAPI — OPEN-036 |
| API-028 (APC) | No OpenAPI — OPEN-036 |
| API-029 (APC) | No OpenAPI — OPEN-036 |
| API-030 (APC) | No OpenAPI — OPEN-036 |
| API-031 (APC) | No OpenAPI — OPEN-036 |
| API-032 (APC) | No OpenAPI — OPEN-036 |
| API-033 (APC) | No OpenAPI — OPEN-036 |
| API-034 (APC) | No OpenAPI — OPEN-036 |
| API-035 (APC) | No OpenAPI — OPEN-036 |
| API-036 (APC) | No OpenAPI — OPEN-036 |
| API-037 (APC) | No OpenAPI — OPEN-036 |
| API-038 (APC) | No OpenAPI — OPEN-036 |
| API-039 (APC) | No OpenAPI — OPEN-036 |
| API-040 (APC) | No OpenAPI — OPEN-036 |
| API-041 (APC) | No OpenAPI — OPEN-036 |
| API-042 (APC) | No OpenAPI — OPEN-036 |
| API-043 (APC) | No OpenAPI — OPEN-036 |
| API-044 (APC) | No OpenAPI — OPEN-036 |
| API-045 (APC) | No OpenAPI — OPEN-036 |
| API-046 (APC) | No OpenAPI — OPEN-036 |
| API-047 (APC) | No OpenAPI — OPEN-036 |
| API-048 (APC) | No OpenAPI — OPEN-036 |
| API-049 (APC) | No OpenAPI — OPEN-036 |
| API-050 (APC) | No OpenAPI — OPEN-036 |
| API-051 (APC) | No OpenAPI — OPEN-036 |
| API-052 (APC) | No OpenAPI — OPEN-036 |
| API-053 (APC) | No OpenAPI — OPEN-036 |
| API-054 (APC) | No OpenAPI — OPEN-036 |
| API-055 (APC) | No OpenAPI — OPEN-036 |
| API-056 (APC) | No OpenAPI — OPEN-036 |
| API-057 (APC) | No OpenAPI — OPEN-036 |
| API-058 (APC) | No OpenAPI — OPEN-036 |
| API-059 (APC) | No OpenAPI — OPEN-036 |
| API-060 (APC) | No OpenAPI — OPEN-036 |
| API-061 (APC) | No OpenAPI — OPEN-036 |
| API-062 (APC) | No OpenAPI — OPEN-036 |
| API-063 (APC) | No OpenAPI — OPEN-036 |
| API-064 (APC) | No OpenAPI — OPEN-036 |
| API-065 (APC) | No OpenAPI — OPEN-036 |
| API-066 (APC) | No OpenAPI — OPEN-036 |
| API-067 (APC) | No OpenAPI — OPEN-036 |
| API-068 (APC) | No OpenAPI — OPEN-036 |
| API-069 (APC) | No OpenAPI — OPEN-036 |
| API-070 (APC) | No OpenAPI — OPEN-036 |
| API-071 (APC) | No OpenAPI — OPEN-036 |
| API-072 (APC) | No OpenAPI — OPEN-036 |
| API-073 (APC) | No OpenAPI — OPEN-036 |
| API-074 (APC) | No OpenAPI — OPEN-036 |
| API-075 (APC) | No OpenAPI — OPEN-036 |
| API-076 (APC) | No OpenAPI — OPEN-036 |
| API-077 (APC) | No OpenAPI — OPEN-036 |
| API-078 (APC) | No OpenAPI — OPEN-036 |
| API-079 (APC) | No OpenAPI — OPEN-036 |
| API-080 (APC) | No OpenAPI — OPEN-036 |
| API-081 (APC) | No OpenAPI — OPEN-036 |
| API-082 (APC) | No OpenAPI — OPEN-036 |
| API-083 (APC) | No OpenAPI — OPEN-036 |
| API-084 (APC) | No OpenAPI — OPEN-036 |
| API-085 (APC) | No OpenAPI — OPEN-036 |
| API-086 (APC) | No OpenAPI — OPEN-036 |
| API-087 (APC) | No OpenAPI — OPEN-036 |
| API-088 (APC) | No OpenAPI — OPEN-036 |
| API-089 (APC) | No OpenAPI — OPEN-036 |
| API-090 (APC) | No OpenAPI — OPEN-036 |
| API-091 (APC) | No OpenAPI — OPEN-036 |
| API-092 (APC) | No OpenAPI — OPEN-036 |
| API-093 (APC) | No OpenAPI — OPEN-036 |
| API-094 (APC) | No OpenAPI — OPEN-036 |
| API-095 (APC) | No OpenAPI — OPEN-036 |
| API-096 (APC) | No OpenAPI — OPEN-036 |
| API-097 (APC) | No OpenAPI — OPEN-036 |
6. Version owner status and last verified date¶
| API ID | Version | Owner | Status | Verified |
|---|---|---|---|---|
| API-001 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-002 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-003 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-004 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-005 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-006 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-007 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-008 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-009 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-010 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-011 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-012 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-013 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-014 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-015 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-016 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-017 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-018 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-019 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-020 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-021 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-022 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-023 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-024 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-025 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-026 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-027 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-028 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-029 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-030 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-031 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-032 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-033 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-034 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-035 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-036 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-037 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-038 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-039 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-040 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-041 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-042 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-043 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-044 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-045 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-046 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-047 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-048 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-049 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-050 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-051 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-052 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-053 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-054 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-055 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-056 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-057 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-058 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-059 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-060 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-061 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-062 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-063 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-064 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-065 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-066 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-067 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-068 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-069 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-070 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-071 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-072 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-073 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-074 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-075 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-076 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-077 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-078 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-079 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-080 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-081 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-082 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-083 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-084 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-085 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-086 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-087 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-088 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-089 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-090 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-091 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-092 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-093 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-094 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-095 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-096 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
| API-097 (APC) | Unversioned | Backend Lead | Active | 2026-10-27 (code read) |
Open issues and decisions¶
| ID | Specific gap or decision | Responsible owner | Due date | Blocks gate? | Evidence required | Status |
|---|---|---|---|---|---|---|
| OPEN-001 | Tracker project ID, named requester and sponsor, and named reviewers are not recorded | Product Owner | 2026-11-10 (proposed) | Yes | Tracker entry; names with roles | Open |
| OPEN-026 | Critical: 20 API routes have no authentication check, incl. /api/admin/patient-sample (patient emails) and /api/admin/api-usage (doctor names and emails), support tickets/messages, and paid AI routes (/api/detect-gemini, /api/speech-to-text, /api/validate-scan) — see docs/lifecycle/_evidence/api-inventory-a6b4429.md |
Backend Lead | 2026-10-31 (proposed) | Yes | Auth added to each route; re-run of the inventory shows none unprotected | Open |
| OPEN-036 | No OpenAPI specification and no contract tests for the 75 API route files | Backend Lead | 2026-12-15 (proposed) | No | OpenAPI file and contract tests in CI | Open |
Review and approval¶
| Review role | Named individual | Decision | Date | Signed / controlled record |
|---|---|---|---|---|
| Author | Claude Code (drafted with Claude Code) | Draft | 2026-10-27 | This file at the commit that adds it |
| Technical reviewer | Tech Lead (name to be assigned) | Pending | Pending | Pending |
| Quality / regulatory reviewer (if applicable) | Qualified regulatory reviewer (name to be assigned) | Pending | Pending | Pending |
| Authorized approver | Tech Lead (name to be assigned) | Pending | Pending | Pending |