Everything an AI agent can do with the Better Stack API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints28
API versionv2
Last updated23 June 2026
Orientation

How the Better Stack API works.

The Better Stack API is how an app or AI agent works with a Better Stack team: listing monitors, creating an incident that pages the on-call person, acknowledging or resolving an active incident, or managing heartbeats and status pages. Access is granted through a team-scoped API token sent as a bearer token, and that token can reach every resource the team owns because Better Stack does not split it into per-endpoint permissions. The API can push events to a configured URL when an incident or monitor changes, so an integration learns about activity without polling.

28Endpoints
8Capability groups
13Read
15Write
0Permissions
Authentication
Better Stack authenticates Uptime API calls with a bearer token sent in the Authorization header, following the Bearer Authentication standard. The token is team-scoped: it manages the Uptime resources of one team. A global token can target a specific team by passing a team_name query parameter on list endpoints.
Permissions
A Better Stack Uptime API token has no granular per-endpoint scopes. It is a single team-level credential that can read and write every Uptime resource the team owns, so any agent holding the raw token can list monitors, create incidents, and delete resources alike. Narrowing what an agent can do is done outside the token, by a gateway in front of the API.
Versioning
Better Stack versions the Uptime API in the URL path. Monitors, heartbeats, monitor groups, on-call schedules, escalation policy listing, and status pages are served under v2, while incidents, escalation policies, and metadata are served under v3. The two version segments coexist; a call targets a fixed version by its path.
Data model
The Uptime API follows the JSON:API specification. A response wraps each resource in a data object carrying an id, a type, and an attributes block, and a list response adds a pagination object with first, last, prev, and next URLs. A validation failure returns an errors object keyed by field, such as base, with an array of messages.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Better Stack determines what it can reach. There is a route for making calls with an API token, a route for receiving events when something changes, and a hosted server that exposes Better Stack tools to agents, and each is governed by the token behind it.

Ways to connect

REST API

The Uptime API is a JSON:API-style REST API at https://uptime.betterstack.com, with resources under api/v2 (monitors, heartbeats, on-call, status pages) and api/v3 (incidents, escalation policies, metadata). A call authenticates with a team-scoped bearer token, and a list response carries a pagination object with first, last, prev, and next URLs.

Best forConnecting an app or AI agent to Better Stack Uptime.
Governed byThe team-scoped API token.
Docs ↗

MCP server

A hosted Model Context Protocol server at https://mcp.betterstack.com exposes Better Stack tools to AI assistants. It authenticates with OAuth, which prompts a browser sign-in, or with an API token for clients without OAuth support. Uptime tools cover listing monitors and heartbeats, getting monitor details and availability, and creating, acknowledging, escalating, and resolving incidents, plus on-call schedules, escalation policies, and status pages. Telemetry and error-tracking tools cover querying logs and traces, building dashboards, and analyzing exceptions.

Best forConnecting an AI agent to Better Stack through MCP.
Governed byThe OAuth grant or the API token.
Docs ↗

Outgoing webhooks

Better Stack POSTs to a URL configured under Uptime, Integrations, Exporting data, when an incident or monitor changes. Incident events fire on created, acknowledged, resolved, reopened, and commented; monitor events fire on created, updated, paused, unpaused, and deleted; an on-call event fires when the on-call contact changes. A comment event includes a top-level comment field with content and author.

Best forReceiving Better Stack events at an app or AI agent.
Governed byThe URL configured for the webhook.
Docs ↗
Authentication

Uptime API token

A team-scoped token created in the Better Stack dashboard, sent as a bearer token in the Authorization header. It manages one team's Uptime resources and has no granular per-endpoint scopes, so it can read and write every Uptime resource the team owns. A global token can target a specific team by passing team_name on list endpoints.

TokenBearer API token (team-scoped)
Best forServer-side calls to the Uptime API.
Docs ↗

MCP OAuth

The hosted MCP server supports OAuth, which prompts a browser sign-in so an MCP client connects without configuring a token. Clients that do not support OAuth pass an API token in the Authorization header instead.

TokenOAuth grant (browser sign-in) or API token
Best forConnecting an AI assistant through the Better Stack MCP server.
Docs ↗
Capability map

What an AI agent can do in Better Stack.

The Better Stack Uptime API is split into areas an agent can act on, like monitors, heartbeats, incidents, on-call schedules, escalation policies, and status pages. Each area has its own methods, and a write can create a real incident that pages a person or pause a monitor that watches a live service.

Endpoint reference

Every Better Stack API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Monitors

Methods for listing and managing uptime monitors and their availability.6

