Better Stack · OpenAPI Overlay 1.0.0
API Evangelist enhancements for Better Stack Uptime Heartbeats API
10 actions
10 updates
documentation
extends
betterstack-heartbeats-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for Better Stack's API. It is a proposal applied on top of the contract, not a document Better Stack publishes.
What the actions change
401404descriptionschemax-provenancex-conventionsx-error-catalogx-lifecycle
Targets 10
$.info
$.components.parameters.PerPage
$.components.parameters.Page
$.paths['/heartbeats'].get.responses
$.paths['/heartbeats'].post.responses
$.paths['/heartbeats/{id}'].get.responses
$.paths['/heartbeats/{id}'].patch.responses
$.paths['/heartbeats/{id}'].delete.responses
$.paths['/heartbeats/{id}/availability'].get.responses
$.components.schemas
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements for Better Stack Uptime Heartbeats API
version: 1.0.0
extends: betterstack-heartbeats-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['/heartbeats'].get.responses
description: Add the error responses observed live for listHeartbeats; 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['/heartbeats'].post.responses
description: Add the error responses observed live for createHeartbeat; 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['/heartbeats/{id}'].get.responses
description: Add the error responses observed live for getHeartbeat; 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['/heartbeats/{id}'].patch.responses
description: Add the error responses observed live for updateHeartbeat; 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['/heartbeats/{id}'].delete.responses
description: Add the error responses observed live for deleteHeartbeat; 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['/heartbeats/{id}/availability'].get.responses
description: Add the error responses observed live for getHeartbeatAvailability; 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.