Version: 1.0.0 | Base URL: /api/v1 | Auth: Bearer JWT
GET /health- Health check
POST /auth/login- Login (email, password)GET /users/me- Current user profile
GET /risks- List risks (query: page, limit, sort_by)POST /risks- Create riskGET /risks/{id}- Get riskPATCH /risks/{id}- Update riskDELETE /risks/{id}- Delete risk
POST /risks/{id}/mitigations- Add mitigationPATCH /mitigations/{mitigationId}- Update mitigationPATCH /mitigations/{mitigationId}/toggle- Toggle status (PLANNED↔DONE)
POST /mitigations/{id}/subactions- Create sub-actionPATCH /mitigations/{id}/subactions/{subactionId}/toggle- Toggle completionDELETE /mitigations/{id}/subactions/{subactionId}- Delete sub-actionGET /mitigations/recommended- Get recommended mitigations
GET /assets- List assetsPOST /assets- Create asset
GET /stats- Dashboard statsGET /stats/risk-matrix- Risk matrix (impact vs probability)GET /stats/trends- Risk trends
GET /export/pdf- Export risks to PDF
GET /gamification/me- User gamification profile
See docs/openapi.yaml for complete OpenAPI 3.0 specification with detailed schemas, validation rules, and examples.
All protected endpoints require:
Authorization: Bearer {token}
Obtain token via POST /auth/login (valid for 72 hours).
{
"error": "Error message",
"code": 400,
"details": {}
}Common codes: 400 (Bad Request), 401 (Unauthorized), 404 (Not Found), 500 (Server Error)
Full specification: openapi.yaml
Last updated: December 6, 2025