{"openapi":"3.1.0","info":{"title":"RealUptime (BYOK) API","version":"0.1.0","description":"RealUptime (BYOK) lets an AI assistant read your own RealUptime data through the RealUptime API with a key you supply (RealUptime API key (starts with ru_live_)). Read-only: 11 tools (list_checks, get_check_status, list_heartbeat_runs, list_heartbeats, query_check_results, list_status_pages, get_status_page, list_incidents, get_active_maintenance, list_error_projects, list_error_issues). The BYOK...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-realuptime.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-realuptime/docs"},"termsOfService":"https://connectorbay.com/byok-realuptime/terms"},"servers":[{"url":"https://byok-realuptime.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-realuptime/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_checks":{"post":{"operationId":"list_checks","summary":"List every monitor on the account (http, heartbeat, tcp, dns, smtp, ping, multistep) with name, URL or host, interval, s","description":"List every monitor on the account (http, heartbeat, tcp, dns, smtp, ping, multistep) with name, URL or host, interval, selected probe regions, pause state and tags. Use for \"Which monitors do I have in RealUptime\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_checksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_check_status":{"post":{"operationId":"get_check_status","summary":"Get one monitor's current status (operational, degraded, down, stale or unknown) aggregated across its probe regions, wi","description":"Get one monitor's current status (operational, degraded, down, stale or unknown) aggregated across its probe regions, with each region's state and last check time. Use for \"Is my API monitor up right now in all regions\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"check_id":{"description":"Id of the monitor, as returned by list_checks.","maxLength":64,"title":"Check Id","type":"string"}},"required":["check_id"],"title":"get_check_statusArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_heartbeat_runs":{"post":{"operationId":"list_heartbeat_runs","summary":"List a heartbeat monitor's job runs, newest first: start and finish time, outcome (running, success, fail, superseded), ","description":"List a heartbeat monitor's job runs, newest first: start and finish time, outcome (running, success, fail, superseded), duration, stuck flag and exit code. Only heartbeat monitors have runs. Use for \"Did my nightly backup heartbeat run succeed last night\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"check_id":{"description":"Id of the monitor, as returned by list_checks.","maxLength":64,"title":"Check Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many runs to return (1 to 500).","title":"Limit"},"before":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs that started before this ISO 8601 time; pass next_before from the previous answer to page back.","title":"Before"}},"required":["check_id"],"title":"list_heartbeat_runsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_heartbeats":{"post":{"operationId":"list_heartbeats","summary":"List the account's heartbeat monitors (jobs that must ping in on a schedule), oldest first. Use for \"Which heartbeat mon","description":"List the account's heartbeat monitors (jobs that must ping in on a schedule), oldest first. Use for \"Which heartbeat monitors do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_heartbeatsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/query_check_results":{"post":{"operationId":"query_check_results","summary":"Query probe results over a time range for some or all monitors: raw rows (time, region, ok, status code, latency, error)","description":"Query probe results over a time range for some or all monitors: raw rows (time, region, ok, status code, latency, error) or, with a step, downsampled buckets with sample counts and p50/p95 latency. Reads are clamped to the plan's history window. Use for \"What was the p95 latency of my monitors per hour yesterday\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_time":{"description":"Start of the range, ISO 8601, for example 2026-10-15T00:00:00Z.","maxLength":40,"title":"From Time","type":"string"},"to_time":{"description":"End of the range (exclusive), ISO 8601; must be after the start.","maxLength":40,"title":"To Time","type":"string"},"check_ids":{"anyOf":[{"maxLength":8000,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated monitor ids (up to 200). Omit for all monitors.","title":"Check Ids"},"region":{"anyOf":[{"enum":["iad","sjc","fra","nrt","ord","yyz","lhr","sin","syd","gru"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this probe region. Omit for all regions.","title":"Region"},"step":{"anyOf":[{"maxLength":8,"type":"string"},{"type":"null"}],"default":null,"description":"Downsample interval such as 30s, 5m, 1h or 1d (10 seconds to 7 days). Omit for raw rows.","title":"Step"},"cursor":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: pass next_cursor from the previous answer.","title":"Cursor"},"limit":{"anyOf":[{"maximum":5000,"minimum":1,"type":"integer"},{"type":"null"}],"default":500,"description":"Row cap for this answer (1 to 5000).","title":"Limit"}},"required":["from_time","to_time"],"title":"query_check_resultsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_status_pages":{"post":{"operationId":"list_status_pages","summary":"List the account's status pages with slug, name, custom domain and its verification state, branding fields and mirrored ","description":"List the account's status pages with slug, name, custom domain and its verification state, branding fields and mirrored vendor components. Use for \"Which status pages do I run on RealUptime\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_status_pagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_status_page":{"post":{"operationId":"get_status_page","summary":"Get one status page by id: slug, name, custom domain and domain state, title, description and logo. Use for \"Show the se","description":"Get one status page by id: slug, name, custom domain and domain state, title, description and logo. Use for \"Show the settings of my main status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status_page_id":{"description":"Id of the status page, as returned by list_status_pages.","maxLength":64,"title":"Status Page Id","type":"string"}},"required":["status_page_id"],"title":"get_status_pageArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_incidents":{"post":{"operationId":"list_incidents","summary":"List incidents across all monitors, newest first: title, status, region(s) that failed and recovered, opened and resolve","description":"List incidents across all monitors, newest first: title, status, region(s) that failed and recovered, opened and resolved time and acknowledgement. Use for \"Which incidents happened on my monitors recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many incidents to return (1 to 500).","title":"Limit"}},"title":"list_incidentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_active_maintenance":{"post":{"operationId":"get_active_maintenance","summary":"Show the maintenance window that is active right now for one status page, or null if there is none. Use for \"Is a mainte","description":"Show the maintenance window that is active right now for one status page, or null if there is none. Use for \"Is a maintenance window active on my status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status_page_id":{"description":"Id of the status page (UUID).","maxLength":64,"title":"Status Page Id","type":"string"}},"required":["status_page_id"],"title":"get_active_maintenanceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_error_projects":{"post":{"operationId":"list_error_projects","summary":"List the account's error-tracking projects with name, key hint and revoked flag, the plan's event quota and retention, a","description":"List the account's error-tracking projects with name, key hint and revoked flag, the plan's event quota and retention, and this period's usage. Use for \"Which error-tracking projects do I have and how much quota is used\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_error_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_error_issues":{"post":{"operationId":"list_error_issues","summary":"List error issues of one project filtered by text, release, status, last-seen window or tag, with a total and a truncati","description":"List error issues of one project filtered by text, release, status, last-seen window or tag, with a total and a truncation flag. Use for \"Which open errors were seen in the last 24 hours in my web project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Error project id, as returned by list_error_projects.","maxLength":64,"title":"Project Id","type":"string"},"q":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Substring to match in title or culprit (up to 200 characters).","title":"Q"},"release":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only issues that saw an event tagged with this release.","title":"Release"},"status":{"anyOf":[{"enum":["open","resolved","ignored"],"type":"string"},{"type":"null"}],"default":null,"description":"Issue status.","title":"Status"},"window":{"anyOf":[{"enum":["24h","7d","30d","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Last-seen window.","title":"Window"},"tag":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Tag filter, 'key:value' for an exact match or a bare key for 'tag is set'.","title":"Tag"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many issues to return (1 to 100).","title":"Limit"}},"required":["project_id"],"title":"list_error_issuesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}