{"openapi":"3.0.0","info":{"version":"1.0.0","title":"OpenStatus API","contact":{"email":"ping@openstatus.dev","url":"https://www.openstatus.dev"},"description":"This version is deprecated please use v2"},"tags":[{"name":"monitor","description":"Monitor related endpoints","x-displayName":"Monitor"},{"name":"page","description":"Page related endpoints","x-displayName":"Page"},{"name":"status_report","description":"Status report related endpoints","x-displayName":"Status Report"},{"name":"status_report_update","description":"Status report update related endpoints","x-displayName":"Status Report Update"},{"name":"incident","description":"Incident related endpoints","x-displayName":"Incident"},{"name":"maintenance","description":"Maintenance related endpoints","x-displayName":"Maintenance"},{"name":"notification","description":"Notification related endpoints","x-displayName":"Notification"},{"name":"page_subscriber","description":"Page subscriber related endpoints","x-displayName":"Page Subscriber"},{"name":"check","description":"Check related endpoints","x-displayName":"Check"},{"name":"whoami","description":"WhoAmI related endpoints","x-displayName":"WhoAmI"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-openstatus-key","x-openstatus-key":"string"}},"schemas":{"Monitor":{"type":"object","properties":{"id":{"type":"number","example":123,"description":"The id of the monitor"},"periodicity":{"type":"string","enum":["30s","1m","5m","10m","30m","1h","other"],"example":"1m","description":"How often the monitor should run"},"url":{"type":"string","example":"https://www.documenso.co","description":"The url to monitor"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"name":{"type":"string","example":"documenso-web","description":"The name of the monitor"},"externalName":{"type":"string","nullable":true,"example":"Documenso","description":"The external name of the monitor, used to display on the status page or in the external notifications"},"description":{"type":"string","nullable":true,"example":"Documenso website","description":"The description of your monitor"},"method":{"type":"string","enum":["GET","POST","HEAD","PUT","PATCH","DELETE","TRACE","CONNECT","OPTIONS"],"example":"GET"},"body":{"type":"string","nullable":true,"default":"","example":"Hello World","description":"The body"},"headers":{"type":"array","nullable":true,"items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"default":[],"description":"The headers of your request","example":[{"key":"x-apikey","value":"supersecrettoken"}]},"assertions":{"type":"array","nullable":true,"items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["status"]},"compare":{"type":"string","enum":["eq","not_eq","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","gt","gte","lt","lte"]},"target":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"The target value"}},"required":["type","compare","target"],"description":"The status assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["header"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"]},"key":{"type":"string","description":"The key of the header"},"target":{"type":"string","description":"the header value"}},"required":["type","compare","key","target"],"description":"The header assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["textBody"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"]},"target":{"type":"string","description":"The target value"}},"required":["type","compare","target"],"description":"The text body assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["dnsRecord"]},"key":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","NS"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq"]},"target":{"type":"string"}},"required":["type","key","compare","target"],"description":"The DNS record assertion"}]},"default":[],"description":"The assertions to run"},"active":{"type":"boolean","default":false,"description":"If the monitor is active"},"public":{"type":"boolean","default":false,"description":"If the monitor is public"},"degradedAfter":{"type":"number","nullable":true,"description":"The time after the monitor is considered degraded in milliseconds"},"timeout":{"type":"number","nullable":true,"default":45000,"description":"The timeout of the request in milliseconds"},"retry":{"type":"number","default":3,"description":"The number of retries to attempt"},"followRedirects":{"type":"boolean","default":true,"description":"If the monitor should follow redirects"},"jobType":{"type":"string","enum":["http","tcp","icmp","udp","dns","ssl"],"default":"http","description":"The type of the monitor"},"openTelemetry":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri","default":"http://localhost:4317","description":"The endpoint of the OpenTelemetry collector"},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{},"description":"The headers to send to the OpenTelemetry collector"}},"description":"The OpenTelemetry configuration"}},"required":["id","periodicity","url","name","method"]},"ErrBadRequest":{"type":"object","properties":{"code":{"type":"string","enum":["BAD_REQUEST","FORBIDDEN","INTERNAL_SERVER_ERROR","PAYMENT_REQUIRED","CONFLICT","NOT_FOUND","UNAUTHORIZED","METHOD_NOT_ALLOWED","UNPROCESSABLE_ENTITY"],"example":"BAD_REQUEST","description":"The error code related to the status code."},"message":{"type":"string","description":"A human readable message describing the issue.","example":"<string>"},"docs":{"type":"string","description":"A link to the documentation for the error.","example":"https://docs.openstatus.dev/api-references/errors/code/BAD_REQUEST"},"requestId":{"type":"string","description":"The request id to be used for debugging and error reporting.","example":"<uuid>"}},"required":["code","message","docs","requestId"]},"ErrUnauthorized":{"type":"object","properties":{"code":{"type":"string","enum":["BAD_REQUEST","FORBIDDEN","INTERNAL_SERVER_ERROR","PAYMENT_REQUIRED","CONFLICT","NOT_FOUND","UNAUTHORIZED","METHOD_NOT_ALLOWED","UNPROCESSABLE_ENTITY"],"example":"UNAUTHORIZED","description":"The error code related to the status code."},"message":{"type":"string","description":"A human readable message describing the issue.","example":"<string>"},"docs":{"type":"string","description":"A link to the documentation for the error.","example":"https://docs.openstatus.dev/api-references/errors/code/UNAUTHORIZED"},"requestId":{"type":"string","description":"The request id to be used for debugging and error reporting.","example":"<uuid>"}},"required":["code","message","docs","requestId"]},"ErrPaymentRequired":{"type":"object","properties":{"code":{"type":"string","enum":["BAD_REQUEST","FORBIDDEN","INTERNAL_SERVER_ERROR","PAYMENT_REQUIRED","CONFLICT","NOT_FOUND","UNAUTHORIZED","METHOD_NOT_ALLOWED","UNPROCESSABLE_ENTITY"],"example":"PAYMENT_REQUIRED","description":"The error code related to the status code."},"message":{"type":"string","description":"A human readable message describing the issue.","example":"<string>"},"docs":{"type":"string","description":"A link to the documentation for the error.","example":"https://docs.openstatus.dev/api-references/errors/code/PAYMENT_REQUIRED"},"requestId":{"type":"string","description":"The request id to be used for debugging and error reporting.","example":"<uuid>"}},"required":["code","message","docs","requestId"]},"ErrForbidden":{"type":"object","properties":{"code":{"type":"string","enum":["BAD_REQUEST","FORBIDDEN","INTERNAL_SERVER_ERROR","PAYMENT_REQUIRED","CONFLICT","NOT_FOUND","UNAUTHORIZED","METHOD_NOT_ALLOWED","UNPROCESSABLE_ENTITY"],"example":"FORBIDDEN","description":"The error code related to the status code."},"message":{"type":"string","description":"A human readable message describing the issue.","example":"<string>"},"docs":{"type":"string","description":"A link to the documentation for the error.","example":"https://docs.openstatus.dev/api-references/errors/code/FORBIDDEN"},"requestId":{"type":"string","description":"The request id to be used for debugging and error reporting.","example":"<uuid>"}},"required":["code","message","docs","requestId"]},"ErrNotFound":{"type":"object","properties":{"code":{"type":"string","enum":["BAD_REQUEST","FORBIDDEN","INTERNAL_SERVER_ERROR","PAYMENT_REQUIRED","CONFLICT","NOT_FOUND","UNAUTHORIZED","METHOD_NOT_ALLOWED","UNPROCESSABLE_ENTITY"],"example":"NOT_FOUND","description":"The error code related to the status code."},"message":{"type":"string","description":"A human readable message describing the issue.","example":"<string>"},"docs":{"type":"string","description":"A link to the documentation for the error.","example":"https://docs.openstatus.dev/api-references/errors/code/NOT_FOUND"},"requestId":{"type":"string","description":"The request id to be used for debugging and error reporting.","example":"<uuid>"}},"required":["code","message","docs","requestId"]},"ErrConflict":{"type":"object","properties":{"code":{"type":"string","enum":["BAD_REQUEST","FORBIDDEN","INTERNAL_SERVER_ERROR","PAYMENT_REQUIRED","CONFLICT","NOT_FOUND","UNAUTHORIZED","METHOD_NOT_ALLOWED","UNPROCESSABLE_ENTITY"],"example":"CONFLICT","description":"The error code related to the status code."},"message":{"type":"string","description":"A human readable message describing the issue.","example":"<string>"},"docs":{"type":"string","description":"A link to the documentation for the error.","example":"https://docs.openstatus.dev/api-references/errors/code/CONFLICT"},"requestId":{"type":"string","description":"The request id to be used for debugging and error reporting.","example":"<uuid>"}},"required":["code","message","docs","requestId"]},"ErrInternalServerError":{"type":"object","properties":{"code":{"type":"string","enum":["BAD_REQUEST","FORBIDDEN","INTERNAL_SERVER_ERROR","PAYMENT_REQUIRED","CONFLICT","NOT_FOUND","UNAUTHORIZED","METHOD_NOT_ALLOWED","UNPROCESSABLE_ENTITY"],"example":"INTERNAL_SERVER_ERROR","description":"The error code related to the status code."},"message":{"type":"string","description":"A human readable message describing the issue.","example":"<string>"},"docs":{"type":"string","description":"A link to the documentation for the error.","example":"https://docs.openstatus.dev/api-references/errors/code/INTERNAL_SERVER_ERROR"},"requestId":{"type":"string","description":"The request id to be used for debugging and error reporting.","example":"<uuid>"}},"required":["code","message","docs","requestId"]},"Page":{"type":"object","properties":{"id":{"type":"number","description":"The id of the page","example":1},"title":{"type":"string","description":"The title of the page","example":"My Page"},"description":{"type":"string","description":"The description of the page","example":"My awesome status page"},"slug":{"type":"string","description":"The slug of the page","example":"my-page"},"customDomain":{"type":"string","nullable":true,"description":"The custom domain of the page. To be configured within the dashboard.","example":"status.acme.com"},"icon":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":[""]},{"nullable":true}],"description":"The icon of the page","example":"https://example.com/icon.png"},"passwordProtected":{"type":"boolean","default":false,"description":"Deprecated in favor of `accessType`. Used to set the password protection type. Returns true if `accessType` is set to 'password' and false otherwise.","example":true,"deprecated":true},"accessType":{"type":"string","enum":["public","password","email-domain"],"default":"public","description":"The access type of the page","example":"public"},"password":{"type":"string","nullable":true,"description":"Your password to protect the page from the public","example":"hidden-password"},"authEmailDomains":{"type":"array","nullable":true,"items":{"type":"string"},"description":"The email domains of the page","example":["example.com","example.org"]},"showMonitorValues":{"type":"boolean","nullable":true,"default":true,"description":"Displays the total and failed request numbers for each monitor. Deprecated and will be removed in the future in favor for `configuration` property.","example":true,"deprecated":true},"monitors":{"anyOf":[{"type":"array","items":{"type":"number"},"description":"The monitors of the page as an array of ids. We recommend using the object format to include the order.","deprecated":true,"example":[1,2]},{"type":"array","items":{"type":"object","properties":{"monitorId":{"type":"number"},"order":{"type":"number"}},"required":["monitorId","order"]},"description":"The monitor as object allowing to pass id and order","example":[{"monitorId":1,"order":0},{"monitorId":2,"order":1}]}]}},"required":["id","title","description","slug"]},"StatusReport":{"type":"object","properties":{"id":{"type":"number","description":"The id of the status report"},"title":{"type":"string","example":"Documenso","description":"The title of the status report"},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved"],"description":"The current status of the report"},"statusReportUpdateIds":{"type":"array","nullable":true,"items":{"type":"number"},"default":[],"description":"The ids of the status report updates"},"monitorIds":{"type":"array","items":{"type":"number"},"default":[],"description":"Ids of the monitors the status report."},"pageId":{"type":"number","description":"The id of the page this status report belongs to"}},"required":["id","title","status","pageId"]},"StatusReportUpdate":{"type":"object","properties":{"id":{"type":"string","nullable":true,"description":"The id of the update"},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved"],"description":"The status of the update"},"date":{"type":"string","nullable":true,"format":"date","default":"2026-02-12T22:01:46.114Z","description":"The date of the update in ISO8601 format"},"message":{"type":"string","minLength":1,"description":"The message of the update"},"statusReportId":{"type":"number","description":"The id of the status report"}},"required":["status","message","statusReportId"]},"Incident":{"type":"object","properties":{"id":{"type":"number","description":"The id of the incident","example":1},"startedAt":{"type":"string","nullable":true,"format":"date","description":"The date the incident started"},"monitorId":{"type":"number","nullable":true,"description":"The id of the monitor associated with the incident","example":1},"acknowledgedAt":{"type":"string","nullable":true,"format":"date","description":"The date the incident was acknowledged"},"acknowledgedBy":{"type":"number","nullable":true,"description":"The user who acknowledged the incident"},"resolvedAt":{"type":"string","nullable":true,"format":"date","description":"The date the incident was resolved"},"resolvedBy":{"type":"number","nullable":true,"description":"The user who resolved the incident"}},"required":["id","startedAt","monitorId","acknowledgedBy","resolvedBy"]},"Maintenance":{"type":"object","properties":{"id":{"type":"number","description":"The id of the maintenance","example":1},"title":{"type":"string","description":"The title of the maintenance","example":"Database Upgrade"},"message":{"type":"string","description":"The message describing the maintenance","example":"Upgrading database to improve performance"},"from":{"type":"string","nullable":true,"format":"date","description":"When the maintenance starts"},"to":{"type":"string","nullable":true,"format":"date","description":"When the maintenance ends"},"monitorIds":{"type":"array","items":{"type":"number"},"default":[],"description":"IDs of affected monitors"},"pageId":{"type":"number","description":"The id of the status page this maintenance belongs to"}},"required":["id","title","message","from","to","pageId"]},"Notification":{"type":"object","properties":{"id":{"type":"number","description":"The id of the notification","example":1},"name":{"type":"string","description":"The name of the notification","example":"OpenStatus Discord"},"provider":{"type":"string","enum":["discord","email","google-chat","grafana-oncall","ms-teams","ntfy","pagerduty","opsgenie","slack","sms","telegram","webhook","whatsapp"],"description":"The provider of the notification","example":"discord"},"payload":{"anyOf":[{"type":"object","properties":{"discord":{"type":"string","format":"uri"}},"required":["discord"]},{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]},{"type":"object","properties":{"grafana-oncall":{"type":"object","properties":{"webhookUrl":{"type":"string","format":"uri"}},"required":["webhookUrl"]}},"required":["grafana-oncall"]},{"type":"object","properties":{"ms-teams":{"type":"object","properties":{"webhookUrl":{"type":"string","format":"uri"}},"required":["webhookUrl"]}},"required":["ms-teams"]},{"type":"object","properties":{"ntfy":{"type":"object","properties":{"topic":{"type":"string","default":""},"serverUrl":{"type":"string","default":"https://ntfy.sh"},"token":{"type":"string"}}}},"required":["ntfy"]},{"type":"object","properties":{"opsgenie":{"type":"object","properties":{"apiKey":{"type":"string"},"region":{"type":"string","enum":["us","eu"]}},"required":["apiKey","region"]}},"required":["opsgenie"]},{"type":"object","properties":{"pagerduty":{"type":"string"}},"required":["pagerduty"]},{"type":"object","properties":{"sms":{"type":"string","pattern":"^([+]?[\\s0-9]+)?(\\d{3}|[(]?[0-9]+[)])?([-]?[\\s]?[0-9])+$"}},"required":["sms"]},{"type":"object","properties":{"telegram":{"type":"object","properties":{"chatId":{"type":"string"}},"required":["chatId"]}},"required":["telegram"]},{"type":"object","properties":{"slack":{"type":"string","format":"uri"}},"required":["slack"]},{"type":"object","properties":{"webhook":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]}}},"required":["endpoint"]}},"required":["webhook"]},{"type":"object","properties":{"whatsapp":{"type":"string","pattern":"^([+]?[\\s0-9]+)?(\\d{3}|[(]?[0-9]+[)])?([-]?[\\s]?[0-9])+$"}},"required":["whatsapp"]},{"type":"object","properties":{"google-chat":{"type":"string","format":"uri"}},"required":["google-chat"]}],"description":"The data of the notification"},"monitors":{"type":"array","nullable":true,"items":{"type":"number"},"description":"The monitors that the notification is linked to","example":[1,2]}},"required":["id","name","provider","payload"]},"PageSubscriber":{"type":"object","properties":{"id":{"type":"number","description":"The id of the subscriber","example":1},"email":{"type":"string","format":"email","description":"The email of the subscriber"},"pageId":{"type":"number","description":"The id of the page to subscribe to","example":1}},"required":["id","email","pageId"]},"Workspace":{"type":"object","properties":{"name":{"type":"string","description":"The current workspace name"},"slug":{"type":"string","description":"The current workspace slug"},"plan":{"type":"string","nullable":true,"enum":["free","starter","team"],"default":"free","description":"The current workspace plan"}},"required":["slug"]}},"parameters":{}},"paths":{"/monitor":{"get":{"tags":["monitor"],"summary":"List all monitors","responses":{"200":{"description":"All the monitors","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Monitor"}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"post":{"tags":["monitor"],"summary":"Create a monitor","requestBody":{"description":"The monitor to create","content":{"application/json":{"schema":{"type":"object","properties":{"periodicity":{"type":"string","enum":["30s","1m","5m","10m","30m","1h","other"],"example":"1m","description":"How often the monitor should run"},"url":{"type":"string","example":"https://www.documenso.co","description":"The url to monitor"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"name":{"type":"string","example":"documenso-web","description":"The name of the monitor"},"externalName":{"type":"string","nullable":true,"example":"Documenso","description":"The external name of the monitor, used to display on the status page or in the external notifications"},"description":{"type":"string","nullable":true,"example":"Documenso website","description":"The description of your monitor"},"method":{"type":"string","enum":["GET","POST","HEAD","PUT","PATCH","DELETE","TRACE","CONNECT","OPTIONS"],"example":"GET"},"body":{"type":"string","nullable":true,"default":"","example":"Hello World","description":"The body"},"headers":{"type":"array","nullable":true,"items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"default":[],"description":"The headers of your request","example":[{"key":"x-apikey","value":"supersecrettoken"}]},"assertions":{"type":"array","nullable":true,"items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["status"]},"compare":{"type":"string","enum":["eq","not_eq","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","gt","gte","lt","lte"]},"target":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"The target value"}},"required":["type","compare","target"],"description":"The status assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["header"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"]},"key":{"type":"string","description":"The key of the header"},"target":{"type":"string","description":"the header value"}},"required":["type","compare","key","target"],"description":"The header assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["textBody"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"]},"target":{"type":"string","description":"The target value"}},"required":["type","compare","target"],"description":"The text body assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["dnsRecord"]},"key":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","NS"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq"]},"target":{"type":"string"}},"required":["type","key","compare","target"],"description":"The DNS record assertion"}]},"default":[],"description":"The assertions to run"},"active":{"type":"boolean","default":false,"description":"If the monitor is active"},"public":{"type":"boolean","default":false,"description":"If the monitor is public"},"degradedAfter":{"type":"number","nullable":true,"description":"The time after the monitor is considered degraded in milliseconds"},"timeout":{"type":"number","nullable":true,"default":45000,"description":"The timeout of the request in milliseconds"},"retry":{"type":"number","default":3,"description":"The number of retries to attempt"},"followRedirects":{"type":"boolean","default":true,"description":"If the monitor should follow redirects"},"jobType":{"type":"string","enum":["http","tcp","icmp","udp","dns","ssl"],"default":"http","description":"The type of the monitor"},"openTelemetry":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri","default":"http://localhost:4317","description":"The endpoint of the OpenTelemetry collector"},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{},"description":"The headers to send to the OpenTelemetry collector"}},"description":"The OpenTelemetry configuration"}},"required":["periodicity","url","name","method"]}}}},"responses":{"200":{"description":"Create a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/{id}":{"get":{"tags":["monitor"],"summary":"Get a monitor","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"}],"responses":{"200":{"description":"The monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"put":{"tags":["monitor"],"summary":"Update a monitor","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"}],"requestBody":{"description":"The monitor to update","content":{"application/json":{"schema":{"type":"object","properties":{"periodicity":{"type":"string","enum":["30s","1m","5m","10m","30m","1h","other"],"example":"1m","description":"How often the monitor should run"},"url":{"type":"string","example":"https://www.documenso.co","description":"The url to monitor"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"name":{"type":"string","example":"documenso-web","description":"The name of the monitor"},"externalName":{"type":"string","nullable":true,"example":"Documenso","description":"The external name of the monitor, used to display on the status page or in the external notifications"},"description":{"type":"string","nullable":true,"example":"Documenso website","description":"The description of your monitor"},"method":{"type":"string","enum":["GET","POST","HEAD","PUT","PATCH","DELETE","TRACE","CONNECT","OPTIONS"],"example":"GET"},"body":{"type":"string","nullable":true,"default":"","example":"Hello World","description":"The body"},"headers":{"type":"array","nullable":true,"items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"default":[],"description":"The headers of your request","example":[{"key":"x-apikey","value":"supersecrettoken"}]},"assertions":{"type":"array","nullable":true,"items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["status"]},"compare":{"type":"string","enum":["eq","not_eq","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","gt","gte","lt","lte"]},"target":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"The target value"}},"required":["type","compare","target"],"description":"The status assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["header"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"]},"key":{"type":"string","description":"The key of the header"},"target":{"type":"string","description":"the header value"}},"required":["type","compare","key","target"],"description":"The header assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["textBody"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"]},"target":{"type":"string","description":"The target value"}},"required":["type","compare","target"],"description":"The text body assertion"},{"type":"object","properties":{"type":{"type":"string","enum":["dnsRecord"]},"key":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","NS"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq"]},"target":{"type":"string"}},"required":["type","key","compare","target"],"description":"The DNS record assertion"}]},"default":[],"description":"The assertions to run"},"active":{"type":"boolean","default":false,"description":"If the monitor is active"},"public":{"type":"boolean","default":false,"description":"If the monitor is public"},"degradedAfter":{"type":"number","nullable":true,"description":"The time after the monitor is considered degraded in milliseconds"},"timeout":{"type":"number","nullable":true,"default":45000,"description":"The timeout of the request in milliseconds"},"retry":{"type":"number","default":3,"description":"The number of retries to attempt"},"followRedirects":{"type":"boolean","default":true,"description":"If the monitor should follow redirects"},"jobType":{"type":"string","enum":["http","tcp","icmp","udp","dns","ssl"],"default":"http","description":"The type of the monitor"},"openTelemetry":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri","default":"http://localhost:4317","description":"The endpoint of the OpenTelemetry collector"},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{},"description":"The headers to send to the OpenTelemetry collector"}},"description":"The OpenTelemetry configuration"}}}}}},"responses":{"200":{"description":"Update a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"delete":{"tags":["monitor"],"summary":"Delete a monitor","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"}],"responses":{"200":{"description":"The monitor was successfully deleted","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/http":{"post":{"tags":["monitor"],"summary":"Create a  http monitor","requestBody":{"description":"The monitor to create","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the monitor"},"description":{"type":"string"},"retry":{"type":"number","maximum":10,"minimum":1,"default":3,"description":"Number of retries to attempt","examples":[1,3,5]},"degradedAfter":{"type":"number","minimum":0,"default":30000,"description":"Time in milliseconds to wait before marking the request as degraded","examples":[30000]},"timeout":{"type":"number","minimum":0,"default":45000,"description":"Time in milliseconds to wait before marking the request as timed out","examples":[45000]},"frequency":{"type":"string","enum":["30s","1m","5m","10m","30m","1h"]},"active":{"type":"boolean","default":false,"description":"Whether the monitor is active"},"public":{"type":"boolean","default":false,"description":"Whether the monitor is public"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"openTelemetry":{"type":"object","nullable":true,"properties":{"endpoint":{"type":"string","format":"uri","description":"OTEL endpoint to send metrics to","examples":["https://otel.example.com"]},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Headers to send with the OTEL request","examples":[{"Content-Type":"application/json"}]}}},"assertions":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["statusCode"]},"compare":{"type":"string","enum":["eq","not_eq","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","gt","gte","lt","lte"]},"target":{"type":"number","description":"Status code to assert","examples":[200,404,418,500]}},"required":["kind","compare","target"],"examples":[{"kind":"statusCode","compare":"eq","target":200},{"kind":"statusCode","compare":"not_eq","target":404},{"kind":"statusCode","compare":"gt","target":300}]},{"type":"object","properties":{"kind":{"type":"string","enum":["header"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","contains","not_contains"]},"key":{"type":"string","description":"Header key to assert","examples":["Content-Type","X-Request-ID"]},"target":{"type":"string","description":"Header value to assert","examples":["application/json","text/html"]}},"required":["kind","compare","key","target"]},{"type":"object","properties":{"kind":{"type":"string","enum":["textBody"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","contains","not_contains"]},"target":{"type":"string","description":"Text body to assert","examples":["Hello, world!","404 Not Found"]}},"required":["kind","compare","target"]}]},"description":"Assertions to run on the response"},"request":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","HEAD","PUT","PATCH","DELETE","TRACE","CONNECT","OPTIONS"]},"url":{"type":"string","format":"uri","description":"URL to request","examples":["https://openstat.us","https://www.openstatus.dev"]},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Headers to send with the request","examples":[{"Content-Type":"application/json"}]},"body":{"type":"string","description":"Body to send with the request","examples":["{ \"key\": \"value\" }","Hello World"]}},"required":["method","url"],"description":"The HTTP Request we are sending"}},"required":["name","frequency","request"],"title":"HTTP Monitor Schema"}}}},"responses":{"200":{"description":"Create a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/tcp":{"post":{"tags":["monitor"],"summary":"Create a  tcp monitor","requestBody":{"description":"The monitor to create","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the monitor"},"description":{"type":"string"},"retry":{"type":"number","maximum":10,"minimum":1,"default":3,"description":"Number of retries to attempt","examples":[1,3,5]},"degradedAfter":{"type":"number","minimum":0,"default":30000,"description":"Time in milliseconds to wait before marking the request as degraded","examples":[30000]},"timeout":{"type":"number","minimum":0,"default":45000,"description":"Time in milliseconds to wait before marking the request as timed out","examples":[45000]},"frequency":{"type":"string","enum":["30s","1m","5m","10m","30m","1h"]},"active":{"type":"boolean","default":false,"description":"Whether the monitor is active"},"public":{"type":"boolean","default":false,"description":"Whether the monitor is public"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"openTelemetry":{"type":"object","nullable":true,"properties":{"endpoint":{"type":"string","format":"uri","description":"OTEL endpoint to send metrics to","examples":["https://otel.example.com"]},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Headers to send with the OTEL request","examples":[{"Content-Type":"application/json"}]}}},"request":{"type":"object","properties":{"host":{"type":"string","minLength":1,"examples":["example.com","localhost"],"description":"Host to connect to"},"port":{"type":"number","description":"Port to connect to","examples":[80,443,1337]}},"required":["host","port"],"description":"The TCP Request we are sending"}},"required":["name","frequency","request"],"title":"TCP Monitor Schema"}}}},"responses":{"200":{"description":"Create a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/dns":{"post":{"tags":["monitor"],"summary":"Create a  dns monitor","requestBody":{"description":"The monitor to create","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the monitor"},"description":{"type":"string"},"retry":{"type":"number","maximum":10,"minimum":1,"default":3,"description":"Number of retries to attempt","examples":[1,3,5]},"degradedAfter":{"type":"number","minimum":0,"default":30000,"description":"Time in milliseconds to wait before marking the request as degraded","examples":[30000]},"timeout":{"type":"number","minimum":0,"default":45000,"description":"Time in milliseconds to wait before marking the request as timed out","examples":[45000]},"frequency":{"type":"string","enum":["30s","1m","5m","10m","30m","1h"]},"active":{"type":"boolean","default":false,"description":"Whether the monitor is active"},"public":{"type":"boolean","default":false,"description":"Whether the monitor is public"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"openTelemetry":{"type":"object","nullable":true,"properties":{"endpoint":{"type":"string","format":"uri","description":"OTEL endpoint to send metrics to","examples":["https://otel.example.com"]},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Headers to send with the OTEL request","examples":[{"Content-Type":"application/json"}]}}},"request":{"type":"object","properties":{"uri":{"type":"string","description":"The DNS server to query","examples":["openstatus.dev"]}},"required":["uri"],"description":"The DNS Request we are sending"},"assertions":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["dnsRecord"]},"recordType":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT"],"description":"Type of DNS record to check","examples":["A","CNAME"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq"],"description":"Comparison operator","examples":["eq","not_eq","contains","not_contains"]},"target":{"type":"string","description":"DNS record value to assert","examples":["example.com"]}},"required":["kind","recordType","compare","target"]},"description":"Assertions to run on the DNS response"}},"required":["name","frequency","request"],"title":"DNS Monitor Schema"}}}},"responses":{"200":{"description":"Create a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/http/{id}":{"put":{"tags":["monitor"],"summary":"Update an HTTP monitor","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"}],"requestBody":{"description":"The monitor to update","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the monitor"},"description":{"type":"string"},"retry":{"type":"number","maximum":10,"minimum":1,"default":3,"description":"Number of retries to attempt","examples":[1,3,5]},"degradedAfter":{"type":"number","minimum":0,"default":30000,"description":"Time in milliseconds to wait before marking the request as degraded","examples":[30000]},"timeout":{"type":"number","minimum":0,"default":45000,"description":"Time in milliseconds to wait before marking the request as timed out","examples":[45000]},"frequency":{"type":"string","enum":["30s","1m","5m","10m","30m","1h"]},"active":{"type":"boolean","default":false,"description":"Whether the monitor is active"},"public":{"type":"boolean","default":false,"description":"Whether the monitor is public"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"openTelemetry":{"type":"object","nullable":true,"properties":{"endpoint":{"type":"string","format":"uri","description":"OTEL endpoint to send metrics to","examples":["https://otel.example.com"]},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Headers to send with the OTEL request","examples":[{"Content-Type":"application/json"}]}}},"assertions":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["statusCode"]},"compare":{"type":"string","enum":["eq","not_eq","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","gt","gte","lt","lte"]},"target":{"type":"number","description":"Status code to assert","examples":[200,404,418,500]}},"required":["kind","compare","target"],"examples":[{"kind":"statusCode","compare":"eq","target":200},{"kind":"statusCode","compare":"not_eq","target":404},{"kind":"statusCode","compare":"gt","target":300}]},{"type":"object","properties":{"kind":{"type":"string","enum":["header"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","contains","not_contains"]},"key":{"type":"string","description":"Header key to assert","examples":["Content-Type","X-Request-ID"]},"target":{"type":"string","description":"Header value to assert","examples":["application/json","text/html"]}},"required":["kind","compare","key","target"]},{"type":"object","properties":{"kind":{"type":"string","enum":["textBody"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq","empty","not_empty","gt","gte","lt","lte"],"description":"Comparison operator","examples":["eq","not_eq","contains","not_contains"]},"target":{"type":"string","description":"Text body to assert","examples":["Hello, world!","404 Not Found"]}},"required":["kind","compare","target"]}]},"description":"Assertions to run on the response"},"request":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","HEAD","PUT","PATCH","DELETE","TRACE","CONNECT","OPTIONS"]},"url":{"type":"string","format":"uri","description":"URL to request","examples":["https://openstat.us","https://www.openstatus.dev"]},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Headers to send with the request","examples":[{"Content-Type":"application/json"}]},"body":{"type":"string","description":"Body to send with the request","examples":["{ \"key\": \"value\" }","Hello World"]}},"required":["method","url"],"description":"The HTTP Request we are sending"}},"required":["name","frequency","request"],"title":"HTTP Monitor Schema"}}}},"responses":{"200":{"description":"Update a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/tcp/{id}":{"put":{"tags":["monitor"],"summary":"Update an TCP monitor","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"}],"requestBody":{"description":"The monitor to update","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the monitor"},"description":{"type":"string"},"retry":{"type":"number","maximum":10,"minimum":1,"default":3,"description":"Number of retries to attempt","examples":[1,3,5]},"degradedAfter":{"type":"number","minimum":0,"default":30000,"description":"Time in milliseconds to wait before marking the request as degraded","examples":[30000]},"timeout":{"type":"number","minimum":0,"default":45000,"description":"Time in milliseconds to wait before marking the request as timed out","examples":[45000]},"frequency":{"type":"string","enum":["30s","1m","5m","10m","30m","1h"]},"active":{"type":"boolean","default":false,"description":"Whether the monitor is active"},"public":{"type":"boolean","default":false,"description":"Whether the monitor is public"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"openTelemetry":{"type":"object","nullable":true,"properties":{"endpoint":{"type":"string","format":"uri","description":"OTEL endpoint to send metrics to","examples":["https://otel.example.com"]},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Headers to send with the OTEL request","examples":[{"Content-Type":"application/json"}]}}},"request":{"type":"object","properties":{"host":{"type":"string","minLength":1,"examples":["example.com","localhost"],"description":"Host to connect to"},"port":{"type":"number","description":"Port to connect to","examples":[80,443,1337]}},"required":["host","port"],"description":"The TCP Request we are sending"}},"required":["name","frequency","request"],"title":"TCP Monitor Schema"}}}},"responses":{"200":{"description":"Update a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/dns/{id}":{"put":{"tags":["monitor"],"summary":"Update an DNS monitor","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"}],"requestBody":{"description":"The monitor to update","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the monitor"},"description":{"type":"string"},"retry":{"type":"number","maximum":10,"minimum":1,"default":3,"description":"Number of retries to attempt","examples":[1,3,5]},"degradedAfter":{"type":"number","minimum":0,"default":30000,"description":"Time in milliseconds to wait before marking the request as degraded","examples":[30000]},"timeout":{"type":"number","minimum":0,"default":45000,"description":"Time in milliseconds to wait before marking the request as timed out","examples":[45000]},"frequency":{"type":"string","enum":["30s","1m","5m","10m","30m","1h"]},"active":{"type":"boolean","default":false,"description":"Whether the monitor is active"},"public":{"type":"boolean","default":false,"description":"Whether the monitor is public"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"openTelemetry":{"type":"object","nullable":true,"properties":{"endpoint":{"type":"string","format":"uri","description":"OTEL endpoint to send metrics to","examples":["https://otel.example.com"]},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Headers to send with the OTEL request","examples":[{"Content-Type":"application/json"}]}}},"request":{"type":"object","properties":{"uri":{"type":"string","description":"The DNS server to query","examples":["openstatus.dev"]}},"required":["uri"],"description":"The DNS Request we are sending"},"assertions":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["dnsRecord"]},"recordType":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT"],"description":"Type of DNS record to check","examples":["A","CNAME"]},"compare":{"type":"string","enum":["contains","not_contains","eq","not_eq"],"description":"Comparison operator","examples":["eq","not_eq","contains","not_contains"]},"target":{"type":"string","description":"DNS record value to assert","examples":["example.com"]}},"required":["kind","recordType","compare","target"]},"description":"Assertions to run on the DNS response"}},"required":["name","frequency","request"],"title":"DNS Monitor Schema"}}}},"responses":{"200":{"description":"Update a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Monitor"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/{id}/summary":{"get":{"tags":["monitor"],"summary":"Get a monitor summary","description":"Get a monitor summary of the last 45 days of data to be used within a status page","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"}],"responses":{"200":{"description":"All the historical metrics","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"ok":{"type":"integer","description":"The number of ok responses (defined by the assertions - or by default status code 200)"},"count":{"type":"integer","description":"The total number of request"},"day":{"type":"string","nullable":true,"format":"date","description":"The date of the daily stat in ISO8601 format"}},"required":["ok","count","day"]}}},"required":["data"]}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/{id}/trigger":{"post":{"tags":["monitor"],"summary":"Create a monitor trigger","description":"Trigger a monitor check without waiting the result","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"}],"responses":{"200":{"description":"Returns a result id that can be used to get the result of your trigger","content":{"application/json":{"schema":{"type":"object","properties":{"resultId":{"type":"number","description":"the id of your check result"}},"required":["resultId"]}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/{id}/result/{resultId}":{"get":{"tags":["monitor"],"summary":"Get a monitor result","description":"**WARNING:** This works only for HTTP monitors. We will add support for other types of monitors soon.","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"},{"schema":{"type":"string","description":"The id of the result"},"required":true,"description":"The id of the result","name":"resultId","in":"path"}],"responses":{"200":{"description":"All the metrics for the result id from the monitor","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"latency":{"type":"integer"},"statusCode":{"type":"integer","nullable":true,"default":null},"monitorId":{"type":"string","default":""},"url":{"type":"string"},"error":{"type":"boolean","nullable":true,"default":false},"region":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"timestamp":{"type":"integer"},"message":{"type":"string","nullable":true},"timing":{"type":"object","nullable":true,"properties":{"dnsStart":{"type":"number"},"dnsDone":{"type":"number"},"connectStart":{"type":"number"},"connectDone":{"type":"number"},"tlsHandshakeStart":{"type":"number"},"tlsHandshakeDone":{"type":"number"},"firstByteStart":{"type":"number"},"firstByteDone":{"type":"number"},"transferStart":{"type":"number"},"transferDone":{"type":"number"}},"required":["dnsStart","dnsDone","connectStart","connectDone","tlsHandshakeStart","tlsHandshakeDone","firstByteStart","firstByteDone","transferStart","transferDone"]}},"required":["latency","region"]}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/monitor/{id}/run":{"post":{"tags":["monitor"],"summary":"Create a monitor run","description":"Run a synthetic check for a specific monitor. It will take all configs into account.","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the monitor","example":"1"},"required":true,"description":"The id of the monitor","name":"id","in":"path"},{"schema":{"type":"boolean","nullable":true,"default":false,"description":"Don't wait for the result"},"required":false,"description":"Don't wait for the result","name":"no-wait","in":"query"}],"responses":{"200":{"description":"All the historical metrics","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"jobType":{"type":"string","enum":["http"]},"status":{"type":"number"},"latency":{"type":"number"},"region":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"timestamp":{"type":"number"},"timing":{"type":"object","properties":{"dnsStart":{"type":"number"},"dnsDone":{"type":"number"},"connectStart":{"type":"number"},"connectDone":{"type":"number"},"tlsHandshakeStart":{"type":"number"},"tlsHandshakeDone":{"type":"number"},"firstByteStart":{"type":"number"},"firstByteDone":{"type":"number"},"transferStart":{"type":"number"},"transferDone":{"type":"number"}},"required":["dnsStart","dnsDone","connectStart","connectDone","tlsHandshakeStart","tlsHandshakeDone","firstByteStart","firstByteDone","transferStart","transferDone"]},"body":{"type":"string","nullable":true},"error":{"type":"string","nullable":true}},"required":["jobType","status","latency","region","timestamp","timing"]},{"type":"object","properties":{"jobType":{"type":"string","enum":["tcp"]},"latency":{"type":"number"},"region":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"timestamp":{"type":"number"},"timing":{"type":"object","properties":{"tcpStart":{"type":"number"},"tcpDone":{"type":"number"}},"required":["tcpStart","tcpDone"]},"error":{"type":"number","nullable":true},"errorMessage":{"type":"string","nullable":true}},"required":["jobType","latency","region","timestamp","timing"]}]}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/page/{id}":{"get":{"tags":["page"],"summary":"Get a status page","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the page","example":"1"},"required":true,"description":"The id of the page","name":"id","in":"path"}],"responses":{"200":{"description":"Get an Status page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"put":{"tags":["page"],"summary":"Update a status page","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the page","example":"1"},"required":true,"description":"The id of the page","name":"id","in":"path"}],"requestBody":{"description":"The monitor to update","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"The title of the page","example":"My Page"},"description":{"type":"string","description":"The description of the page","example":"My awesome status page"},"slug":{"type":"string","description":"The slug of the page","example":"my-page"},"customDomain":{"type":"string","nullable":true,"description":"The custom domain of the page. To be configured within the dashboard.","example":"status.acme.com"},"icon":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":[""]},{"nullable":true}],"description":"The icon of the page","example":"https://example.com/icon.png"},"passwordProtected":{"type":"boolean","default":false,"description":"Deprecated in favor of `accessType`. Used to set the password protection type. Returns true if `accessType` is set to 'password' and false otherwise.","example":true,"deprecated":true},"accessType":{"type":"string","enum":["public","password","email-domain"],"default":"public","description":"The access type of the page","example":"public"},"password":{"type":"string","nullable":true,"description":"Your password to protect the page from the public","example":"hidden-password"},"authEmailDomains":{"type":"array","nullable":true,"items":{"type":"string"},"description":"The email domains of the page","example":["example.com","example.org"]},"showMonitorValues":{"type":"boolean","nullable":true,"default":true,"description":"Displays the total and failed request numbers for each monitor. Deprecated and will be removed in the future in favor for `configuration` property.","example":true,"deprecated":true},"monitors":{"anyOf":[{"type":"array","items":{"type":"number"},"description":"The monitors of the page as an array of ids. We recommend using the object format to include the order.","deprecated":true,"example":[1,2]},{"type":"array","items":{"type":"object","properties":{"monitorId":{"type":"number"},"order":{"type":"number"}},"required":["monitorId","order"]},"description":"The monitor as object allowing to pass id and order","example":[{"monitorId":1,"order":0},{"monitorId":2,"order":1}]}]}}}}}},"responses":{"200":{"description":"Get an Status page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/page":{"get":{"tags":["page"],"summary":"List all status pages","responses":{"200":{"description":"A list of your status pages","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Page"}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"post":{"tags":["page"],"summary":"Create a status page","requestBody":{"description":"The status page to create","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"The title of the page","example":"My Page"},"description":{"type":"string","description":"The description of the page","example":"My awesome status page"},"slug":{"type":"string","description":"The slug of the page","example":"my-page"},"customDomain":{"type":"string","nullable":true,"description":"The custom domain of the page. To be configured within the dashboard.","example":"status.acme.com"},"icon":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","enum":[""]},{"nullable":true}],"description":"The icon of the page","example":"https://example.com/icon.png"},"passwordProtected":{"type":"boolean","default":false,"description":"Deprecated in favor of `accessType`. Used to set the password protection type. Returns true if `accessType` is set to 'password' and false otherwise.","example":true,"deprecated":true},"accessType":{"type":"string","enum":["public","password","email-domain"],"default":"public","description":"The access type of the page","example":"public"},"password":{"type":"string","nullable":true,"description":"Your password to protect the page from the public","example":"hidden-password"},"authEmailDomains":{"type":"array","nullable":true,"items":{"type":"string"},"description":"The email domains of the page","example":["example.com","example.org"]},"showMonitorValues":{"type":"boolean","nullable":true,"default":true,"description":"Displays the total and failed request numbers for each monitor. Deprecated and will be removed in the future in favor for `configuration` property.","example":true,"deprecated":true},"monitors":{"anyOf":[{"type":"array","items":{"type":"number"},"description":"The monitors of the page as an array of ids. We recommend using the object format to include the order.","deprecated":true,"example":[1,2]},{"type":"array","items":{"type":"object","properties":{"monitorId":{"type":"number"},"order":{"type":"number"}},"required":["monitorId","order"]},"description":"The monitor as object allowing to pass id and order","example":[{"monitorId":1,"order":0},{"monitorId":2,"order":1}]}]}},"required":["title","description","slug"]}}}},"responses":{"200":{"description":"Get an Status page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/status_report":{"get":{"tags":["status_report"],"summary":"List all status reports","responses":{"200":{"description":"Get all status reports","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StatusReport"}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"post":{"tags":["status_report"],"summary":"Create a status report","requestBody":{"description":"The status report to create","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"Documenso","description":"The title of the status report"},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved"],"description":"The current status of the report"},"monitorIds":{"type":"array","items":{"type":"number"},"default":[],"description":"Ids of the monitors the status report."},"pageId":{"type":"number","description":"The id of the page this status report belongs to"},"date":{"type":"string","nullable":true,"format":"date","default":"2026-02-12T22:01:46.114Z","description":"The date of the report in ISO8601 format, defaults to now"},"message":{"type":"string","description":"The message of the current status of incident"}},"required":["title","status","pageId","message"]}}}},"responses":{"200":{"description":"The created status report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusReport"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/status_report/{id}":{"delete":{"tags":["status_report"],"summary":"Delete a status report","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the status report","example":"1"},"required":true,"description":"The id of the status report","name":"id","in":"path"}],"responses":{"200":{"description":"Status report deleted","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"get":{"tags":["status_report"],"summary":"Get a status report","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the status report","example":"1"},"required":true,"description":"The id of the status report","name":"id","in":"path"}],"responses":{"200":{"description":"Get all status reports","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusReport"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/status_report/{id}/update":{"post":{"tags":["status_report"],"summary":"Create a status report update","deprecated":true,"description":"Preferably use [`/status-report-updates`](#tag/status_report_update/POST/status_report_update) instead.","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the status report","example":"1"},"required":true,"description":"The id of the status report","name":"id","in":"path"}],"requestBody":{"description":"the status report update","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["investigating","identified","monitoring","resolved"],"description":"The status of the update"},"date":{"type":"string","nullable":true,"format":"date","default":"2026-02-12T22:01:46.114Z","description":"The date of the update in ISO8601 format"},"message":{"type":"string","minLength":1,"description":"The message of the update"}},"required":["status","message"]}}}},"responses":{"200":{"description":"Status report updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusReport"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/status_report_update/{id}":{"get":{"tags":["status_report_update"],"summary":"Get a status report update","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the update","example":"1"},"required":true,"description":"The id of the update","name":"id","in":"path"}],"responses":{"200":{"description":"Get a status report update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusReportUpdate"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/status_report_update":{"post":{"tags":["status_report_update"],"summary":"Create a status report update","requestBody":{"description":"The status report update to create","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["investigating","identified","monitoring","resolved"],"description":"The status of the update"},"date":{"type":"string","nullable":true,"format":"date","default":"2026-02-12T22:01:46.114Z","description":"The date of the update in ISO8601 format"},"message":{"type":"string","minLength":1,"description":"The message of the update"},"statusReportId":{"type":"number","description":"The id of the status report"}},"required":["status","message","statusReportId"]}}}},"responses":{"200":{"description":"The created status report update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusReportUpdate"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/incident":{"get":{"tags":["incident"],"summary":"List all incidents","responses":{"200":{"description":"Get all incidents","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Incident"}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/incident/{id}":{"get":{"tags":["incident"],"summary":"Get an incident","parameters":[{"schema":{"type":"string","minLength":1,"pattern":"^\\d+$","description":"The id of the Incident","example":"1"},"required":true,"description":"The id of the Incident","name":"id","in":"path"}],"responses":{"200":{"description":"Get an incident","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Incident"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"put":{"tags":["incident"],"summary":"Update an incident","description":"Acknowledge or resolve an incident","parameters":[{"schema":{"type":"string","minLength":1,"pattern":"^\\d+$","description":"The id of the Incident","example":"1"},"required":true,"description":"The id of the Incident","name":"id","in":"path"}],"requestBody":{"description":"The incident to update","content":{"application/json":{"schema":{"type":"object","properties":{"acknowledgedAt":{"type":"string","nullable":true,"format":"date","description":"The date the incident was acknowledged"},"resolvedAt":{"type":"string","nullable":true,"format":"date","description":"The date the incident was resolved"}}}}}},"responses":{"200":{"description":"Update a monitor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Incident"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/maintenance":{"get":{"tags":["maintenance"],"summary":"List all maintenances","responses":{"200":{"description":"Get all maintenances","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Maintenance"}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"post":{"tags":["maintenance"],"summary":"Create a maintenance","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"The title of the maintenance","example":"Database Upgrade"},"message":{"type":"string","description":"The message describing the maintenance","example":"Upgrading database to improve performance"},"from":{"type":"string","nullable":true,"format":"date","description":"When the maintenance starts"},"to":{"type":"string","nullable":true,"format":"date","description":"When the maintenance ends"},"monitorIds":{"type":"array","items":{"type":"number"},"default":[],"description":"IDs of affected monitors"},"pageId":{"type":"number","description":"The id of the status page this maintenance belongs to"}},"required":["title","message","from","to","pageId"]}}}},"responses":{"200":{"description":"Create a maintenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Maintenance"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/maintenance/{id}":{"get":{"tags":["maintenance"],"summary":"Get a maintenance","parameters":[{"schema":{"type":"string","minLength":1,"pattern":"^\\d+$","description":"The id of the maintenance","example":"1"},"required":true,"description":"The id of the maintenance","name":"id","in":"path"}],"responses":{"200":{"description":"Get a maintenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Maintenance"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"put":{"tags":["maintenance"],"summary":"Update a maintenance","parameters":[{"schema":{"type":"string","minLength":1,"pattern":"^\\d+$","description":"The id of the maintenance","example":"1"},"required":true,"description":"The id of the maintenance","name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"The title of the maintenance","example":"Database Upgrade"},"message":{"type":"string","description":"The message describing the maintenance","example":"Upgrading database to improve performance"},"from":{"type":"string","nullable":true,"format":"date","description":"When the maintenance starts"},"to":{"type":"string","nullable":true,"format":"date","description":"When the maintenance ends"},"monitorIds":{"type":"array","items":{"type":"number"},"default":[],"description":"IDs of affected monitors"},"pageId":{"type":"number","description":"The id of the status page this maintenance belongs to"}}}}}},"responses":{"200":{"description":"Update a maintenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Maintenance"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/notification":{"get":{"tags":["notification"],"summary":"List all notifications","responses":{"200":{"description":"Get all your workspace notification","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Notification"}}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}},"post":{"tags":["notification"],"summary":"Create a notification","requestBody":{"description":"The notification to create","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the notification","example":"OpenStatus Discord"},"provider":{"type":"string","enum":["discord","email","google-chat","grafana-oncall","ntfy","pagerduty","opsgenie","slack","sms","telegram","webhook","whatsapp"],"description":"The provider of the notification","example":"discord"},"payload":{"anyOf":[{"type":"object","properties":{"discord":{"type":"string","format":"uri"}},"required":["discord"]},{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]},{"type":"object","properties":{"grafana-oncall":{"type":"object","properties":{"webhookUrl":{"type":"string","format":"uri"}},"required":["webhookUrl"]}},"required":["grafana-oncall"]},{"type":"object","properties":{"ms-teams":{"type":"object","properties":{"webhookUrl":{"type":"string","format":"uri"}},"required":["webhookUrl"]}},"required":["ms-teams"]},{"type":"object","properties":{"ntfy":{"type":"object","properties":{"topic":{"type":"string","default":""},"serverUrl":{"type":"string","default":"https://ntfy.sh"},"token":{"type":"string"}}}},"required":["ntfy"]},{"type":"object","properties":{"opsgenie":{"type":"object","properties":{"apiKey":{"type":"string"},"region":{"type":"string","enum":["us","eu"]}},"required":["apiKey","region"]}},"required":["opsgenie"]},{"type":"object","properties":{"pagerduty":{"type":"string"}},"required":["pagerduty"]},{"type":"object","properties":{"sms":{"type":"string","pattern":"^([+]?[\\s0-9]+)?(\\d{3}|[(]?[0-9]+[)])?([-]?[\\s]?[0-9])+$"}},"required":["sms"]},{"type":"object","properties":{"telegram":{"type":"object","properties":{"chatId":{"type":"string"}},"required":["chatId"]}},"required":["telegram"]},{"type":"object","properties":{"slack":{"type":"string","format":"uri"}},"required":["slack"]},{"type":"object","properties":{"webhook":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]}}},"required":["endpoint"]}},"required":["webhook"]},{"type":"object","properties":{"whatsapp":{"type":"string","pattern":"^([+]?[\\s0-9]+)?(\\d{3}|[(]?[0-9]+[)])?([-]?[\\s]?[0-9])+$"}},"required":["whatsapp"]},{"type":"object","properties":{"google-chat":{"type":"string","format":"uri"}},"required":["google-chat"]}],"description":"The data of the notification"},"monitors":{"type":"array","nullable":true,"items":{"type":"number"},"description":"The monitors that the notification is linked to","example":[1,2]}},"required":["name","provider","payload"]}}}},"responses":{"200":{"description":"Return the created notification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/notification/{id}":{"get":{"tags":["notification"],"summary":"Get a notification","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the notification","example":"1"},"required":true,"description":"The id of the notification","name":"id","in":"path"}],"responses":{"200":{"description":"Get an Status page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/page_subscriber/{id}/update":{"post":{"tags":["page_subscriber"],"summary":"Subscribe to a status page","description":"Add a subscriber to a status page","parameters":[{"schema":{"type":"string","minLength":1,"description":"The id of the page","example":"1"},"required":true,"description":"The id of the page","name":"id","in":"path"}],"requestBody":{"description":"The subscriber payload","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"The email of the subscriber"}},"required":["email"]}}}},"responses":{"200":{"description":"The user has been subscribed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageSubscriber"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/check/http":{"post":{"tags":["check"],"summary":"Run a single check","requestBody":{"description":"The run request to create","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","example":"https://www.documenso.co","description":"The url to monitor"},"body":{"type":"string","nullable":true,"default":"","example":"Hello World","description":"The body"},"headers":{"type":"array","nullable":true,"items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"default":[],"description":"The headers of your request","example":[{"key":"x-apikey","value":"supersecrettoken"}]},"method":{"type":"string","enum":["GET","POST","HEAD","PUT","PATCH","DELETE","TRACE","CONNECT","OPTIONS"],"example":"GET"},"regions":{"type":"array","nullable":true,"items":{"type":"string","enum":["ams","arn","atl","bog","bom","bos","cdg","den","dfw","ewr","eze","fra","gdl","gig","gru","hkg","iad","jnb","lax","lhr","mad","mia","nrt","ord","otp","phx","qro","scl","sjc","sea","sin","syd","waw","yul","yyz","koyeb_fra","koyeb_was","koyeb_sin","koyeb_tyo","koyeb_par","koyeb_sfo","railway_europe-west4-drams3a","railway_us-east4-eqdc4a","railway_asia-southeast1-eqsg3a","railway_us-west2"]},"default":[],"example":["ams"],"description":"Where we should monitor it"},"runCount":{"type":"number","maximum":5,"default":1,"description":"The number of times to run the check"},"aggregated":{"type":"boolean","description":"Whether to aggregate the results or not"}},"required":["url","method"],"description":"The check request"}}}},"responses":{"200":{"description":"Return a run result","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"The id of the check"},"raw":{"type":"array","items":{"type":"object","properties":{"dnsStart":{"type":"number","description":"DNS timestamp start time in UTC "},"dnsDone":{"type":"number","description":"DNS timestamp end time in UTC "},"connectStart":{"type":"number","description":"Connect timestamp start time in UTC "},"connectDone":{"type":"number","description":"Connect timestamp end time in UTC "},"tlsHandshakeStart":{"type":"number","description":"TLS handshake timestamp start time in UTC "},"tlsHandshakeDone":{"type":"number","description":"TLS handshake timestamp end time in UTC "},"firstByteStart":{"type":"number","description":"First byte timestamp start time in UTC "},"firstByteDone":{"type":"number","description":"First byte timestamp end time in UTC "},"transferStart":{"type":"number","description":"Transfer timestamp start time in UTC "},"transferDone":{"type":"number","description":"Transfer timestamp end time in UTC "}},"required":["dnsStart","dnsDone","connectStart","connectDone","tlsHandshakeStart","tlsHandshakeDone","firstByteStart","firstByteDone","transferStart","transferDone"]},"description":"The raw data of the check"},"response":{"type":"object","properties":{"timestamp":{"type":"number","description":"The timestamp of the response in UTC"},"status":{"type":"number","description":"The status code of the response"},"latency":{"type":"number","description":"The latency of the response"},"body":{"type":"string","description":"The body of the response"},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"The headers of the response"},"timing":{"type":"object","properties":{"dnsStart":{"type":"number","description":"DNS timestamp start time in UTC "},"dnsDone":{"type":"number","description":"DNS timestamp end time in UTC "},"connectStart":{"type":"number","description":"Connect timestamp start time in UTC "},"connectDone":{"type":"number","description":"Connect timestamp end time in UTC "},"tlsHandshakeStart":{"type":"number","description":"TLS handshake timestamp start time in UTC "},"tlsHandshakeDone":{"type":"number","description":"TLS handshake timestamp end time in UTC "},"firstByteStart":{"type":"number","description":"First byte timestamp start time in UTC "},"firstByteDone":{"type":"number","description":"First byte timestamp end time in UTC "},"transferStart":{"type":"number","description":"Transfer timestamp start time in UTC "},"transferDone":{"type":"number","description":"Transfer timestamp end time in UTC "}},"required":["dnsStart","dnsDone","connectStart","connectDone","tlsHandshakeStart","tlsHandshakeDone","firstByteStart","firstByteDone","transferStart","transferDone"],"description":"The timing metrics of the response"},"aggregated":{"type":"object","properties":{"dns":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated DNS timing of the check"},"connection":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated connection timing of the check"},"tls":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated tls timing of the check"},"firstByte":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated first byte timing of the check"},"transfer":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated transfer timing of the check"},"latency":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated latency timing of the check"}},"required":["dns","connection","tls","firstByte","transfer","latency"],"description":"The aggregated data dns timing of the check"},"region":{"type":"string","description":"The region where the check ran"}},"required":["timestamp","status","latency","timing","region"],"description":"The last response of the check"},"aggregated":{"type":"object","properties":{"dns":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated data of the check"},"connect":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated data of the check"},"tls":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated data of the check"},"firstByte":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated data of the check"},"transfer":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated data of the check"},"latency":{"type":"object","properties":{"p50":{"type":"number","description":"The 50th percentile"},"p75":{"type":"number","description":"The 75th percentile"},"p95":{"type":"number","description":"The 95th percentile"},"p99":{"type":"number","description":"The 99th percentile"},"min":{"type":"number","description":"The minimum value"},"max":{"type":"number","description":"The maximum value"}},"required":["p50","p75","p95","p99","min","max"],"description":"The aggregated data of the check"}},"required":["dns","connect","tls","firstByte","transfer","latency"],"description":"The aggregated data of the check"}},"required":["id","raw","response"]}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}},"/whoami":{"get":{"tags":["whoami"],"summary":"Get your informations","description":"Get the current workspace information attached to the API key.","responses":{"200":{"description":"The current workspace information with the limits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrBadRequest"}}}},"401":{"description":"The client must authenticate itself to get the requested response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrUnauthorized"}}}},"402":{"description":"A higher pricing plan is required to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrPaymentRequired"}}}},"403":{"description":"The client does not have the necessary permissions to access the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrForbidden"}}}},"404":{"description":"The server can't find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrNotFound"}}}},"409":{"description":"The request could not be completed due to a conflict mainly due to unique constraints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrConflict"}}}},"500":{"description":"The server has encountered a situation it doesn't know how to handle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrInternalServerError"}}}}}}}}}