Skip to content

API reference

The API is served by apps/api/ (NestJS 11) at:

  • Production โ€” https://api.clinloop.ca
  • Staging โ€” https://api-staging.clinloop.ca (behind Cloudflare Zero Trust Access)

Live OpenAPI rendering

This page will eventually embed a Scalar viewer hydrated from apps/docs/src/content/api/openapi.json, generated by the new apps/api/src/swagger-gen.ts script during the docs build.

That work is Phase 2 of the docs site plan (docs/docs-site-plan.md). Until it lands, refer directly to the controllers under apps/api/src/<domain>/.

Auth

All non-@Public() routes require a Bearer <jwt> header. Tokens are issued by POST /auth/otp/verify after a 6-digit OTP exchange. Refresh flow is POST /auth/refresh.

See Authentication for the full handshake.