The team-scoped token reads every monitor the team owns; Better Stack has no read-only or per-resource scope.

Acts onmonitor
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; reachable by any token for the team that owns the monitor.

Acts onmonitor
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

monitor_type accepts values like status, keyword, ping, tcp, dns, and playwright. A 422 returns an errors object keyed by field.

Acts onmonitor
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventmonitor.created
Rate limitStandard limits apply

Pausing or unpausing a monitor is done through this update method.

Acts onmonitor
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventmonitor.updated
Rate limitStandard limits apply

Irreversible; the monitor stops watching the service.

Acts onmonitor
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventmonitor.deleted
Rate limitStandard limits apply

Read-only reporting data.

Acts onmonitor
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Monitor groups

Methods for organizing monitors into groups.2

Read-only.

Acts onmonitor_group
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Groups monitors for organization on dashboards and status pages.

Acts onmonitor_group
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Heartbeats

Methods for managing heartbeats that watch scheduled jobs and cron tasks.5

Read-only.

Acts onheartbeat
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onheartbeat
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The job pings the returned heartbeat URL with HEAD, GET, or POST; a missed period opens an incident.

Acts onheartbeat
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Changes the expected period or alerting on a heartbeat.

Acts onheartbeat
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Irreversible; the job is no longer watched.

Acts onheartbeat
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Incidents

Methods for listing, creating, and responding to incidents.6

Read-only. Pages with a default of 10 and a maximum of 50 per page.

Acts onincident
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onincident
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Returns 201 with notification flags for call, sms, email, and push; pages whoever the escalation policy names.

Acts onincident
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventincident.created
Rate limitStandard limits apply

Stops further escalation for the incident.

Acts onincident
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventincident.acknowledged
Rate limitStandard limits apply

Closes the incident; it can later be reopened.

Acts onincident
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventincident.resolved
Rate limitStandard limits apply

Irreversible; removes the incident record.

Acts onincident
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

On-call schedules

Methods for reading and managing on-call schedules.2

Read-only. Returns each schedule's name, default_calendar flag, and related on-call users.

Acts onon_call_calendar
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onon_call_calendar
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Escalation policies

Methods for reading and managing escalation policies.2

Read-only. A policy defines who is alerted, and in what order, until an incident is acknowledged.

Acts onpolicy
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Defines the alerting steps and notification channels for incidents.

Acts onpolicy
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Status pages

Methods for managing public status pages.3

Read-only.

Acts onstatus_page
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A status page is publicly visible once published.

Acts onstatus_page
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Controls what a public status page displays.

Acts onstatus_page_resource
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Metadata

Methods for reading and writing custom key-value metadata on resources.2

owner_type accepts Monitor, Heartbeat, Incident, WebhookIntegration, EmailIntegration, IncomingWebhook, or CallRouting; omitting owner_id returns metadata for all resources.

Acts onmetadata
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Writes a key-value pair against an owner_type and owner_id; values can be typed, such as a schedule reference.

Acts onmetadata
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
No endpoints match those filters.
Webhooks

Webhook events.

Better Stack can notify an app when something happens in a team, like an incident being created, acknowledged, or resolved, or a monitor being paused. It sends a POST request to a URL configured in the dashboard, so an integration learns about activity without polling.

EventWhat it signalsTriggered by
Incident createdA POST is sent when a new incident is created, the point where the on-call person is paged./api/v3/incidents
Incident acknowledgedA POST is sent when an ongoing incident is acknowledged, signaling someone is responding./api/v3/incidents/{id}/acknowledge
Incident resolvedA POST is sent when an active incident is resolved./api/v3/incidents/{id}/resolve
Monitor createdA POST is sent when a new monitor is created./api/v2/monitors
Monitor updated, paused, or unpausedA POST is sent when a monitor is updated, paused, or unpaused./api/v2/monitors/{id}
Monitor deletedA POST is sent when a monitor is deleted./api/v2/monitors/{id}
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Better Stack paginates its list endpoints with a page number and a page size, and does not publish a numeric request rate in its developer docs.

Request rate

Better Stack does not publish a numeric request rate (requests per second or per minute) for the Uptime API in its developer documentation. The getting-started and reference pages describe authentication, pagination, and the JSON:API response shape, but state no per-token quota, no rate-limit response headers, and no documented 429 behavior. An integration should apply its own backoff and retry rather than rely on a stated ceiling.

Pagination

List endpoints page with two query parameters: page sets the page number starting at 1, and per_page sets the page size, which defaults to 50 and may go up to 250. The response includes a pagination object with first, last, prev, and next URLs, where prev is null on the first page and next is null on the last. The incidents endpoint pages with a smaller default of 10 and a maximum of 50.

