Base URLs
Interactive docs (Swagger UI) are available at
/api/openapi.json on any running instance.
Authentication
All protected endpoints require a JWT bearer token obtained fromPOST /api/auth/login.
The Stripe webhook endpoint (
POST /api/stripe/webhook) is the only endpoint that uses Stripe signature verification instead of JWT. Do not send a bearer token to that endpoint.Response Format
Every endpoint returns the same JSON envelope:Rate Limiting
Sensitive endpoints are rate-limited to 10 requests per minute per IP via SlowAPI:POST /api/auth/loginPOST /api/user/(registration)POST /api/user/verify-email/POST /api/user/verify-email-otp/POST /api/user/verify-email-link/POST /api/user/invite-user/
Permissions
Some endpoints require specific permission slugs on the authenticated user’s role in addition to a valid JWT.
If the permission is missing the endpoint returns
HTTP 403.
API Groups
Auth
Login, logout, OAuth (Google, Microsoft, Cognito)
Users
Registration, profile, email verification, invites
Websites
Add, list, update, and delete websites
Scans
Trigger, cancel, and track audit scans
Results
Audit results and accessibility data
Reports
Generate and download audit reports
AI Solutions
Gemini-powered accessibility fix suggestions
Billing
Stripe subscriptions, checkout, transactions
Organisations
Organisation CRUD and member management
Monitoring
Uptime monitors, RUM, scan schedules