Better Stack · OpenAPI Overlay 1.0.0
API Evangelist enhancements for Better Stack Uptime Heartbeats Status Pages API
10 actions
10 updates
documentation
extends
betterstack-status-pages-api-openapi.yml
Derived by API Evangelist
Built from the contracts Better Stack publishes. Better Stack did not publish this file.
What the actions change
401404descriptionschemax-provenancex-conventionsx-error-catalogx-lifecycle
Targets 10
$.info
$.components.parameters.PerPage
$.components.parameters.Page
$.paths['/status-pages'].get.responses
$.paths['/status-pages'].post.responses
$.paths['/status-pages/{id}'].get.responses
$.paths['/status-pages/{id}'].patch.responses
$.paths['/status-pages/{id}'].delete.responses
$.paths['/status-pages/group/{id}'].get.responses
$.components.schemas
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements for Better Stack Uptime Heartbeats Status Pages API
version: 1.0.0
extends: betterstack-status-pages-api-openapi.yml
x-generated: '2026-09-04'
x-method: generated
x-source: Better Stack public documentation and live unauthenticated probes, 2026-09-04. Enhancements
only; the underlying OpenAPI is not mutated.
actions:
- target: $.info
description: Record what API Evangelist verified on the wire and in the docs that the reconstructed
contract does not state.
update:
x-provenance:
contract-source: reconstruction from public documentation by API Evangelist; Better Stack publishes
no OpenAPI
verified: '2026-09-04'
verified-against:
- https://betterstack.com/docs/uptime/api
- https://betterstack.com/docs/uptime/api/pagination/
- live unauthenticated probes of https://uptime.betterstack.com/api/v2
x-conventions: conventions/betterstack-conventions.yml
x-error-catalog: errors/betterstack-problem-types.yml
x-lifecycle: lifecycle/betterstack-lifecycle.yml
x-data-model: data-model/betterstack-data-model.yml
x-idempotency:
coverage: none
note: No Idempotency-Key or equivalent replay protection is documented on any Better Stack write
operation. A retried create produces a duplicate.
x-rate-limits:
documented: false
note: Better Stack publishes no rate limits and returned no RateLimit-*, X-RateLimit-* or Retry-After
header on any probed response.
x-mcp-server:
url: https://mcp.betterstack.com
note: Better Stack ships a first-party remote MCP server whose tool surface is far wider than this
REST contract. See mcp/betterstack-mcp.yml and mcp/betterstack-tool-crosswalk.yml.
- target: $.components.parameters.PerPage
description: Correct the per_page bound. The reconstructed spec caps per_page at 50; Better Stack's
pagination documentation states the default is 50 and the MAXIMUM is 250.
update:
description: Number of resources per page. Default 50, maximum 250.
schema:
type: integer
minimum: 1
maximum: 250
default: 50
- target: $.components.parameters.Page
description: Document the page parameter as Better Stack states it.
update:
description: Page to retrieve, starting from 1.
schema:
type: integer
minimum: 1
default: 1
- target: $.paths['/status-pages'].get.responses
description: Add the error responses observed live for listStatusPages; the reconstructed contract declares
success responses only, so a generated client has no error type.
update:
'401':
description: Invalid or missing Team API token. Observed live 2026-09-04. The same body is returned
for a missing credential and a wrong one.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: 'Invalid Team API token. How to find your Team API token: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/#get-an-uptime-api-token'
'404':
description: Endpoint or resource not found. Routing 404s are returned before authentication is
evaluated.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: Endpoint GET /api/v2/nonexistent-xyz does not exist.
see_docs: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/
- target: $.paths['/status-pages'].post.responses
description: Add the error responses observed live for createStatusPage; the reconstructed contract
declares success responses only, so a generated client has no error type.
update:
'401':
description: Invalid or missing Team API token. Observed live 2026-09-04. The same body is returned
for a missing credential and a wrong one.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: 'Invalid Team API token. How to find your Team API token: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/#get-an-uptime-api-token'
'404':
description: Endpoint or resource not found. Routing 404s are returned before authentication is
evaluated.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: Endpoint GET /api/v2/nonexistent-xyz does not exist.
see_docs: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/
- target: $.paths['/status-pages/{id}'].get.responses
description: Add the error responses observed live for getStatusPage; the reconstructed contract declares
success responses only, so a generated client has no error type.
update:
'401':
description: Invalid or missing Team API token. Observed live 2026-09-04. The same body is returned
for a missing credential and a wrong one.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: 'Invalid Team API token. How to find your Team API token: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/#get-an-uptime-api-token'
'404':
description: Endpoint or resource not found. Routing 404s are returned before authentication is
evaluated.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: Endpoint GET /api/v2/nonexistent-xyz does not exist.
see_docs: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/
- target: $.paths['/status-pages/{id}'].patch.responses
description: Add the error responses observed live for updateStatusPage; the reconstructed contract
declares success responses only, so a generated client has no error type.
update:
'401':
description: Invalid or missing Team API token. Observed live 2026-09-04. The same body is returned
for a missing credential and a wrong one.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: 'Invalid Team API token. How to find your Team API token: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/#get-an-uptime-api-token'
'404':
description: Endpoint or resource not found. Routing 404s are returned before authentication is
evaluated.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: Endpoint GET /api/v2/nonexistent-xyz does not exist.
see_docs: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/
- target: $.paths['/status-pages/{id}'].delete.responses
description: Add the error responses observed live for deleteStatusPage; the reconstructed contract
declares success responses only, so a generated client has no error type.
update:
'401':
description: Invalid or missing Team API token. Observed live 2026-09-04. The same body is returned
for a missing credential and a wrong one.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: 'Invalid Team API token. How to find your Team API token: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/#get-an-uptime-api-token'
'404':
description: Endpoint or resource not found. Routing 404s are returned before authentication is
evaluated.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: Endpoint GET /api/v2/nonexistent-xyz does not exist.
see_docs: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/
- target: $.paths['/status-pages/group/{id}'].get.responses
description: Add the error responses observed live for listStatusPagesInGroup; the reconstructed contract
declares success responses only, so a generated client has no error type.
update:
'401':
description: Invalid or missing Team API token. Observed live 2026-09-04. The same body is returned
for a missing credential and a wrong one.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: 'Invalid Team API token. How to find your Team API token: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/#get-an-uptime-api-token'
'404':
description: Endpoint or resource not found. Routing 404s are returned before authentication is
evaluated.
content:
application/json:
schema:
$ref: '#/components/schemas/BetterStackError'
example:
errors: Endpoint GET /api/v2/nonexistent-xyz does not exist.
see_docs: https://betterstack.com/docs/uptime/api/getting-started-with-uptime-api/
- target: $.components.schemas
description: Declare the proprietary error envelope observed on the wire. It is NOT the JSON:API errors
array and NOT RFC 9457 problem+json, despite Better Stack stating the API follows JSON:API.
update:
BetterStackError:
type: object
description: Better Stack's error envelope. `errors` is a human-readable STRING, not an array of
error objects, so there is no machine-readable error code to branch on.
required:
- errors
properties:
errors:
type: string
description: Human-readable failure reason.
see_docs:
type: string
format: uri
description: Documentation URL for the failing surface. Present on 404 responses.
Work with this as data
Every overlay here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for openapi overlays
4 MCP tools reach this
find_overlaysBrowse and filter every overlay in the catalog.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.
Call it yourself
curl for this page
This overlay
curl "https://apis.io/api/v1/overlays/betterstack-status-pages-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API 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.