AGENT REFERENCE

How UpPage behaves for agents.

The REST API and the MCP server follow the same rules. Every write can be retried safely and previewed first, and every error tells you what to do next.

Errors

Errors have the shape { code, message, fix, next_tool, docs_url }. Act on fix, and call next_tool when it is set.

CodeHTTPFixNext tool
INVALID_INPUT400Correct the field named in the message to match the tool or endpoint schema, then retry.—
UNAUTHENTICATED401Reconnect the UpPage MCP server (OAuth sign-in) or supply a current, unrevoked scoped token from Settings → API tokens.—
NOT_FOUND404IDs belong to one account. List the resources this credential can see and use an ID from that list.list_monitors
FORBIDDEN403This credential lacks the scope or role this operation needs. Ask the owner for a token with the scope listed in the tool description.—
ENTITLEMENT_EXCEEDED422The account plan does not allow this. Choose a value the plan allows, or ask the owner to upgrade in Settings → Billing.—
CONFLICT409The resource changed or this transition is not allowed from its current state. Read it again, then retry against the current state.list_monitors
RATE_LIMITED429Wait 60 seconds, then retry with the same idempotency_key so the retry cannot apply twice.—
IDEMPOTENCY_KEY_REUSED409This idempotency_key was used in the last 24 hours with different arguments. Resend the original arguments exactly, or use a new key for a new request.—
MANAGED_BY_REPO409This resource is managed by uppage.yml in the repository. Edit the file and apply it (uppage apply, or apply_config); dashboard and MCP edits are refused so the repository stays the source of truth.plan_config
DRY_RUN_UNSUPPORTED400This endpoint cannot preview its change. Call it without dry_run, or use a tool that supports dry_run.—
UNAVAILABLE503A server-side dependency is unavailable. Retry later with the same idempotency_key.—

Idempotency

Every write accepts an idempotency key: the idempotency_key argument on MCP tools, or the Idempotency-Key header on REST, where it is required. For 24 hours, the same key with the same arguments returns the first result and doesn’t act again. The same key with different arguments fails with IDEMPOTENCY_KEY_REUSED. Without a key, MCP tools scope retries to the JSON-RPC request.

Dry runs

Pass dry_run: true to any MCP write tool, or send UpPage-Dry-Run: true on REST. The response is { dryRun: true, changes, audit, value }: the exact resources that would be created, updated or deleted, and the audit events that would be written. Nothing is stored, and no one-time URL is minted. Writes that can’t preview refuse with DRY_RUN_UNSUPPORTED before doing anything.

Pending monitors

New monitors start pending. Until their first successful ping, passing check or webhook event, they don’t alert, open incidents, write history or appear on the public page. They arm themselves automatically, so create them before the code ships. list_monitors explains any monitor that is still pending, and sets nudge after seven days.

Monitoring as code

Describe every monitor in uppage.yml in your repository (JSON Schema). plan_config shows what would change; apply_config makes the page match the file in one atomic, idempotent change. Monitors removed from the file are deleted only with prune.

Monitors the file manages are refused for edits from the dashboard or MCP (MANAGED_BY_REPO), so the repository stays the source of truth. Status observations and pausing are always allowed. With settings.drift: record, edits are allowed instead: the next plan reports them and the next apply puts the file’s values back.

To apply on merge with no stored token, allow the workflow once with bind_repository. It then applies with its GitHub identity. Pull-request runs never get UpPage access; their plan compares the file with the base branch’s copy.

Signing in

Use OAuth sign-in from an MCP client that supports it, or a scoped API token from Settings → API tokens. A revoked token stops working on its next call.

Scopes

ScopeGrants
pages:read / pages:writeRead or change the status page, its publication settings and website checks’ findings.
components:read / components:writeRead or change services and record status observations.
heartbeats:read / heartbeats:writeRead or change heartbeats and website/MCP checks.
incidents:read / incidents:writeRead or change incidents and maintenance windows.

Each tool’s description names the scopes it needs. incidents:* doesn’t include incidents:publish: give it explicitly to a token that may publish incident text without approval.

MCP toolNeeds
create_status_pagepages:write
get_status_pagepages:read
update_status_pagepages:write
get_current_statuspages:read
get_badge_markdownpages:read
list_componentscomponents:read
add_componentcomponents:write
update_componentcomponents:write
set_component_statuscomponents:write
list_component_groupscomponents:read
create_component_groupcomponents:write
update_component_groupcomponents:write
remove_component_groupcomponents:write
add_dependencycomponents:write
list_dependenciescomponents:read
create_monitorcomponents:write and heartbeats:write
list_monitorspages:read
update_monitorheartbeats:write
apply_fixheartbeats:write
create_heartbeatheartbeats:write
update_heartbeatheartbeats:write
rotate_heartbeatheartbeats:write
test_pingheartbeats:write
get_heartbeatheartbeats:read
list_heartbeatsheartbeats:read
get_heartbeat_snippetheartbeats:read
plan_monitorspages:read
apply_planpages:write, components:write, heartbeats:write
plan_configpages:read and components:read
apply_configpages:write, components:write, heartbeats:write
bind_repositorypages:write
create_incidentincidents:write (+ incidents:publish for tokens)
list_incidentsincidents:read
update_incidentincidents:write (+ incidents:publish for tokens)
resolve_incidentincidents:write (+ incidents:publish for tokens)
draft_incident_updateincidents:write
get_incident_contextincidents:read
get_component_contextcomponents:read
list_eventspages:read
record_deploycomponents:write
update_remediationincidents:write
list_audit_eventspages:read
list_undoablepages:read
undo_changepages:write, components:write, heartbeats:write
start_maintenanceincidents:write
end_maintenanceincidents:write

Test mode and undo

Test tokens (st_test_…, created by the owner) work on a sandbox account with the same plan, whose pages are never public and whose alerts are never delivered. Configuration changes made with a token can be undone for 24 hours with list_undoable and undo_change. The audit log (list_audit_events, exportable as CSV) shows each agent change with its client.

Limits

The API and MCP share a per-account rate limit, 240 requests a minute by default. Plan limits (check intervals, monitor counts) apply the same way they do in the dashboard.

Attribution

Writes made with a token record the client that made them (its User-Agent, or the UpPage-Client header) and an optional UpPage-Session ID in the audit log.