{"openapi":"3.1.0","info":{"title":"StatusRooster","description":"Uptime monitoring API for developers. Monitor endpoints, get alerts, embed status badges.","version":"1.0.0"},"paths":{"/api/v1/monitors":{"get":{"tags":["monitors"],"summary":"Api List Monitors","operationId":"api_list_monitors_api_v1_monitors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]},"post":{"tags":["monitors"],"summary":"Api Create Monitor","operationId":"api_create_monitor_api_v1_monitors_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiCreateMonitor"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/monitors/{monitor_id}":{"get":{"tags":["monitors"],"summary":"Api Get Monitor","operationId":"api_get_monitor_api_v1_monitors__monitor_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["monitors"],"summary":"Api Update Monitor","operationId":"api_update_monitor_api_v1_monitors__monitor_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiUpdateMonitor"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["monitors"],"summary":"Api Update Monitor","operationId":"api_update_monitor_api_v1_monitors__monitor_id__put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiUpdateMonitor"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["monitors"],"summary":"Api Delete Monitor","operationId":"api_delete_monitor_api_v1_monitors__monitor_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/monitors/{monitor_id}/checks":{"get":{"tags":["monitors"],"summary":"Api Get Checks","operationId":"api_get_checks_api_v1_monitors__monitor_id__checks_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents":{"get":{"tags":["monitors"],"summary":"Api List Incidents","description":"List incidents across all monitors for the authenticated user.","operationId":"api_list_incidents_api_v1_incidents_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"monitor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitor Id"}},{"name":"monitor_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitor Type"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":720,"title":"Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/{incident_id}":{"get":{"tags":["monitors"],"summary":"Api Get Incident","description":"Get a single incident by ID.","operationId":"api_get_incident_api_v1_incidents__incident_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/discover":{"post":{"tags":["monitors"],"summary":"Api Discover","description":"Scan a domain and return discovered endpoints.","operationId":"api_discover_api_v1_discover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiDiscoverRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/monitors/bulk":{"post":{"tags":["monitors"],"summary":"Api Bulk Create Monitors","description":"Create multiple monitors in one request.","operationId":"api_bulk_create_monitors_api_v1_monitors_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiBulkCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/badge/{monitor_id}.svg":{"get":{"tags":["badge"],"summary":"Uptime Badge","description":"Return an SVG uptime badge for a public monitor.","operationId":"uptime_badge_badge__monitor_id__svg_get","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/badge/{monitor_id}/status.svg":{"get":{"tags":["badge"],"summary":"Status Badge","description":"Return an SVG status badge (up/down) for a public monitor.","operationId":"status_badge_badge__monitor_id__status_svg_get","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/badge/{monitor_id}/response.svg":{"get":{"tags":["badge"],"summary":"Response Time Badge","description":"Return an SVG response time badge for a public monitor.","operationId":"response_time_badge_badge__monitor_id__response_svg_get","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ApiBulkCreateRequest":{"properties":{"monitors":{"items":{"$ref":"#/components/schemas/ApiBulkMonitorItem"},"type":"array","title":"Monitors"}},"type":"object","required":["monitors"],"title":"ApiBulkCreateRequest"},"ApiBulkMonitorItem":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url","default":""},"monitor_type":{"type":"string","title":"Monitor Type","default":"http"},"ssl_domain":{"type":"string","title":"Ssl Domain","default":""},"ssl_expiry_threshold_days":{"type":"integer","title":"Ssl Expiry Threshold Days","default":30},"alert_email":{"type":"string","title":"Alert Email","default":""},"alert_slack_webhook":{"type":"string","title":"Alert Slack Webhook","default":""},"check_interval":{"type":"integer","title":"Check Interval","default":0},"group":{"type":"string","title":"Group","default":""},"public":{"type":"boolean","title":"Public","default":false}},"type":"object","required":["name"],"title":"ApiBulkMonitorItem"},"ApiCreateMonitor":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"name":{"type":"string","title":"Name"},"alert_email":{"type":"string","title":"Alert Email","default":""},"alert_slack_webhook":{"type":"string","title":"Alert Slack Webhook","default":""},"alert_sms":{"type":"string","title":"Alert Sms","default":""},"keyword":{"type":"string","title":"Keyword","default":""},"response_threshold_ms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Threshold Ms"},"webhook_url":{"type":"string","title":"Webhook Url","default":""},"public":{"type":"boolean","title":"Public","default":true},"paused":{"type":"boolean","title":"Paused","default":false},"check_interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Check Interval"},"maintenance_windows":{"anyOf":[{"items":{"$ref":"#/components/schemas/MaintenanceWindow"},"type":"array"},{"type":"null"}],"title":"Maintenance Windows"},"monitor_type":{"type":"string","enum":["http","json_api","heartbeat","ssl"],"title":"Monitor Type","default":"http"},"heartbeat_interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Heartbeat Interval"},"heartbeat_grace_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Heartbeat Grace Period"},"expected_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Status Code"},"timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout"},"json_assertions":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Json Assertions"},"auth_header":{"type":"string","title":"Auth Header","default":""},"ssl_domain":{"type":"string","title":"Ssl Domain","default":""},"ssl_expiry_threshold_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ssl Expiry Threshold Days"},"group":{"type":"string","title":"Group","default":""},"http_method":{"type":"string","title":"Http Method","default":"GET"},"basic_auth_user":{"type":"string","title":"Basic Auth User","default":""},"basic_auth_pass":{"type":"string","title":"Basic Auth Pass","default":""},"follow_redirects":{"type":"boolean","title":"Follow Redirects","default":true},"bearer_token":{"type":"string","title":"Bearer Token","default":""},"request_body":{"type":"string","title":"Request Body","default":""},"request_content_type":{"type":"string","title":"Request Content Type","default":""},"custom_headers":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Custom Headers"}},"type":"object","required":["name"],"title":"ApiCreateMonitor"},"ApiDiscoverRequest":{"properties":{"domain":{"type":"string","title":"Domain"}},"type":"object","required":["domain"],"title":"ApiDiscoverRequest"},"ApiUpdateMonitor":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"alert_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alert Email"},"alert_slack_webhook":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alert Slack Webhook"},"alert_sms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alert Sms"},"keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword"},"response_threshold_ms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Threshold Ms"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public"},"paused":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Paused"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"check_interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Check Interval"},"maintenance_windows":{"anyOf":[{"items":{"$ref":"#/components/schemas/MaintenanceWindow"},"type":"array"},{"type":"null"}],"title":"Maintenance Windows"},"heartbeat_interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Heartbeat Interval"},"heartbeat_grace_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Heartbeat Grace Period"},"expected_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Status Code"},"timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout"},"json_assertions":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Json Assertions"},"auth_header":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Header"},"ssl_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssl Domain"},"ssl_expiry_threshold_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ssl Expiry Threshold Days"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"http_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Method"},"basic_auth_user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Basic Auth User"},"basic_auth_pass":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Basic Auth Pass"},"follow_redirects":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Follow Redirects"},"bearer_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bearer Token"},"request_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Body"},"request_content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Content Type"},"custom_headers":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Custom Headers"}},"type":"object","title":"ApiUpdateMonitor"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MaintenanceWindow":{"properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday","daily"],"title":"Day"},"start_utc":{"type":"string","title":"Start Utc"},"end_utc":{"type":"string","title":"End Utc"}},"type":"object","required":["day","start_utc","end_utc"],"title":"MaintenanceWindow"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","description":"Your StatusRooster API key (starts with sr_)","in":"header","name":"X-API-Key"}}},"tags":[{"name":"monitors","description":"CRUD operations for monitors (requires API key)"},{"name":"badge","description":"Public SVG badge endpoints for embedding in READMEs"}]}