2025-04-20 11:29:53 -07:00
{
"openapi" : "3.1.0" ,
"info" : {
2025-08-11 13:55:01 -07:00
"title" : "Checkmate API" ,
2025-04-20 11:29:53 -07:00
"summary" : "Checkmate OpenAPI Specifications" ,
"description" : "Checkmate is an open source monitoring tool used to track the operational status and performance of servers and websites. It regularly checks whether a server/website is accessible and performs optimally, providing real-time alerts and reports on the monitored services' availability, downtime, and response time." ,
"contact" : {
"name" : "API Support" ,
"url" : "mailto:support@bluewavelabs.ca" ,
"email" : "support@bluewavelabs.ca"
},
"license" : {
"name" : "AGPLv3" ,
"url" : "https://github.com/bluewave-labs/checkmate/tree/HEAD/LICENSE"
},
2025-08-11 13:55:01 -07:00
"version" : "2.3"
2025-04-20 11:29:53 -07:00
},
"servers" : [
{
"url" : "http://localhost:{PORT}/{API_PATH}" ,
"description" : "Local Development Server" ,
"variables" : {
"PORT" : {
2025-08-11 13:55:01 -07:00
"default" : "52345"
2025-04-20 11:29:53 -07:00
},
"API_PATH" : {
"default" : "api/v1"
}
}
},
{
"url" : "https://checkmate-demo.bluewavelabs.ca/{API_PATH}" ,
"description" : "Checkmate Demo Server" ,
"variables" : {
"API_PATH" : {
"default" : "api/v1"
}
}
}
],
"tags" : [
{
"name" : "auth" ,
2025-08-11 13:55:01 -07:00
"description" : "Authentication and user management"
2025-04-20 11:29:53 -07:00
},
{
"name" : "invite" ,
2025-08-11 13:55:01 -07:00
"description" : "Team invitation management"
2025-04-20 11:29:53 -07:00
},
{
"name" : "monitors" ,
2025-08-11 13:55:01 -07:00
"description" : "Monitor management (uptime, page speed, hardware)"
2025-04-20 11:29:53 -07:00
},
{
"name" : "checks" ,
2025-08-11 13:55:01 -07:00
"description" : "Monitor check results and history"
2025-04-20 11:29:53 -07:00
},
{
"name" : "maintenance-window" ,
2025-08-11 13:55:01 -07:00
"description" : "Scheduled maintenance windows"
2025-04-20 11:29:53 -07:00
},
{
"name" : "queue" ,
2025-08-11 13:55:01 -07:00
"description" : "Job queue management"
2025-04-20 11:29:53 -07:00
},
{
"name" : "status-page" ,
2025-08-11 13:55:01 -07:00
"description" : "Public status page management"
},
{
"name" : "settings" ,
"description" : "Application configuration settings"
},
{
"name" : "logs" ,
"description" : "Application logs and diagnostics"
},
{
"name" : "notifications" ,
"description" : "Notification integrations (email, slack, discord, etc.)"
},
{
"name" : "diagnostic" ,
"description" : "System health and performance diagnostics"
2026-01-19 13:49:08 -05:00
},
{
"name" : "incidents" ,
"description" : "Incident management and resolution"
2025-04-20 11:29:53 -07:00
}
],
"paths" : {
"/auth/register" : {
"post" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "Register new user" ,
"description" : "Register a new user account with profile information" ,
2025-04-20 11:29:53 -07:00
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/schemas/RegisterRequest"
2025-04-20 11:29:53 -07:00
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "User registered successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/schemas/AuthResponse"
2025-04-20 11:29:53 -07:00
}
}
}
},
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
}
}
},
"/auth/login" : {
"post" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "User login" ,
"description" : "Authenticate user with email and password" ,
2025-04-20 11:29:53 -07:00
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/schemas/LoginRequest"
2025-04-20 11:29:53 -07:00
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Login successful" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/schemas/AuthResponse"
2025-04-20 11:29:53 -07:00
}
}
}
},
2025-08-11 13:55:01 -07:00
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
2025-04-20 11:29:53 -07:00
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
}
}
},
"/auth/user/{userId}" : {
"put" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "Update user profile" ,
"description" : "Update user information including profile image" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
"name" : "userId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"requestBody" : {
"required" : true ,
"content" : {
2025-08-11 13:55:01 -07:00
"multipart/form-data" : {
2025-04-20 11:29:53 -07:00
"schema" : {
"$ref" : "#/components/schemas/UserUpdateRequest"
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"delete" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "Delete user account" ,
"description" : "Permanently delete user account and associated data" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
"name" : "userId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/auth/users" : {
2025-04-20 11:29:53 -07:00
"get" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "Get all users" ,
"description" : "Retrieve all users (admin/superadmin only)" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Users retrieved successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/User"
}
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
2025-08-11 13:55:01 -07:00
"403" : {
"$ref" : "#/components/responses/Forbidden"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/auth/users/superadmin" : {
2025-04-20 11:29:53 -07:00
"get" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "Check superadmin exists" ,
"description" : "Check if a superadmin account exists in the system" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Check completed" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"exists" : {
"type" : "boolean"
}
}
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
2025-08-11 13:55:01 -07:00
}
2025-04-20 11:29:53 -07:00
}
},
"/auth/recovery/request" : {
"post" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "Request password reset" ,
"description" : "Send password reset email to user" ,
2025-04-20 11:29:53 -07:00
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "email" ],
"properties" : {
"email" : {
"type" : "string" ,
2025-08-11 13:55:01 -07:00
"format" : "email" ,
"description" : "User email address"
2025-04-20 11:29:53 -07:00
}
}
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"description" : "User not found"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
}
}
},
"/auth/recovery/validate" : {
"post" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "Validate recovery token" ,
"description" : "Validate password reset token" ,
2025-04-20 11:29:53 -07:00
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "recoveryToken" ],
"properties" : {
"recoveryToken" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"description" : "Password reset token"
2025-04-20 11:29:53 -07:00
}
}
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"400" : {
"description" : "Invalid or expired token"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
}
}
},
"/auth/recovery/reset" : {
"post" : {
"tags" : [ "auth" ],
2025-08-11 13:55:01 -07:00
"summary" : "Reset password" ,
"description" : "Reset user password with recovery token" ,
2025-04-20 11:29:53 -07:00
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "recoveryToken" , "password" ],
"properties" : {
"recoveryToken" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"description" : "Password reset token"
2025-04-20 11:29:53 -07:00
},
"password" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"format" : "password" ,
"description" : "New password"
2025-04-20 11:29:53 -07:00
}
}
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"400" : {
"description" : "Invalid token or password requirements not met"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
}
}
}
},
"/monitors" : {
"get" : {
"tags" : [ "monitors" ],
"summary" : "Get all monitors" ,
"description" : "Retrieve all monitors for the authenticated user" ,
"responses" : {
"200" : {
"description" : "Monitors retrieved successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/Monitor"
}
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
2025-08-11 13:55:01 -07:00
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
2025-08-11 13:55:01 -07:00
},
2025-04-20 11:29:53 -07:00
"post" : {
2025-08-11 13:55:01 -07:00
"tags" : [ "monitors" ],
"summary" : "Create monitor" ,
"description" : "Create a new monitoring endpoint" ,
2025-04-20 11:29:53 -07:00
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/schemas/CreateMonitorRequest"
2025-04-20 11:29:53 -07:00
}
}
}
},
"responses" : {
2025-08-11 13:55:01 -07:00
"201" : {
"description" : "Monitor created successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"$ref" : "#/components/schemas/Monitor"
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
2025-08-11 13:55:01 -07:00
},
"delete" : {
2025-04-20 11:29:53 -07:00
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Delete all monitors" ,
"description" : "Delete all monitors (superadmin only)" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"403" : {
"$ref" : "#/components/responses/Forbidden"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
2025-08-11 13:55:01 -07:00
}
},
"/monitors/team" : {
"get" : {
2025-04-20 11:29:53 -07:00
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Get monitors by team" ,
"description" : "Get monitors filtered by team with optional parameters" ,
"parameters" : [
{
"name" : "status" ,
"in" : "query" ,
"description" : "Filter by monitor status (up/down)" ,
"schema" : {
"type" : "boolean"
2025-04-20 11:29:53 -07:00
}
2025-08-11 13:55:01 -07:00
},
{
"name" : "type" ,
"in" : "query" ,
"description" : "Filter by monitor type" ,
"schema" : {
"type" : "string" ,
"enum" : [ "http" , "ping" , "pagespeed" , "hardware" , "docker" , "port" ]
2025-04-20 11:29:53 -07:00
}
},
2025-08-11 13:55:01 -07:00
{
"name" : "page" ,
"in" : "query" ,
"description" : "Page number for pagination" ,
"schema" : {
"type" : "integer" ,
"minimum" : 1 ,
"default" : 1
2025-04-20 11:29:53 -07:00
}
},
2025-08-11 13:55:01 -07:00
{
"name" : "rowsPerPage" ,
"in" : "query" ,
"description" : "Number of monitors per page" ,
"schema" : {
"type" : "integer" ,
"minimum" : 1 ,
"maximum" : 100 ,
"default" : 10
2025-04-20 11:29:53 -07:00
}
2025-08-11 13:55:01 -07:00
},
2025-04-20 11:29:53 -07:00
{
2025-08-11 13:55:01 -07:00
"name" : "filter" ,
"in" : "query" ,
"description" : "Search filter value" ,
"schema" : {
"type" : "string"
}
},
{
"name" : "field" ,
"in" : "query" ,
"description" : "Field to filter on" ,
"schema" : {
"type" : "string" ,
"enum" : [ "name" , "url" , "description" ]
}
2025-04-20 11:29:53 -07:00
}
2025-08-11 13:55:01 -07:00
],
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Team monitors retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"monitors" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/Monitor"
}
},
"totalCount" : {
"type" : "integer"
}
}
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/monitors/team/with-checks" : {
2025-04-20 11:29:53 -07:00
"get" : {
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Get monitors with recent checks" ,
"description" : "Get team monitors with their most recent check results" ,
"parameters" : [
{
"name" : "limit" ,
"in" : "query" ,
"description" : "Number of recent checks to include per monitor" ,
"schema" : {
"type" : "integer" ,
"minimum" : 1 ,
"maximum" : 50 ,
"default" : 10
}
}
],
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Monitors with checks retrieved successfully"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2026-01-19 13:49:08 -05:00
"/monitors/team/groups" : {
2025-04-20 11:29:53 -07:00
"get" : {
"tags" : [ "monitors" ],
2026-01-19 13:49:08 -05:00
"summary" : "Get monitor groups by team" ,
"description" : "Get all monitor groups for the authenticated user's team" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2026-01-19 13:49:08 -05:00
"description" : "Monitor groups retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Monitor groups retrieved successfully"
},
"data" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"_id" : {
"type" : "string"
},
"name" : {
"type" : "string"
},
"monitors" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
}
}
}
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/monitors/{monitorId}" : {
"get" : {
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Get monitor by ID" ,
"description" : "Retrieve a specific monitor by its ID" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
2025-08-11 13:55:01 -07:00
"description" : "Monitor ID" ,
2025-04-20 11:29:53 -07:00
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Monitor retrieved successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"$ref" : "#/components/schemas/Monitor"
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"put" : {
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Update monitor" ,
"description" : "Update an existing monitor" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/schemas/UpdateMonitorRequest"
2025-04-20 11:29:53 -07:00
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"delete" : {
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Delete monitor" ,
"description" : "Delete a specific monitor" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/monitors/uptime/details/{monitorId}" : {
2025-04-20 11:29:53 -07:00
"get" : {
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Get uptime details" ,
"description" : "Get detailed uptime statistics for a monitor" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Uptime details retrieved successfully"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/monitors/hardware/details/{monitorId}" : {
2025-04-20 11:29:53 -07:00
"get" : {
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Get hardware monitoring details" ,
"description" : "Get hardware performance metrics for a monitor" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Hardware details retrieved successfully"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/monitors/pause/{monitorId}" : {
"post" : {
2025-04-20 11:29:53 -07:00
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Pause/unpause monitor" ,
"description" : "Toggle monitor active status" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
2025-08-11 13:55:01 -07:00
"name" : "monitorId" ,
2025-04-20 11:29:53 -07:00
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2026-01-19 13:49:08 -05:00
"/monitors/pagespeed/details/{monitorId}" : {
2025-04-20 11:29:53 -07:00
"get" : {
"tags" : [ "monitors" ],
2026-01-19 13:49:08 -05:00
"summary" : "Get PageSpeed monitor details" ,
"description" : "Get detailed PageSpeed monitoring data including performance metrics and Core Web Vitals" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
2025-08-11 13:55:01 -07:00
"name" : "monitorId" ,
2025-04-20 11:29:53 -07:00
"in" : "path" ,
"required" : true ,
2026-01-19 13:49:08 -05:00
"description" : "The PageSpeed monitor ID" ,
2025-04-20 11:29:53 -07:00
"schema" : {
"type" : "string"
}
2026-01-19 13:49:08 -05:00
},
{
"name" : "sortOrder" ,
"in" : "query" ,
"description" : "Sort order for results" ,
"schema" : {
"type" : "string" ,
"enum" : [ "asc" , "desc" ],
"default" : "desc"
}
},
{
"name" : "limit" ,
"in" : "query" ,
"description" : "Number of results to return" ,
"schema" : {
"type" : "integer" ,
"default" : 50
}
2025-04-20 11:29:53 -07:00
}
],
"responses" : {
"200" : {
2026-01-19 13:49:08 -05:00
"description" : "PageSpeed details retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "PageSpeed details retrieved successfully"
},
"data" : {
"type" : "object" ,
"properties" : {
"monitor" : {
"$ref" : "#/components/schemas/Monitor"
},
"checks" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/Check"
}
}
}
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/monitors/certificate/{monitorId}" : {
"get" : {
2025-04-20 11:29:53 -07:00
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Get SSL certificate info" ,
"description" : "Get SSL certificate information for a monitor" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Certificate information retrieved successfully"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/monitors/demo" : {
"post" : {
"tags" : [ "monitors" ],
2025-08-11 13:55:01 -07:00
"summary" : "Add demo monitors" ,
"description" : "Add preconfigured demo monitors for testing" ,
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
2025-08-11 13:55:01 -07:00
"security" : [
{
"bearerAuth" : []
}
]
}
},
2026-01-19 13:49:08 -05:00
"/monitors/export/json" : {
2025-08-11 13:55:01 -07:00
"get" : {
"tags" : [ "monitors" ],
2026-01-19 13:49:08 -05:00
"summary" : "Export monitors to JSON" ,
"description" : "Export all monitors to JSON format (admin/superadmin only)" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2026-01-19 13:49:08 -05:00
"description" : "JSON file generated successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
2026-01-19 13:49:08 -05:00
"application/json" : {
2025-04-20 11:29:53 -07:00
"schema" : {
2026-01-19 13:49:08 -05:00
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Monitors exported successfully"
},
"data" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/Monitor"
}
}
}
2025-04-20 11:29:53 -07:00
}
}
}
},
2026-01-19 13:49:08 -05:00
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
2025-04-20 11:29:53 -07:00
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/monitors/bulk" : {
"post" : {
"tags" : [ "monitors" ],
"summary" : "Bulk import monitors" ,
"description" : "Import monitors from CSV file" ,
"requestBody" : {
"required" : true ,
"content" : {
"multipart/form-data" : {
"schema" : {
"type" : "object" ,
"properties" : {
"csvFile" : {
"type" : "string" ,
"format" : "binary" ,
"description" : "CSV file containing monitor data"
}
}
}
2025-04-20 11:29:53 -07:00
}
}
2025-08-11 13:55:01 -07:00
},
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Monitors imported successfully"
2025-04-20 11:29:53 -07:00
},
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
2025-08-11 13:55:01 -07:00
}
},
"/monitors/test-email" : {
2025-04-20 11:29:53 -07:00
"post" : {
2025-08-11 13:55:01 -07:00
"tags" : [ "monitors" ],
"summary" : "Send test email" ,
"description" : "Send a test email notification" ,
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
2025-08-11 13:55:01 -07:00
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/settings" : {
"get" : {
"tags" : [ "settings" ],
"summary" : "Get application settings" ,
"description" : "Retrieve current application configuration" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Settings retrieved successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"$ref" : "#/components/schemas/AppSettings"
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
2025-08-11 13:55:01 -07:00
"put" : {
"tags" : [ "settings" ],
"summary" : "Update application settings" ,
"description" : "Update application configuration (admin/superadmin only)" ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/AppSettings"
}
2025-04-20 11:29:53 -07:00
}
}
2025-08-11 13:55:01 -07:00
},
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
2025-04-20 11:29:53 -07:00
},
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/settings/test-email" : {
"post" : {
"tags" : [ "settings" ],
"summary" : "Send test email" ,
"description" : "Send test email to verify email configuration" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"403" : {
"$ref" : "#/components/responses/Forbidden"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
2025-08-11 13:55:01 -07:00
}
},
"/notifications" : {
2026-01-19 14:13:18 -05:00
"post" : {
"tags" : [ "notifications" ],
"summary" : "Create notification" ,
"description" : "Create a new notification integration" ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/CreateNotificationRequest"
}
}
}
},
"responses" : {
"201" : {
"description" : "Notification created successfully"
},
"422" : {
"$ref" : "#/components/responses/ValidationError"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/notifications/team" : {
2025-08-11 13:55:01 -07:00
"get" : {
"tags" : [ "notifications" ],
"summary" : "Get team notifications" ,
"description" : "Get all notification configurations for the team" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Notifications retrieved successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/Notification"
}
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/notifications/{id}" : {
2025-04-20 11:29:53 -07:00
"get" : {
2025-08-11 13:55:01 -07:00
"tags" : [ "notifications" ],
"summary" : "Get notification by ID" ,
"description" : "Retrieve a specific notification configuration" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
2025-08-11 13:55:01 -07:00
"name" : "id" ,
2025-04-20 11:29:53 -07:00
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "Notification retrieved successfully"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
2025-08-11 13:55:01 -07:00
"put" : {
"tags" : [ "notifications" ],
"summary" : "Update notification" ,
"description" : "Update an existing notification configuration" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
2025-08-11 13:55:01 -07:00
"name" : "id" ,
2025-04-20 11:29:53 -07:00
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/schemas/CreateNotificationRequest"
2025-04-20 11:29:53 -07:00
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
2025-08-11 13:55:01 -07:00
},
"delete" : {
"tags" : [ "notifications" ],
"summary" : "Delete notification" ,
"description" : "Delete a notification configuration" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
2025-08-11 13:55:01 -07:00
"name" : "id" ,
2025-04-20 11:29:53 -07:00
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/notifications/test" : {
"post" : {
"tags" : [ "notifications" ],
"summary" : "Test notification" ,
"description" : "Send a test notification to verify configuration" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
2025-08-11 13:55:01 -07:00
}
},
"/notifications/test/all" : {
2025-04-20 11:29:53 -07:00
"post" : {
2025-08-11 13:55:01 -07:00
"tags" : [ "notifications" ],
"summary" : "Test all notifications" ,
"description" : "Send test notifications to all configured integrations" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/logs" : {
"get" : {
"tags" : [ "logs" ],
"summary" : "Get application logs" ,
"description" : "Retrieve application logs (admin/superadmin only)" ,
"parameters" : [
{
"name" : "level" ,
"in" : "query" ,
"description" : "Log level filter" ,
"schema" : {
"type" : "string" ,
"enum" : [ "error" , "warn" , "info" , "debug" ]
2025-04-20 11:29:53 -07:00
}
},
2025-08-11 13:55:01 -07:00
{
"name" : "limit" ,
"in" : "query" ,
"description" : "Number of log entries to return" ,
"schema" : {
"type" : "integer" ,
"minimum" : 1 ,
"maximum" : 1000 ,
"default" : 100
2025-04-20 11:29:53 -07:00
}
2025-08-11 13:55:01 -07:00
}
],
"responses" : {
"200" : {
"description" : "Logs retrieved successfully"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/diagnostic/system" : {
2025-04-20 11:29:53 -07:00
"get" : {
2025-08-11 13:55:01 -07:00
"tags" : [ "diagnostic" ],
"summary" : "Get system diagnostics" ,
"description" : "Get system health and performance metrics (admin/superadmin only)" ,
2025-04-20 11:29:53 -07:00
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "System diagnostics retrieved successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"$ref" : "#/components/schemas/SystemDiagnostics"
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
2025-08-11 13:55:01 -07:00
"403" : {
"$ref" : "#/components/responses/Forbidden"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/auth/user" : {
"put" : {
"tags" : [ "auth" ],
"summary" : "Update current user profile" ,
"description" : "Update authenticated user's profile information" ,
"requestBody" : {
"required" : true ,
"content" : {
"multipart/form-data" : {
"schema" : {
"$ref" : "#/components/schemas/UserUpdateRequest"
2025-04-20 11:29:53 -07:00
}
}
2025-08-11 13:55:01 -07:00
}
},
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
"422" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"delete" : {
"tags" : [ "auth" ],
"summary" : "Delete current user account" ,
"description" : "Delete authenticated user's account and associated data" ,
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/auth/users/{userId}" : {
2025-04-20 11:29:53 -07:00
"get" : {
2025-08-11 13:55:01 -07:00
"tags" : [ "auth" ],
"summary" : "Get user by ID" ,
"description" : "Get a specific user by ID (superadmin only)" ,
2025-04-20 11:29:53 -07:00
"parameters" : [
{
2025-08-11 13:55:01 -07:00
"name" : "userId" ,
2025-04-20 11:29:53 -07:00
"in" : "path" ,
"required" : true ,
2025-08-11 13:55:01 -07:00
"schema" : {
"type" : "string"
}
2025-04-20 11:29:53 -07:00
}
],
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"description" : "User retrieved successfully" ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"$ref" : "#/components/schemas/User"
}
}
}
]
2025-04-20 11:29:53 -07:00
}
}
}
},
"404" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/NotFound"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
2025-08-11 13:55:01 -07:00
},
"security" : [
{
"bearerAuth" : []
}
]
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"put" : {
"tags" : [ "auth" ],
"summary" : "Update user by ID" ,
"description" : "Update a specific user by ID (superadmin only)" ,
"parameters" : [
{
"name" : "userId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
2025-04-20 11:29:53 -07:00
"requestBody" : {
2025-08-11 13:55:01 -07:00
"required" : true ,
2025-04-20 11:29:53 -07:00
"content" : {
"application/json" : {
"schema" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/schemas/UserUpdateRequest"
2025-04-20 11:29:53 -07:00
}
}
}
},
"responses" : {
"200" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/Success"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"404" : {
"$ref" : "#/components/responses/NotFound"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"422" : {
"$ref" : "#/components/responses/ValidationError"
2025-04-20 11:29:53 -07:00
},
"500" : {
2025-08-11 13:55:01 -07:00
"$ref" : "#/components/responses/InternalServerError"
2025-04-20 11:29:53 -07:00
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2026-01-19 14:13:18 -05:00
"/auth/users/{userId}/password" : {
"put" : {
"tags" : [ "auth" ],
"summary" : "Update user password by ID" ,
"description" : "Update a specific user's password by ID (superadmin only)" ,
"parameters" : [
{
"name" : "userId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "password" ],
"properties" : {
"password" : {
"type" : "string" ,
"format" : "password" ,
"minLength" : 8 ,
"description" : "New password for the user"
}
}
}
}
}
},
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"422" : {
"$ref" : "#/components/responses/ValidationError"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/invite" : {
"post" : {
"tags" : [ "invite" ],
"summary" : "Create invite token" ,
"description" : "Create a new invitation token" ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "email" , "role" ],
"properties" : {
"email" : {
"type" : "string" ,
"format" : "email"
},
"role" : {
"type" : "array" ,
"items" : {
"type" : "string" ,
"enum" : [ "user" , "admin" ]
}
}
}
}
}
}
},
"responses" : {
"201" : {
"description" : "Invite token created successfully"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"422" : {
"$ref" : "#/components/responses/ValidationError"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/invite/send" : {
"post" : {
"tags" : [ "invite" ],
"summary" : "Send invitation email" ,
"description" : "Send invitation email to user" ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "email" ],
"properties" : {
"email" : {
"type" : "string" ,
"format" : "email"
}
}
}
}
}
},
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/invite/verify" : {
"post" : {
"tags" : [ "invite" ],
"summary" : "Verify invitation token" ,
"description" : "Verify an invitation token" ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "token" ],
"properties" : {
"token" : {
"type" : "string"
}
}
}
}
}
},
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"400" : {
"description" : "Invalid or expired token"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
}
}
},
"/checks/{monitorId}" : {
"get" : {
"tags" : [ "checks" ],
"summary" : "Get checks by monitor" ,
"description" : "Get all checks for a specific monitor" ,
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
"description" : "Checks retrieved successfully"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"delete" : {
"tags" : [ "checks" ],
"summary" : "Delete checks by monitor" ,
"description" : "Delete all checks for a specific monitor" ,
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/checks/team" : {
"get" : {
"tags" : [ "checks" ],
"summary" : "Get checks by team" ,
"description" : "Get all checks for team monitors" ,
"responses" : {
"200" : {
"description" : "Team checks retrieved successfully"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"delete" : {
"tags" : [ "checks" ],
"summary" : "Delete team checks" ,
"description" : "Delete all checks for team (admin/superadmin only)" ,
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/checks/team/summary" : {
"get" : {
"tags" : [ "checks" ],
"summary" : "Get team checks summary" ,
"description" : "Get summary statistics for team checks" ,
"responses" : {
"200" : {
"description" : "Team checks summary retrieved successfully"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/checks/team/ttl" : {
"put" : {
"tags" : [ "checks" ],
"summary" : "Update checks TTL" ,
"description" : "Update time-to-live for checks (admin/superadmin only)" ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "ttl" ],
"properties" : {
"ttl" : {
"type" : "integer" ,
"minimum" : 1 ,
"description" : "Time to live in days"
}
}
}
}
}
},
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"422" : {
"$ref" : "#/components/responses/ValidationError"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/checks/check/{checkId}" : {
"put" : {
"tags" : [ "checks" ],
"summary" : "Acknowledge check" ,
"description" : "Acknowledge a specific check" ,
"parameters" : [
{
"name" : "checkId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
2026-01-19 13:49:08 -05:00
"requestBody" : {
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"ack" : {
"type" : "boolean" ,
"description" : "Acknowledgement status"
}
}
}
}
}
},
2025-08-11 13:55:01 -07:00
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2026-01-19 13:49:08 -05:00
"/checks/{action}" : {
"put" : {
"tags" : [ "checks" ],
"summary" : "Acknowledge all checks for all monitors" ,
"description" : "Acknowledge all checks across all monitors for the team" ,
"parameters" : [
{
"name" : "action" ,
"in" : "path" ,
"required" : true ,
"description" : "Action to perform (e.g., 'ack')" ,
"schema" : {
"type" : "string" ,
"enum" : [ "ack" ]
}
}
],
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "ack" ],
"properties" : {
"ack" : {
"type" : "boolean" ,
"description" : "Acknowledgement status to set"
}
}
}
}
}
},
"responses" : {
"200" : {
"description" : "Checks acknowledged successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "All checks acknowledged successfully"
},
"data" : {
"type" : "object" ,
"description" : "Updated checks information"
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/checks/{action}/{monitorId}" : {
"put" : {
"tags" : [ "checks" ],
"summary" : "Acknowledge all checks for a specific monitor" ,
"description" : "Acknowledge all checks for a specific monitor" ,
"parameters" : [
{
"name" : "action" ,
"in" : "path" ,
"required" : true ,
"description" : "Action to perform (e.g., 'ack')" ,
"schema" : {
"type" : "string" ,
"enum" : [ "ack" ]
}
},
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"description" : "Monitor ID to acknowledge checks for" ,
"schema" : {
"type" : "string"
}
}
],
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "ack" ],
"properties" : {
"ack" : {
"type" : "boolean" ,
"description" : "Acknowledgement status to set"
}
}
}
}
}
},
"responses" : {
"200" : {
"description" : "Checks acknowledged successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "All checks acknowledged successfully"
},
"data" : {
"type" : "object" ,
"description" : "Updated checks information"
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2025-08-11 13:55:01 -07:00
"/maintenance-window" : {
"post" : {
"tags" : [ "maintenance-window" ],
"summary" : "Create maintenance window" ,
"description" : "Create a new maintenance window" ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"required" : [ "name" , "startTime" , "endTime" ],
"properties" : {
"name" : {
"type" : "string" ,
"maxLength" : 100
},
"description" : {
"type" : "string" ,
"maxLength" : 500
},
"startTime" : {
"type" : "string" ,
"format" : "date-time"
},
"endTime" : {
"type" : "string" ,
"format" : "date-time"
},
"monitors" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
}
}
}
}
}
},
"responses" : {
"201" : {
"description" : "Maintenance window created successfully"
},
"422" : {
"$ref" : "#/components/responses/ValidationError"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/maintenance-window/team" : {
"get" : {
"tags" : [ "maintenance-window" ],
"summary" : "Get team maintenance windows" ,
"description" : "Get all maintenance windows for the team" ,
"responses" : {
"200" : {
"description" : "Maintenance windows retrieved successfully"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/maintenance-window/monitor/{monitorId}" : {
"get" : {
"tags" : [ "maintenance-window" ],
"summary" : "Get maintenance windows by monitor" ,
"description" : "Get all maintenance windows for a specific monitor" ,
"parameters" : [
{
"name" : "monitorId" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
"description" : "Monitor maintenance windows retrieved successfully"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/maintenance-window/{id}" : {
"get" : {
"tags" : [ "maintenance-window" ],
"summary" : "Get maintenance window by ID" ,
"description" : "Get a specific maintenance window" ,
"parameters" : [
{
"name" : "id" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
"description" : "Maintenance window retrieved successfully"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"put" : {
"tags" : [ "maintenance-window" ],
"summary" : "Update maintenance window" ,
"description" : "Update an existing maintenance window" ,
"parameters" : [
{
"name" : "id" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"name" : {
"type" : "string" ,
"maxLength" : 100
},
"description" : {
"type" : "string" ,
"maxLength" : 500
},
"startTime" : {
"type" : "string" ,
"format" : "date-time"
},
"endTime" : {
"type" : "string" ,
"format" : "date-time"
},
"monitors" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
}
}
}
}
}
},
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"422" : {
"$ref" : "#/components/responses/ValidationError"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"delete" : {
"tags" : [ "maintenance-window" ],
"summary" : "Delete maintenance window" ,
"description" : "Delete a specific maintenance window" ,
"parameters" : [
{
"name" : "id" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2026-01-19 13:49:08 -05:00
"/queue/jobs" : {
2025-08-11 13:55:01 -07:00
"get" : {
"tags" : [ "queue" ],
2026-01-19 13:49:08 -05:00
"summary" : "Get queue jobs" ,
"description" : "Retrieve all jobs in the queue (admin/superadmin only)" ,
2025-08-11 13:55:01 -07:00
"responses" : {
"200" : {
2026-01-19 13:49:08 -05:00
"description" : "Queue jobs retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Queue jobs fetched successfully"
},
"data" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/QueueJob"
}
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
2025-08-11 13:55:01 -07:00
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
2026-01-19 13:49:08 -05:00
},
"post" : {
2025-08-11 13:55:01 -07:00
"tags" : [ "queue" ],
2026-01-19 13:49:08 -05:00
"summary" : "Add job to queue" ,
"description" : "Add a new job to the queue (admin/superadmin only)" ,
2025-08-11 13:55:01 -07:00
"responses" : {
"200" : {
2026-01-19 13:49:08 -05:00
"description" : "Job added successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Job added to queue successfully"
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
2025-08-11 13:55:01 -07:00
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2026-01-19 13:49:08 -05:00
"/queue/metrics" : {
"get" : {
2025-08-11 13:55:01 -07:00
"tags" : [ "queue" ],
2026-01-19 13:49:08 -05:00
"summary" : "Get queue metrics" ,
"description" : "Retrieve queue metrics (admin/superadmin only)" ,
2025-08-11 13:55:01 -07:00
"responses" : {
"200" : {
2026-01-19 13:49:08 -05:00
"description" : "Queue metrics retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Queue metrics fetched successfully"
},
"data" : {
"$ref" : "#/components/schemas/QueueMetrics"
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/queue/health" : {
"get" : {
"tags" : [ "queue" ],
"summary" : "Check queue health" ,
"description" : "Check the health status of the job queue (admin/superadmin only)" ,
"responses" : {
"200" : {
"description" : "Queue health status retrieved successfully"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/queue/all-metrics" : {
"get" : {
"tags" : [ "queue" ],
"summary" : "Get all queue metrics" ,
"description" : "Get comprehensive queue metrics (admin/superadmin only)" ,
"responses" : {
"200" : {
"description" : "All queue metrics retrieved successfully"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/queue/flush" : {
"post" : {
"tags" : [ "queue" ],
"summary" : "Flush queue" ,
"description" : "Clear all jobs from the queue (admin/superadmin only)" ,
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
2025-08-11 13:55:01 -07:00
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/monitors/games" : {
"get" : {
"tags" : [ "monitors" ],
"summary" : "Get game server list" ,
"description" : "Get available game servers for monitoring" ,
"responses" : {
"200" : {
"description" : "Game servers retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"id" : {
"type" : "string"
},
"name" : {
"type" : "string"
}
}
}
}
}
}
]
}
}
}
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/status-page" : {
"get" : {
"tags" : [ "status-page" ],
"summary" : "Get status page" ,
"description" : "Get default status page information" ,
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
}
},
"post" : {
"tags" : [ "status-page" ],
"summary" : "Create status page" ,
"description" : "Create a new status page with optional logo upload" ,
"requestBody" : {
"content" : {
"multipart/form-data" : {
"schema" : {
"type" : "object" ,
"properties" : {
"logo" : {
"type" : "string" ,
"format" : "binary" ,
"description" : "Logo file for the status page"
},
"title" : {
"type" : "string" ,
"description" : "Status page title"
},
"description" : {
"type" : "string" ,
"description" : "Status page description"
},
"url" : {
"type" : "string" ,
"description" : "Custom URL for the status page"
}
}
}
}
}
},
"responses" : {
"201" : {
"$ref" : "#/components/responses/Success"
},
"400" : {
"$ref" : "#/components/responses/BadRequest"
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
},
"put" : {
"tags" : [ "status-page" ],
"summary" : "Update status page" ,
"description" : "Update an existing status page with optional logo upload" ,
"requestBody" : {
"content" : {
"multipart/form-data" : {
"schema" : {
"type" : "object" ,
"properties" : {
"logo" : {
"type" : "string" ,
"format" : "binary" ,
"description" : "Logo file for the status page"
},
"title" : {
"type" : "string" ,
"description" : "Status page title"
},
"description" : {
"type" : "string" ,
"description" : "Status page description"
},
"url" : {
"type" : "string" ,
"description" : "Custom URL for the status page"
}
}
}
}
}
},
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"400" : {
"$ref" : "#/components/responses/BadRequest"
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/status-page/team" : {
"get" : {
"tags" : [ "status-page" ],
"summary" : "Get status pages by team" ,
"description" : "Get all status pages for the authenticated user's team" ,
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/status-page/{url}" : {
"get" : {
"tags" : [ "status-page" ],
"summary" : "Get status page by URL" ,
"description" : "Get a specific status page by its custom URL" ,
"parameters" : [
{
"name" : "url" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
},
"description" : "Custom URL of the status page"
}
],
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
}
},
"delete" : {
"tags" : [ "status-page" ],
"summary" : "Delete status page" ,
"description" : "Delete a status page by its custom URL" ,
"parameters" : [
{
"name" : "url" ,
"in" : "path" ,
"required" : true ,
"schema" : {
"type" : "string"
},
"description" : "Custom URL of the status page (supports wildcards)"
}
],
"responses" : {
"200" : {
"$ref" : "#/components/responses/Success"
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
2026-01-19 13:49:08 -05:00
"/incidents/team" : {
"get" : {
"tags" : [ "incidents" ],
"summary" : "Get incidents by team" ,
"description" : "Retrieve all incidents for the authenticated user's team with optional filtering" ,
"parameters" : [
{
"name" : "status" ,
"in" : "query" ,
"description" : "Filter by incident status (true = ongoing, false = resolved)" ,
2025-08-11 13:55:01 -07:00
"schema" : {
2026-01-19 13:49:08 -05:00
"type" : "boolean"
2025-08-11 13:55:01 -07:00
}
2026-01-19 13:49:08 -05:00
},
{
"name" : "monitorId" ,
"in" : "query" ,
"description" : "Filter by monitor ID" ,
2025-08-11 13:55:01 -07:00
"schema" : {
2026-01-19 13:49:08 -05:00
"type" : "string"
2025-08-11 13:55:01 -07:00
}
2026-01-19 13:49:08 -05:00
},
{
"name" : "page" ,
"in" : "query" ,
"description" : "Page number for pagination" ,
2025-08-11 13:55:01 -07:00
"schema" : {
2026-01-19 13:49:08 -05:00
"type" : "integer" ,
"default" : 1
2025-08-11 13:55:01 -07:00
}
2026-01-19 13:49:08 -05:00
},
{
"name" : "limit" ,
"in" : "query" ,
"description" : "Number of items per page" ,
2025-08-11 13:55:01 -07:00
"schema" : {
2026-01-19 13:49:08 -05:00
"type" : "integer" ,
"default" : 10
2025-08-11 13:55:01 -07:00
}
2026-01-19 13:49:08 -05:00
},
{
"name" : "sortOrder" ,
"in" : "query" ,
"description" : "Sort order for results" ,
2025-08-11 13:55:01 -07:00
"schema" : {
2026-01-19 13:49:08 -05:00
"type" : "string" ,
"enum" : [ "asc" , "desc" ],
"default" : "desc"
2025-08-11 13:55:01 -07:00
}
}
2026-01-19 13:49:08 -05:00
],
"responses" : {
"200" : {
"description" : "Incidents retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Incidents retrieved successfully"
},
"data" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/Incident"
}
}
}
}
}
2025-08-11 13:55:01 -07:00
}
2026-01-19 13:49:08 -05:00
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
2025-08-11 13:55:01 -07:00
}
2026-01-19 13:49:08 -05:00
},
"security" : [
{
"bearerAuth" : []
}
]
2025-08-11 13:55:01 -07:00
}
},
2026-01-19 13:49:08 -05:00
"/incidents/team/summary" : {
"get" : {
"tags" : [ "incidents" ],
"summary" : "Get incident summary" ,
"description" : "Retrieve a summary of incidents for the authenticated user's team" ,
"parameters" : [
{
"name" : "dateRange" ,
"in" : "query" ,
"description" : "Date range for summary" ,
"schema" : {
"type" : "string" ,
"enum" : [ "day" , "week" , "month" ],
"default" : "week"
}
2025-04-20 11:29:53 -07:00
}
2026-01-19 13:49:08 -05:00
],
"responses" : {
"200" : {
"description" : "Incident summary retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Incident summary retrieved successfully"
},
"data" : {
"$ref" : "#/components/schemas/IncidentSummary"
}
}
}
}
}
2025-08-11 13:55:01 -07:00
},
2026-01-19 13:49:08 -05:00
"401" : {
"$ref" : "#/components/responses/Unauthorized"
2025-08-11 13:55:01 -07:00
},
2026-01-19 13:49:08 -05:00
"500" : {
"$ref" : "#/components/responses/InternalServerError"
2025-08-11 13:55:01 -07:00
}
2026-01-19 13:49:08 -05:00
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/incidents/{incidentId}" : {
"get" : {
"tags" : [ "incidents" ],
"summary" : "Get incident by ID" ,
"description" : "Retrieve a specific incident by its ID" ,
"parameters" : [
{
"name" : "incidentId" ,
"in" : "path" ,
"required" : true ,
"description" : "The incident ID" ,
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
"description" : "Incident retrieved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Incident retrieved successfully"
},
"data" : {
"$ref" : "#/components/schemas/Incident"
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
},
"/incidents/{incidentId}/resolve" : {
"put" : {
"tags" : [ "incidents" ],
"summary" : "Resolve incident manually" ,
"description" : "Manually resolve an ongoing incident. Requires admin or superadmin role." ,
"parameters" : [
{
"name" : "incidentId" ,
"in" : "path" ,
"required" : true ,
"description" : "The incident ID to resolve" ,
"schema" : {
"type" : "string"
}
}
],
"requestBody" : {
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"comment" : {
"type" : "string" ,
"description" : "Optional comment about the resolution" ,
"example" : "Issue resolved by restarting the service"
}
}
}
}
}
},
"responses" : {
"200" : {
"description" : "Incident resolved successfully" ,
"content" : {
"application/json" : {
"schema" : {
"type" : "object" ,
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Incident resolved successfully"
},
"data" : {
"$ref" : "#/components/schemas/Incident"
}
}
}
}
}
},
"401" : {
"$ref" : "#/components/responses/Unauthorized"
},
"403" : {
"$ref" : "#/components/responses/Forbidden"
},
"404" : {
"$ref" : "#/components/responses/NotFound"
},
"500" : {
"$ref" : "#/components/responses/InternalServerError"
}
},
"security" : [
{
"bearerAuth" : []
}
]
}
}
},
"components" : {
"securitySchemes" : {
"bearerAuth" : {
"type" : "http" ,
"scheme" : "bearer" ,
"bearerFormat" : "JWT" ,
"description" : "JWT token obtained from login endpoint"
}
},
"responses" : {
"Success" : {
"description" : "Operation successful" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/SuccessResponse"
}
}
}
},
"NotFound" : {
"description" : "Resource not found" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ErrorResponse"
}
}
}
},
"ValidationError" : {
"description" : "Validation failed" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ErrorResponse"
}
}
}
},
"Unauthorized" : {
"description" : "Authentication required or token invalid" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ErrorResponse"
}
}
}
},
"Forbidden" : {
"description" : "Insufficient permissions" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ErrorResponse"
}
}
}
},
"BadRequest" : {
"description" : "Invalid request parameters" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ErrorResponse"
}
}
}
},
"InternalServerError" : {
"description" : "Internal server error" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ErrorResponse"
}
}
}
}
},
"schemas" : {
"SuccessResponse" : {
"type" : "object" ,
"required" : [ "success" , "msg" ],
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : true
},
"msg" : {
"type" : "string" ,
"example" : "Operation completed successfully"
},
"data" : {
"type" : "object" ,
"description" : "Response payload (varies by endpoint)"
}
}
},
"ErrorResponse" : {
"type" : "object" ,
"required" : [ "success" , "msg" ],
"properties" : {
"success" : {
"type" : "boolean" ,
"example" : false
},
"msg" : {
"type" : "string" ,
"example" : "An error occurred"
},
"details" : {
"type" : "object" ,
"description" : "Additional error details"
}
}
},
"RegisterRequest" : {
"type" : "object" ,
"required" : [ "firstName" , "lastName" , "email" , "password" ],
"properties" : {
2025-04-20 11:29:53 -07:00
"firstName" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"minLength" : 1 ,
"maxLength" : 50 ,
"example" : "John"
2025-04-20 11:29:53 -07:00
},
"lastName" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"minLength" : 1 ,
"maxLength" : 50 ,
"example" : "Doe"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"email" : {
2025-04-20 11:29:53 -07:00
"type" : "string" ,
2025-08-11 13:55:01 -07:00
"format" : "email" ,
"example" : "john@example.com"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"password" : {
2025-04-20 11:29:53 -07:00
"type" : "string" ,
2025-08-11 13:55:01 -07:00
"minLength" : 8 ,
"format" : "password" ,
"example" : "SecurePass123!"
2025-04-20 11:29:53 -07:00
},
"profileImage" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"format" : "binary" ,
"description" : "Optional profile image file"
2025-04-20 11:29:53 -07:00
},
"role" : {
"type" : "array" ,
2025-08-11 13:55:01 -07:00
"items" : {
"type" : "string" ,
"enum" : [ "user" , "admin" , "superadmin" , "Demo" ]
},
"default" : [ "user" ]
}
}
},
"LoginRequest" : {
"type" : "object" ,
"required" : [ "email" , "password" ],
"properties" : {
"email" : {
"type" : "string" ,
"format" : "email" ,
"example" : "john@example.com"
},
"password" : {
"type" : "string" ,
"format" : "password" ,
"example" : "SecurePass123!"
}
}
},
"AuthResponse" : {
"allOf" : [
{
"$ref" : "#/components/schemas/SuccessResponse"
},
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"token" : {
"type" : "string" ,
"description" : "JWT access token"
},
"user" : {
"$ref" : "#/components/schemas/User"
}
}
}
}
}
]
},
"UserUpdateRequest" : {
"type" : "object" ,
"properties" : {
"firstName" : {
"type" : "string" ,
"minLength" : 1 ,
"maxLength" : 50
},
"lastName" : {
"type" : "string" ,
"minLength" : 1 ,
"maxLength" : 50
},
"password" : {
"type" : "string" ,
"format" : "password" ,
"description" : "Current password for verification"
},
"newPassword" : {
"type" : "string" ,
"minLength" : 8 ,
"format" : "password" ,
"description" : "New password (if changing)"
},
"profileImage" : {
"type" : "string" ,
"format" : "binary" ,
"description" : "New profile image file"
2025-04-20 11:29:53 -07:00
},
"deleteProfileImage" : {
2025-08-11 13:55:01 -07:00
"type" : "boolean" ,
"description" : "Flag to delete current profile image"
2025-04-20 11:29:53 -07:00
}
}
},
2025-08-11 13:55:01 -07:00
"User" : {
2025-04-20 11:29:53 -07:00
"type" : "object" ,
"properties" : {
"_id" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"example" : "64f123a456b789012c345def"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"firstName" : {
"type" : "string" ,
"example" : "John"
},
"lastName" : {
"type" : "string" ,
"example" : "Doe"
},
"email" : {
"type" : "string" ,
"format" : "email" ,
"example" : "john@example.com"
},
"role" : {
"type" : "array" ,
"items" : {
"type" : "string" ,
"enum" : [ "user" , "admin" , "superadmin" , "Demo" ]
}
},
"profileImage" : {
"type" : "string" ,
"description" : "URL or path to profile image"
},
"isActive" : {
"type" : "boolean"
2025-04-20 11:29:53 -07:00
},
"teamId" : {
"type" : "string"
},
2025-08-11 13:55:01 -07:00
"createdAt" : {
"type" : "string" ,
"format" : "date-time"
},
"updatedAt" : {
"type" : "string" ,
"format" : "date-time"
}
}
},
"CreateMonitorRequest" : {
"type" : "object" ,
"required" : [ "name" , "description" , "type" , "url" , "interval" ],
"properties" : {
2025-04-20 11:29:53 -07:00
"name" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"minLength" : 1 ,
"maxLength" : 100 ,
"example" : "My Website Monitor"
2025-04-20 11:29:53 -07:00
},
"description" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"maxLength" : 500 ,
"example" : "Monitors the main website homepage"
2025-04-20 11:29:53 -07:00
},
"type" : {
"type" : "string" ,
2025-08-11 13:55:01 -07:00
"enum" : [ "http" , "ping" , "pagespeed" , "hardware" , "docker" , "port" ],
"example" : "http"
2025-04-20 11:29:53 -07:00
},
"url" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"format" : "uri" ,
"example" : "https://example.com"
2025-04-20 11:29:53 -07:00
},
"interval" : {
2025-08-11 13:55:01 -07:00
"type" : "integer" ,
"minimum" : 30 ,
"maximum" : 3600 ,
"example" : 300 ,
"description" : "Check interval in seconds"
},
"isActive" : {
"type" : "boolean" ,
"default" : true
2025-04-20 11:29:53 -07:00
},
"notifications" : {
"type" : "array" ,
"items" : {
"type" : "string"
2025-08-11 13:55:01 -07:00
},
"description" : "Array of notification IDs to associate with this monitor"
},
"httpOptions" : {
"type" : "object" ,
"properties" : {
"method" : {
"type" : "string" ,
"enum" : [ "GET" , "POST" , "PUT" , "DELETE" , "HEAD" ],
"default" : "GET"
},
"headers" : {
"type" : "object" ,
"additionalProperties" : {
"type" : "string"
}
},
"body" : {
"type" : "string" ,
"description" : "Request body for POST/PUT requests"
},
"timeout" : {
"type" : "integer" ,
"minimum" : 1000 ,
"maximum" : 30000 ,
"default" : 5000 ,
"description" : "Request timeout in milliseconds"
}
}
},
"assertions" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [ "status-code" , "response-time" , "body-contains" , "header-contains" ]
},
"comparison" : {
"type" : "string" ,
"enum" : [ "equals" , "not-equals" , "greater-than" , "less-than" , "contains" , "not-contains" ]
},
"value" : {
"type" : "string"
}
}
2025-04-20 11:29:53 -07:00
}
}
}
},
2025-08-11 13:55:01 -07:00
"UpdateMonitorRequest" : {
2025-04-20 11:29:53 -07:00
"type" : "object" ,
"properties" : {
"name" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"minLength" : 1 ,
"maxLength" : 100
2025-04-20 11:29:53 -07:00
},
"description" : {
2025-08-11 13:55:01 -07:00
"type" : "string" ,
"maxLength" : 500
2025-04-20 11:29:53 -07:00
},
"interval" : {
2025-08-11 13:55:01 -07:00
"type" : "integer" ,
"minimum" : 30 ,
"maximum" : 3600
},
"isActive" : {
"type" : "boolean"
2025-04-20 11:29:53 -07:00
},
"notifications" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
2025-08-11 13:55:01 -07:00
},
"httpOptions" : {
"type" : "object" ,
"properties" : {
"method" : {
"type" : "string" ,
"enum" : [ "GET" , "POST" , "PUT" , "DELETE" , "HEAD" ]
},
"headers" : {
"type" : "object" ,
"additionalProperties" : {
"type" : "string"
}
},
"body" : {
"type" : "string"
},
"timeout" : {
"type" : "integer" ,
"minimum" : 1000 ,
"maximum" : 30000
}
}
},
"assertions" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [ "status-code" , "response-time" , "body-contains" , "header-contains" ]
},
"comparison" : {
"type" : "string" ,
"enum" : [ "equals" , "not-equals" , "greater-than" , "less-than" , "contains" , "not-contains" ]
},
"value" : {
"type" : "string"
}
}
}
2025-04-20 11:29:53 -07:00
}
}
},
2025-08-11 13:55:01 -07:00
"Monitor" : {
2025-04-20 11:29:53 -07:00
"type" : "object" ,
"properties" : {
2025-08-11 13:55:01 -07:00
"_id" : {
"type" : "string" ,
"example" : "64f123a456b789012c345def"
},
"userId" : {
2025-04-20 11:29:53 -07:00
"type" : "string"
},
2025-08-11 13:55:01 -07:00
"teamId" : {
"type" : "string"
},
"name" : {
"type" : "string" ,
"example" : "My Website Monitor"
},
"description" : {
"type" : "string" ,
"example" : "Monitors the main website homepage"
},
"type" : {
"type" : "string" ,
"enum" : [ "http" , "ping" , "pagespeed" , "hardware" , "docker" , "port" ]
},
"url" : {
"type" : "string" ,
"format" : "uri" ,
"example" : "https://example.com"
},
"interval" : {
"type" : "integer" ,
"example" : 300
},
"isActive" : {
"type" : "boolean" ,
"example" : true
},
2025-04-20 11:29:53 -07:00
"status" : {
2025-08-11 13:55:01 -07:00
"type" : "boolean" ,
"description" : "Current monitor status (up/down)"
},
"lastChecked" : {
"type" : "string" ,
"format" : "date-time" ,
"description" : "Timestamp of last check"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"notifications" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"httpOptions" : {
"type" : "object" ,
"properties" : {
"method" : {
"type" : "string"
},
"headers" : {
"type" : "object"
},
"body" : {
"type" : "string"
},
"timeout" : {
"type" : "integer"
}
}
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"assertions" : {
"type" : "array" ,
"items" : {
"type" : "object"
}
},
"createdAt" : {
"type" : "string" ,
"format" : "date-time"
},
"updatedAt" : {
"type" : "string" ,
"format" : "date-time"
2025-04-20 11:29:53 -07:00
}
}
},
2025-08-11 13:55:01 -07:00
"CreateNotificationRequest" : {
2025-04-20 11:29:53 -07:00
"type" : "object" ,
2025-08-11 13:55:01 -07:00
"required" : [ "type" , "name" ],
2025-04-20 11:29:53 -07:00
"properties" : {
2025-08-11 13:55:01 -07:00
"type" : {
"type" : "string" ,
"enum" : [ "email" , "webhook" , "slack" , "discord" , "telegram" , "zapier" ],
"example" : "email"
},
"name" : {
"type" : "string" ,
"minLength" : 1 ,
"maxLength" : 100 ,
"example" : "Admin Email Notifications"
},
"config" : {
"type" : "object" ,
"description" : "Configuration specific to notification type" ,
"oneOf" : [
{
"title" : "Email Configuration" ,
"properties" : {
"to" : {
"type" : "array" ,
"items" : {
"type" : "string" ,
"format" : "email"
}
}
}
},
{
"title" : "Webhook Configuration" ,
"properties" : {
"url" : {
"type" : "string" ,
"format" : "uri"
},
"headers" : {
"type" : "object" ,
"additionalProperties" : {
"type" : "string"
}
}
}
},
{
"title" : "Slack Configuration" ,
"properties" : {
"webhookUrl" : {
"type" : "string" ,
"format" : "uri"
},
"channel" : {
"type" : "string"
}
}
},
{
"title" : "Discord Configuration" ,
"properties" : {
"webhookUrl" : {
"type" : "string" ,
"format" : "uri"
}
}
}
]
},
"isActive" : {
"type" : "boolean" ,
"default" : true
2025-04-20 11:29:53 -07:00
}
}
},
2025-08-11 13:55:01 -07:00
"Notification" : {
2025-04-20 11:29:53 -07:00
"type" : "object" ,
"properties" : {
2025-08-11 13:55:01 -07:00
"_id" : {
"type" : "string"
},
2025-04-20 11:29:53 -07:00
"userId" : {
"type" : "string"
},
2025-08-11 13:55:01 -07:00
"teamId" : {
"type" : "string"
},
"type" : {
"type" : "string" ,
"enum" : [ "email" , "webhook" , "slack" , "discord" , "telegram" , "zapier" ]
},
"name" : {
"type" : "string"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"config" : {
"type" : "object" ,
"description" : "Type-specific configuration"
},
"isActive" : {
2025-04-20 11:29:53 -07:00
"type" : "boolean"
},
2025-08-11 13:55:01 -07:00
"createdAt" : {
2025-04-20 11:29:53 -07:00
"type" : "string" ,
"format" : "date-time"
},
2025-08-11 13:55:01 -07:00
"updatedAt" : {
2025-04-20 11:29:53 -07:00
"type" : "string" ,
"format" : "date-time"
2025-08-11 13:55:01 -07:00
}
}
},
"AppSettings" : {
"type" : "object" ,
"properties" : {
"appName" : {
"type" : "string" ,
"example" : "Checkmate"
2025-04-20 11:29:53 -07:00
},
2025-08-11 13:55:01 -07:00
"appUrl" : {
2025-04-20 11:29:53 -07:00
"type" : "string" ,
2025-08-11 13:55:01 -07:00
"format" : "uri" ,
"example" : "https://checkmate.example.com"
},
"logLevel" : {
"type" : "string" ,
"enum" : [ "error" , "warn" , "info" , "debug" ],
"default" : "info"
},
"emailConfig" : {
"type" : "object" ,
"properties" : {
"host" : {
"type" : "string"
},
"port" : {
"type" : "integer"
},
"secure" : {
"type" : "boolean"
},
"user" : {
"type" : "string"
},
"pass" : {
"type" : "string" ,
"format" : "password"
},
"from" : {
"type" : "string" ,
"format" : "email"
}
}
},
"webhookRetries" : {
"type" : "integer" ,
"minimum" : 0 ,
"maximum" : 10 ,
"default" : 3
},
"checksRetention" : {
"type" : "integer" ,
"minimum" : 1 ,
"maximum" : 365 ,
"default" : 90 ,
"description" : "Days to retain check results"
2025-04-20 11:29:53 -07:00
}
}
},
2025-08-11 13:55:01 -07:00
"SystemDiagnostics" : {
2025-04-20 11:29:53 -07:00
"type" : "object" ,
"properties" : {
2025-08-11 13:55:01 -07:00
"uptime" : {
"type" : "number" ,
"description" : "System uptime in seconds"
},
"memory" : {
"type" : "object" ,
"properties" : {
"total" : {
"type" : "number" ,
"description" : "Total memory in bytes"
},
"used" : {
"type" : "number" ,
"description" : "Used memory in bytes"
},
"free" : {
"type" : "number" ,
"description" : "Free memory in bytes"
}
}
},
"cpu" : {
"type" : "object" ,
"properties" : {
"usage" : {
"type" : "number" ,
"description" : "CPU usage percentage"
},
"cores" : {
"type" : "integer" ,
"description" : "Number of CPU cores"
}
}
},
"database" : {
"type" : "object" ,
"properties" : {
"status" : {
"type" : "string" ,
"enum" : [ "connected" , "disconnected" , "error" ]
},
"responseTime" : {
"type" : "number" ,
"description" : "Database response time in milliseconds"
}
}
},
"queue" : {
"type" : "object" ,
"properties" : {
"active" : {
"type" : "integer"
},
"waiting" : {
"type" : "integer"
},
"completed" : {
"type" : "integer"
},
"failed" : {
"type" : "integer"
}
}
2025-04-20 11:29:53 -07:00
}
}
2026-01-19 13:49:08 -05:00
},
"Incident" : {
"type" : "object" ,
"properties" : {
"_id" : {
"type" : "string" ,
"description" : "Unique incident identifier"
},
"monitorId" : {
"type" : "string" ,
"description" : "ID of the associated monitor"
},
"teamId" : {
"type" : "string" ,
"description" : "ID of the team"
},
"startTime" : {
"type" : "string" ,
"format" : "date-time" ,
"description" : "When the incident started"
},
"endTime" : {
2026-01-19 14:13:18 -05:00
"type" : [ "string" , "null" ],
2026-01-19 13:49:08 -05:00
"format" : "date-time" ,
"description" : "When the incident was resolved (null if ongoing)"
},
"status" : {
"type" : "boolean" ,
"description" : "Incident status (true = ongoing, false = resolved)"
},
"message" : {
2026-01-19 14:13:18 -05:00
"type" : [ "string" , "null" ],
2026-01-19 13:49:08 -05:00
"description" : "Error message or description"
},
"statusCode" : {
2026-01-19 14:13:18 -05:00
"type" : [ "integer" , "null" ],
2026-01-19 13:49:08 -05:00
"description" : "HTTP status code if applicable"
},
"resolutionType" : {
2026-01-19 14:13:18 -05:00
"type" : [ "string" , "null" ],
"enum" : [ "automatic" , "manual" , null ],
2026-01-19 13:49:08 -05:00
"description" : "How the incident was resolved"
},
"resolvedBy" : {
2026-01-19 14:13:18 -05:00
"type" : [ "string" , "null" ],
2026-01-19 13:49:08 -05:00
"description" : "User ID who resolved the incident (for manual resolution)"
},
"comment" : {
2026-01-19 14:13:18 -05:00
"type" : [ "string" , "null" ],
2026-01-19 13:49:08 -05:00
"description" : "Resolution comment"
},
"checks" : {
"type" : "array" ,
"items" : {
"type" : "string"
},
"description" : "Array of check IDs associated with this incident"
},
"createdAt" : {
"type" : "string" ,
"format" : "date-time"
},
"updatedAt" : {
"type" : "string" ,
"format" : "date-time"
}
}
},
"IncidentSummary" : {
"type" : "object" ,
"properties" : {
"totalIncidents" : {
"type" : "integer" ,
"description" : "Total number of incidents"
},
"activeIncidents" : {
"type" : "integer" ,
"description" : "Number of ongoing incidents"
},
"resolvedIncidents" : {
"type" : "integer" ,
"description" : "Number of resolved incidents"
},
"averageResolutionTime" : {
"type" : "number" ,
"description" : "Average time to resolve incidents in milliseconds"
},
"incidentsByMonitor" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"monitorId" : {
"type" : "string"
},
"monitorName" : {
"type" : "string"
},
"count" : {
"type" : "integer"
}
}
}
}
}
},
"QueueJob" : {
"type" : "object" ,
"properties" : {
"id" : {
"type" : "string" ,
"description" : "Job ID"
},
"name" : {
"type" : "string" ,
"description" : "Job name"
},
"data" : {
"type" : "object" ,
"description" : "Job payload data"
},
"status" : {
"type" : "string" ,
"enum" : [ "waiting" , "active" , "completed" , "failed" , "delayed" ],
"description" : "Current job status"
},
"progress" : {
"type" : "number" ,
"description" : "Job progress percentage"
},
"attemptsMade" : {
"type" : "integer" ,
"description" : "Number of attempts made"
},
"timestamp" : {
"type" : "string" ,
"format" : "date-time" ,
"description" : "When the job was created"
},
"processedOn" : {
2026-01-19 14:13:18 -05:00
"type" : [ "string" , "null" ],
2026-01-19 13:49:08 -05:00
"format" : "date-time" ,
"description" : "When the job started processing"
},
"finishedOn" : {
2026-01-19 14:13:18 -05:00
"type" : [ "string" , "null" ],
2026-01-19 13:49:08 -05:00
"format" : "date-time" ,
"description" : "When the job finished"
}
}
},
"QueueMetrics" : {
"type" : "object" ,
"properties" : {
"waiting" : {
"type" : "integer" ,
"description" : "Number of jobs waiting"
},
"active" : {
"type" : "integer" ,
"description" : "Number of jobs currently processing"
},
"completed" : {
"type" : "integer" ,
"description" : "Number of completed jobs"
},
"failed" : {
"type" : "integer" ,
"description" : "Number of failed jobs"
},
"delayed" : {
"type" : "integer" ,
"description" : "Number of delayed jobs"
}
}
},
"Check" : {
"type" : "object" ,
"description" : "A monitoring check result" ,
"properties" : {
"_id" : {
"type" : "string" ,
"description" : "Check ID"
},
"metadata" : {
"type" : "object" ,
"properties" : {
"monitorId" : {
"type" : "string" ,
"description" : "Associated monitor ID"
},
"teamId" : {
"type" : "string" ,
"description" : "Associated team ID"
},
"type" : {
"type" : "string" ,
"enum" : [ "http" , "ping" , "pagespeed" , "hardware" , "docker" , "port" ],
"description" : "Monitor type"
}
},
"required" : [ "monitorId" , "teamId" , "type" ]
},
"status" : {
"type" : "boolean" ,
"description" : "Check status (true = up, false = down)"
},
"responseTime" : {
"type" : "number" ,
"description" : "Response time in milliseconds"
},
"statusCode" : {
"type" : "integer" ,
"description" : "HTTP status code (for HTTP monitors)"
},
"message" : {
"type" : "string" ,
"description" : "Status message or error description"
},
"timings" : {
"$ref" : "#/components/schemas/CheckTimings"
},
"cpu" : {
"$ref" : "#/components/schemas/CheckCpuInfo"
},
"memory" : {
"$ref" : "#/components/schemas/CheckMemoryInfo"
},
"disk" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/CheckDiskInfo"
}
},
"host" : {
"$ref" : "#/components/schemas/CheckHostInfo"
},
"errors" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/CheckErrorInfo"
}
},
"capture" : {
"$ref" : "#/components/schemas/CheckCaptureInfo"
},
"net" : {
"type" : "array" ,
"items" : {
"$ref" : "#/components/schemas/CheckNetworkInfo"
}
},
"accessibility" : {
"type" : "number" ,
"description" : "PageSpeed accessibility score (0-100)"
},
"bestPractices" : {
"type" : "number" ,
"description" : "PageSpeed best practices score (0-100)"
},
"seo" : {
"type" : "number" ,
"description" : "PageSpeed SEO score (0-100)"
},
"performance" : {
"type" : "number" ,
"description" : "PageSpeed performance score (0-100)"
},
"audits" : {
"$ref" : "#/components/schemas/CheckAudits"
},
"ack" : {
"type" : "boolean" ,
"description" : "Whether the check has been acknowledged"
},
"ackAt" : {
2026-01-19 14:13:18 -05:00
"type" : [ "string" , "null" ],
2026-01-19 13:49:08 -05:00
"format" : "date-time" ,
"description" : "When the check was acknowledged"
},
"expiry" : {
"type" : "string" ,
"format" : "date-time" ,
"description" : "When the check expires"
},
"createdAt" : {
"type" : "string" ,
"format" : "date-time"
},
"updatedAt" : {
"type" : "string" ,
"format" : "date-time"
}
}
},
"CheckTimings" : {
"type" : "object" ,
"description" : "Detailed timing information for HTTP checks" ,
"properties" : {
"start" : {
"type" : "number"
},
"socket" : {
"type" : "number"
},
"lookup" : {
"type" : "number"
},
"connect" : {
"type" : "number"
},
"secureConnect" : {
"type" : "number"
},
"upload" : {
"type" : "number"
},
"response" : {
"type" : "number"
},
"end" : {
"type" : "number"
},
"phases" : {
"type" : "object" ,
"properties" : {
"wait" : {
"type" : "number"
},
"dns" : {
"type" : "number"
},
"tcp" : {
"type" : "number"
},
"tls" : {
"type" : "number"
},
"request" : {
"type" : "number"
},
"firstByte" : {
"type" : "number"
},
"download" : {
"type" : "number"
},
"total" : {
"type" : "number"
}
}
}
}
},
"CheckCpuInfo" : {
"type" : "object" ,
"description" : "CPU information for infrastructure checks" ,
"properties" : {
"physical_core" : {
"type" : "integer"
},
"logical_core" : {
"type" : "integer"
},
"frequency" : {
"type" : "number"
},
"temperature" : {
"type" : "array" ,
"items" : {
"type" : "number"
}
},
"free_percent" : {
"type" : "number"
},
"usage_percent" : {
"type" : "number"
}
}
},
"CheckMemoryInfo" : {
"type" : "object" ,
"description" : "Memory information for infrastructure checks" ,
"properties" : {
"total_bytes" : {
"type" : "number"
},
"available_bytes" : {
"type" : "number"
},
"used_bytes" : {
"type" : "number"
},
"usage_percent" : {
"type" : "number"
}
}
},
"CheckDiskInfo" : {
"type" : "object" ,
"description" : "Disk information for infrastructure checks" ,
"properties" : {
"device" : {
"type" : "string"
},
"mountpoint" : {
"type" : "string"
},
"read_speed_bytes" : {
"type" : "number"
},
"write_speed_bytes" : {
"type" : "number"
},
"total_bytes" : {
"type" : "number"
},
"free_bytes" : {
"type" : "number"
},
"usage_percent" : {
"type" : "number"
}
}
},
"CheckHostInfo" : {
"type" : "object" ,
"description" : "Host information for infrastructure checks" ,
"properties" : {
"os" : {
"type" : "string"
},
"platform" : {
"type" : "string"
},
"kernel_version" : {
"type" : "string"
}
}
},
"CheckErrorInfo" : {
"type" : "object" ,
"description" : "Error information from checks" ,
"properties" : {
"metric" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
},
"err" : {
"type" : "string"
}
}
},
"CheckCaptureInfo" : {
"type" : "object" ,
"description" : "Capture agent information" ,
"properties" : {
"version" : {
"type" : "string"
},
"mode" : {
"type" : "string"
}
}
},
"CheckNetworkInfo" : {
"type" : "object" ,
"description" : "Network interface information" ,
"properties" : {
"name" : {
"type" : "string"
},
"bytes_sent" : {
"type" : "number"
},
"bytes_recv" : {
"type" : "number"
},
"packets_sent" : {
"type" : "number"
},
"packets_recv" : {
"type" : "number"
},
"err_in" : {
"type" : "number"
},
"err_out" : {
"type" : "number"
},
"drop_in" : {
"type" : "number"
},
"drop_out" : {
"type" : "number"
},
"fifo_in" : {
"type" : "number"
},
"fifo_out" : {
"type" : "number"
}
}
},
"CheckAudits" : {
"type" : "object" ,
"description" : "PageSpeed audit results" ,
"properties" : {
"cls" : {
"$ref" : "#/components/schemas/LighthouseAudit"
},
"si" : {
"$ref" : "#/components/schemas/LighthouseAudit"
},
"fcp" : {
"$ref" : "#/components/schemas/LighthouseAudit"
},
"lcp" : {
"$ref" : "#/components/schemas/LighthouseAudit"
},
"tbt" : {
"$ref" : "#/components/schemas/LighthouseAudit"
}
}
},
"LighthouseAudit" : {
"type" : "object" ,
"description" : "Individual Lighthouse audit result" ,
"properties" : {
"id" : {
"type" : "string"
},
"title" : {
"type" : "string"
},
"score" : {
"type" : "number"
},
"displayValue" : {
"type" : "string"
},
"numericValue" : {
"type" : "number"
},
"numericUnit" : {
"type" : "string"
}
}
2025-04-20 11:29:53 -07:00
}
}
}
}