Uptimely On Call API
Live on-call rosters — who is on call right now.
Live on-call rosters — who is on call right now.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/getuptimely-com:getuptimely-com-on-call-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Uptimely On Call API
version: 0.1.0
description: 'The public Uptimely REST API — uptime monitoring, incidents, alerts and status pages for people and agents. Authenticate with an `uptimely_live_` API key via `Authorization: Bearer`.'
contact:
name: Uptimely support
url: https://getuptimely.com
email: support@devino.ca
servers:
- url: https://app.getuptimely.com
description: Production
security:
- bearerAuth: []
tags:
- name: On-call
description: Live on-call rosters — who is on call right now.
paths:
/v1/on-call/current:
get:
operationId: getOnCallCurrent
summary: Who is on call now
description: Returns the live-computed current and next roster user for every on-call schedule in the project.
tags:
- On-call
security:
- bearerAuth: []
x-scopes:
- on-call:read
x-entitlement: public_api_read
x-idempotent: false
x-meter:
metric: API_CALLS
cost: 1
responses:
'200':
description: Live on-call rosters.
headers:
x-request-id:
required: true
description: Unique id for this request — present on EVERY response; quote it in support requests.
schema:
type: string
description: Unique id for this request — present on EVERY response; quote it in support requests.
RateLimit-Policy:
description: IETF draft-11 quota policies, e.g. `"per-key-minute";q=300;w=60, "api-calls-period";q=100000;w=2678400`.
schema:
description: IETF draft-11 quota policies, e.g. `"per-key-minute";q=300;w=60, "api-calls-period";q=100000;w=2678400`.
type: string
RateLimit:
description: 'IETF draft-11 current-window state of the primary policy: remaining requests (`r`) and seconds to reset (`t`).'
schema:
description: 'IETF draft-11 current-window state of the primary policy: remaining requests (`r`) and seconds to reset (`t`).'
type: string
X-RateLimit-Limit:
description: Primary-window request allowance.
schema:
description: Primary-window request allowance.
type: string
X-RateLimit-Remaining:
description: Requests remaining in the primary window.
schema:
description: Requests remaining in the primary window.
type: string
X-RateLimit-Reset:
description: Unix epoch seconds when the primary window resets.
schema:
description: Unix epoch seconds when the primary window resets.
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/OnCallCurrent'
'401':
description: Missing or invalid credentials — `missing_credentials`, `invalid_api_key` or `invalid_token`.
headers:
x-request-id:
required: true
description: Unique id for this request — present on EVERY response; quote it in support requests.
schema:
type: string
description: Unique id for this request — present on EVERY response; quote it in support requests.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'403':
description: Authenticated but denied — `insufficient_scope`, `feature_not_enabled` or `unsupported_credential_type`.
headers:
x-request-id:
required: true
description: Unique id for this request — present on EVERY response; quote it in support requests.
schema:
type: string
description: Unique id for this request — present on EVERY response; quote it in support requests.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'429':
description: Over a limit — `rate_limited` (per-key burst, or the lower per-key ceiling that list/history/export endpoints share; retry after `Retry-After`) or `quota_exhausted` (monthly plan allowance; resets at month start).
headers:
x-request-id:
required: true
description: Unique id for this request — present on EVERY response; quote it in support requests.
schema:
type: string
description: Unique id for this request — present on EVERY response; quote it in support requests.
RateLimit-Policy:
description: IETF draft-11 quota policies, e.g. `"per-key-minute";q=300;w=60, "api-calls-period";q=100000;w=2678400`.
schema:
description: IETF draft-11 quota policies, e.g. `"per-key-minute";q=300;w=60, "api-calls-period";q=100000;w=2678400`.
type: string
RateLimit:
description: 'IETF draft-11 current-window state of the primary policy: remaining requests (`r`) and seconds to reset (`t`).'
schema:
description: 'IETF draft-11 current-window state of the primary policy: remaining requests (`r`) and seconds to reset (`t`).'
type: string
X-RateLimit-Limit:
description: Primary-window request allowance.
schema:
description: Primary-window request allowance.
type: string
X-RateLimit-Remaining:
description: Requests remaining in the primary window.
schema:
description: Requests remaining in the primary window.
type: string
X-RateLimit-Reset:
description: Unix epoch seconds when the primary window resets.
schema:
description: Unix epoch seconds when the primary window resets.
type: string
Retry-After:
description: Seconds until the exceeded window resets.
schema:
description: Seconds until the exceeded window resets.
type: string
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'500':
description: Unexpected server error — `internal_error`; quote `request_id` when reporting.
headers:
x-request-id:
required: true
description: Unique id for this request — present on EVERY response; quote it in support requests.
schema:
type: string
description: Unique id for this request — present on EVERY response; quote it in support requests.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
components:
schemas:
ProblemNext:
type: object
properties:
tool:
type: string
description: Name of the MCP tool to call next.
example: request_scopes
args:
description: Arguments to pass to that tool.
type: object
propertyNames:
type: string
additionalProperties: {}
required:
- tool
additionalProperties: false
description: The MCP tool that resolves a problem, with its arguments.
Problem:
type: object
properties:
type:
type: string
description: URI identifying the problem class; resolves to its docs page.
example: https://getuptimely.com/docs/api/problems/validation-failed
title:
type: string
description: Short human-readable summary of the problem class. Never parse it — switch on `code`.
status:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
description: HTTP status code, duplicated from the response.
example: 400
detail:
description: Human-readable explanation specific to this occurrence.
type: string
code:
type: string
enum:
- missing_credentials
- invalid_api_key
- invalid_token
- unsupported_credential_type
- insufficient_scope
- feature_not_enabled
- validation_failed
- resource_not_found
- rate_limited
- quota_exhausted
- idempotency_key_reused
- idempotency_in_progress
- internal_error
description: Stable machine-readable problem code — the value SDKs branch on.
request_id:
type: string
description: The x-request-id of the failing request — quote it in support requests.
errors:
description: Field-level failures (present on validation_failed).
type: array
items:
$ref: '#/components/schemas/FieldError'
next:
description: The MCP tool that resolves this problem (present on insufficient_scope and quota_exhausted).
$ref: '#/components/schemas/ProblemNext'
required:
- type
- title
- status
- code
- request_id
additionalProperties: false
description: RFC 9457 problem document with the Uptimely `code` extension.
OnCallUserRef:
type: object
properties:
id:
type: string
description: User id.
name:
description: Display name.
type:
- string
- 'null'
email:
type: string
description: Email address.
required:
- id
- name
- email
additionalProperties: false
description: A user on an on-call roster.
FieldError:
type: object
properties:
pointer:
type: string
description: RFC 6901 JSON Pointer to the offending request field.
example: /name
code:
type: string
description: Machine-readable per-field validation code.
example: invalid_type
message:
type: string
description: Human-readable explanation for this field.
required:
- pointer
- code
- message
additionalProperties: false
description: A single field-level validation failure.
OnCallCurrent:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/OnCallScheduleRoster'
description: One entry per on-call schedule in the project.
required:
- data
additionalProperties: false
description: Live on-call rosters for every schedule.
OnCallScheduleRoster:
type: object
properties:
schedule_id:
type: string
description: On-call schedule id.
schedule_name:
type: string
description: Schedule name.
description:
description: Optional schedule description.
type:
- string
- 'null'
current_user:
anyOf:
- $ref: '#/components/schemas/OnCallUserRef'
- type: 'null'
description: Who is on call right now; null when nobody is.
next_user:
anyOf:
- $ref: '#/components/schemas/OnCallUserRef'
- type: 'null'
description: Who takes over next; null when unknown.
handoff_at:
anyOf:
- type: string
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
format: date-time
- type: 'null'
description: When the current roster hands off, ISO-8601 UTC.
next_start_at:
anyOf:
- type: string
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
format: date-time
- type: 'null'
description: When the next roster begins, ISO-8601 UTC.
required:
- schedule_id
- schedule_name
- description
- current_user
- next_user
- handoff_at
- next_start_at
additionalProperties: false
description: The live roster of one on-call schedule.
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: An `uptimely_live_` project API key (Settings → API Keys).
x-provenance:
method: harvested
publisher: Uptimely
source: https://getuptimely.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)