Better Uptime Monitors API
Manage uptime monitors for websites and services
Manage uptime monitors for websites and services
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/betteruptime-monitors-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Better Stack Uptime Heartbeats Monitors API
description: The Better Stack Uptime API provides programmatic access to manage uptime monitors, heartbeats, on-call schedules, incidents, status pages, integrations, team members, and reporting. The API follows the JSON:API specification and uses Bearer token authentication.
version: v2
contact:
name: Better Stack Support
url: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/
termsOfService: https://betterstack.com/terms
license:
name: Proprietary
url: https://betterstack.com/terms
servers:
- url: https://uptime.betterstack.com/api/v2
description: Better Stack Uptime API v2
- url: https://uptime.betterstack.com/api/v3
description: Better Stack Uptime API v3 (incidents)
security:
- BearerAuth: []
tags:
- name: Monitors
description: Manage uptime monitors for websites and services
paths:
/monitors:
get:
operationId: listMonitors
summary: List monitors
description: Returns a paginated list of all monitors in your account.
tags:
- Monitors
parameters:
- name: team_name
in: query
description: Filter monitors belonging to a specified team when using global API token
schema:
type: string
- name: url
in: query
description: Filter by monitor URL
schema:
type: string
- name: pronounceable_name
in: query
description: Filter by monitor pronounceable name
schema:
type: string
- name: page
in: query
description: Page number for pagination
schema:
type: integer
responses:
'200':
description: A list of monitors
content:
application/json:
schema:
$ref: '#/components/schemas/MonitorListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createMonitor
summary: Create a monitor
description: Creates a new uptime monitor.
tags:
- Monitors
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MonitorCreateRequest'
responses:
'201':
description: Monitor created
content:
application/json:
schema:
$ref: '#/components/schemas/MonitorResponse'
'422':
$ref: '#/components/responses/UnprocessableEntity'
/monitors/{id}:
get:
operationId: getMonitor
summary: Get a monitor
description: Returns a single monitor by ID.
tags:
- Monitors
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: A single monitor
content:
application/json:
schema:
$ref: '#/components/schemas/MonitorResponse'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateMonitor
summary: Update a monitor
description: Updates an existing monitor.
tags:
- Monitors
parameters:
- $ref: '#/components/parameters/Id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MonitorCreateRequest'
responses:
'200':
description: Monitor updated
content:
application/json:
schema:
$ref: '#/components/schemas/MonitorResponse'
'422':
$ref: '#/components/responses/UnprocessableEntity'
delete:
operationId: deleteMonitor
summary: Delete a monitor
description: Deletes an existing monitor.
tags:
- Monitors
parameters:
- $ref: '#/components/parameters/Id'
responses:
'204':
description: Monitor deleted
'404':
$ref: '#/components/responses/NotFound'
components:
schemas:
MonitorListResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/MonitorResource'
pagination:
$ref: '#/components/schemas/Pagination'
MonitorAttributes:
type: object
properties:
url:
type: string
format: uri
description: Website or host to monitor
pronounceable_name:
type: string
description: Human-readable name used in voice alerts
monitor_type:
type: string
enum:
- status
- keyword
- ping
- tcp
- udp
- smtp
- pop
- imap
- dns
- playwright
description: The type of check to perform
monitor_group_id:
type:
- string
- 'null'
description: Associated monitor group ID
status:
type: string
enum:
- up
- down
- validating
- paused
- pending
- maintenance
readOnly: true
last_checked_at:
type:
- string
- 'null'
format: date-time
readOnly: true
check_frequency:
type: integer
description: Check interval in seconds
request_timeout:
type: integer
description: Timeout in milliseconds (ports) or seconds (others)
recovery_period:
type: integer
description: Time in seconds required before auto-resolving an incident
confirmation_period:
type: integer
description: Delay in seconds before creating an incident
call:
type: boolean
description: Enable phone call alerts
sms:
type: boolean
description: Enable SMS alerts
email:
type: boolean
description: Enable email alerts
push:
type: boolean
description: Enable push notification alerts
critical_alert:
type: boolean
description: Enable critical iOS alerts bypassing mute
team_wait:
type: integer
description: Escalation delay in seconds
policy_id:
type:
- string
- 'null'
description: Alert policy ID
expiration_policy_id:
type:
- string
- 'null'
description: SSL/domain expiration alert policy ID
verify_ssl:
type: boolean
description: Monitor SSL certificate validity
ssl_expiration:
type:
- integer
- 'null'
description: Alert days before SSL certificate expiry
domain_expiration:
type:
- integer
- 'null'
description: Alert days before domain expiry
regions:
type: array
items:
type: string
description: Geographic regions to check from
maintenance_from:
type: string
description: Maintenance window start time (HH:MM)
maintenance_to:
type: string
description: Maintenance window end time (HH:MM)
maintenance_timezone:
type: string
description: Timezone for maintenance window
maintenance_days:
type: array
items:
type: string
description: Days of week for maintenance window
proxy_host:
type:
- string
- 'null'
description: Proxy host for check requests
proxy_port:
type:
- integer
- 'null'
description: Proxy port for check requests
request_headers:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
description: Custom HTTP request headers
request_body:
type:
- string
- 'null'
description: Custom HTTP request body
expected_status_codes:
type: array
items:
type: integer
description: HTTP status codes that indicate success
required_keyword:
type:
- string
- 'null'
description: Keyword that must be present in the response
port:
type:
- integer
- 'null'
description: Port number for TCP/UDP/SMTP/POP/IMAP checks
playwright_script:
type:
- string
- 'null'
description: Playwright script for synthetic monitoring
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
paused_at:
type:
- string
- 'null'
format: date-time
readOnly: true
ErrorResponse:
type: object
properties:
errors:
type: array
items:
type: object
properties:
title:
type: string
detail:
type: string
Pagination:
type: object
properties:
first:
type: string
format: uri
last:
type: string
format: uri
prev:
type:
- string
- 'null'
format: uri
next:
type:
- string
- 'null'
format: uri
MonitorCreateRequest:
type: object
required:
- url
properties:
url:
type: string
format: uri
pronounceable_name:
type: string
monitor_type:
type: string
enum:
- status
- keyword
- ping
- tcp
- udp
- smtp
- pop
- imap
- dns
- playwright
check_frequency:
type: integer
request_timeout:
type: integer
recovery_period:
type: integer
confirmation_period:
type: integer
call:
type: boolean
sms:
type: boolean
email:
type: boolean
push:
type: boolean
regions:
type: array
items:
type: string
verify_ssl:
type: boolean
ssl_expiration:
type: integer
domain_expiration:
type: integer
expected_status_codes:
type: array
items:
type: integer
required_keyword:
type: string
request_headers:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
request_body:
type: string
policy_id:
type: string
port:
type: integer
MonitorResponse:
type: object
properties:
data:
$ref: '#/components/schemas/MonitorResource'
MonitorResource:
type: object
properties:
id:
type: string
description: Monitor identifier
type:
type: string
enum:
- monitor
attributes:
$ref: '#/components/schemas/MonitorAttributes'
responses:
Unauthorized:
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
UnprocessableEntity:
description: Validation errors
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
parameters:
Id:
name: id
in: path
required: true
description: Resource identifier
schema:
type: string
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: Bearer token obtained from Better Stack account settings