Request size

A list page returns up to per_page items, capped at 250 for most resources and 50 for incidents. A monitor requires a monitor_type and, for most types, a url. Heartbeat ping requests to the public heartbeat URL accept HEAD, GET, or POST.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
401unauthorizedNo valid token was provided, or it is not authorized for this team's resources.Send a valid team-scoped token in the Authorization header as Bearer $TOKEN, and confirm it belongs to the right team.
404not_foundThe requested resource does not exist or is not visible to this token, for example an id that belongs to another team.Verify the resource id and confirm the token's team owns it.
422validation_errorThe request was rejected by validation. The body returns an errors object keyed by field, such as base, with an array of messages like 'URL is invalid.'Read the messages under each key in the errors object, fix the parameters, and resend.
Versioning & freshness

Version history.

Better Stack versions its Uptime API in the path. Monitors, heartbeats, on-call schedules, and status pages sit on v2, while incidents, escalation policies, and metadata sit on v3.

Version history

What changed, and when

Latest versionv2
v3
Uptime API v3 (incidents, escalation policies, metadata)

The newer endpoints sit on v3 in the path. Incidents moved to v3 with richer filtering, by resolved and acknowledged state and by metadata, and escalation policies and metadata are served under v3. The incidents endpoint pages with a default of 10 and a maximum of 50.

What changed
  • Incidents served under api/v3/incidents with create, acknowledge, resolve, reopen, and escalate actions.
  • Escalation policies served under api/v3/policies.
  • Metadata served under api/v3/metadata, attachable to monitors, heartbeats, incidents, and integrations.
v2Current version
Uptime API v2 (monitors, heartbeats, on-call, status pages)

The core Uptime resources are served under v2 in the path: monitors and monitor groups, heartbeats and heartbeat groups, on-call schedules, and status pages and their resources. List endpoints follow the JSON:API shape with page and per_page pagination, defaulting to 50 and up to 250 per page.

What changed
  • Monitors, monitor groups, heartbeats, and heartbeat groups served under api/v2.
  • On-call schedules served under api/v2/on-calls.
  • Status pages and status page resources served under api/v2/status-pages.

Pin to the version segment in each path; v2 and v3 endpoints coexist.

Better Stack Uptime API docs ↗
Questions

Better Stack API, answered.

How does an API token authenticate, and what can it reach?+
Calls send the token as a bearer token in the Authorization header, written Authorization: Bearer $TOKEN. The token is team-scoped and manages that team's Uptime resources. It is not split into per-endpoint scopes, so the same token that lists monitors can also create incidents and delete resources.
Can a token be limited to read-only, or to one resource type?+
Not within Better Stack. The Uptime API token is a single team-level credential with no granular permission levels, so it can read and write every Uptime resource the team owns. Restricting an agent to read-only, or to monitors but not incidents, has to be enforced by a gateway sitting in front of the API.
Why are some endpoints on v2 and others on v3?+
Better Stack carries the version in the path and has not migrated every resource to the same number. Monitors, heartbeats, on-call schedules, and status pages live under api/v2, while incidents, escalation policies, and metadata live under api/v3. Each call uses the version segment shown for that endpoint.
How do API lists paginate?+
A list call accepts page and per_page query parameters, with per_page defaulting to 50 and reaching up to 250 for most resources. The response carries a pagination object with first, last, prev, and next URLs, so an integration follows next until it is null. The incidents endpoint defaults to 10 per page and caps at 50.
How does an integration receive events instead of polling?+
Better Stack sends outgoing webhooks: a POST request to a URL configured under Uptime, Integrations, when an incident is created, acknowledged, resolved, reopened, or commented on, or when a monitor is created, updated, paused, unpaused, or deleted. A comment event includes a top-level comment field with the content and author.
Does Better Stack offer an MCP server for AI agents?+
Yes. Better Stack runs a hosted Model Context Protocol server at mcp.betterstack.com that exposes Uptime and Telemetry tools to AI assistants. It authenticates with OAuth, which prompts a browser sign-in, or with an API token for clients that do not support OAuth.
Related

More developer API guides for agents

What is Bollard AI?

Control what every AI agent can do in Better Stack.

Bollard AI sits between a team's AI agents and Better Stack. Grant each agent exactly the access it needs, read or write, area by area, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Better Stack token.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Better Stack
On-Call Agent
View monitors ResourceOffReadFull use
Acknowledge incidents ActionOffReadFull use
Delete monitors ActionOffReadFull use
Status pages ResourceOffReadFull use
Per-agent access, set in Bollard AI, not in Better Stack