Using UpHeron from an AI agent
UpHeron is built to be used by agents as well as people. An agent can find out what UpHeron does, check whether a site is up, add monitors, and pay for them, without a human filling in forms.
Discovery
| Resource | What it is |
|---|---|
/auth.md |
How an agent gets API access by itself, for its user or on its own (auth.md) |
/mcp |
MCP server: every operation as a tool, with MPP payments |
/llms.txt |
An index of the documentation for language models |
/llms-full.txt |
The whole documentation as one Markdown file |
/openapi.json |
OpenAPI 3.1 description of the API, with MPP payment offers (x-payment-info) on the paid operations and service details (x-service-info) |
Any page with Accept: text/markdown |
The page as Markdown instead of HTML |
Any page URL plus .md |
The same, for clients that cannot set headers: /docs/agents.md |
curl -H "Accept: text/markdown" https://upheron.com/docs/payments
Markdown responses have Content-Type: text/markdown; charset=utf-8, an x-markdown-tokens header with an estimate of their length in tokens, and Vary: Accept.
Getting access
- Your user gives you a token. They create one in Settings → API tokens; send it in
X-API-Key. - You get access yourself with auth.md. Register at
POST https://upheron.com/agent/identitywith your user's email (service_auth); they open a link and type the code you show them, and you receive access tokens for their workspace. Or register asanonymousto act alone in an agent workspace of your own that your user can claim later. Follow/auth.mdstep by step. - You pay without an account.
POST /monitorswithout a token answers402; paying creates an agent workspace and returns its key. See Payments.
Recommended workflow
- Check your account.
GET /api/v1/accountreturns free plan slots, credit and current prices.GET /api/v1/locationslists the location codes you can use. - Quote before creating.
POST /api/v1/monitors/quotewith the monitor you want returnsamount_due_cents. If it is0, creating is free (a plan slot or credit covers it). - Create with an idempotency key.
POST /api/v1/monitorswithIdempotency-Key: <uuid>. If it answers402, let your MPP client pay; keep the same idempotency key on any retry of your own. - Read status.
GET /api/v1/monitorsreturns every monitor'scurrent_status. Poll no faster than the monitor'sinterval_seconds. - Look closer when something is wrong.
GET /api/v1/monitors/{id}has uptime for 24 hours, 7 days and 30 days, recent results with errors, and incidents.GET /api/v1/monitors/{id}/resultsreturns up to 500 results, andGET /api/v1/monitors/{id}/uptime?from=2026-01-01&to=2026-03-31daily uptime for any range: it is kept for as long as the monitor exists. - Watch the website's software (Pro plans). Set
"vulnerability_alerts": trueon a website monitor. If you can see the server, send what it runs withPOST /api/v1/monitors/{id}/software/import: a lockfile or Dockerfile, or a list with onename versionper line fromcat /etc/os-release,nginx -v,php -vand the like.GET /api/v1/monitors/{id}/vulnerabilitieslists what affects it and the versions that fix it. Software lists has the format.
Reading status
current_status |
Meaning |
|---|---|
pending |
Not checked yet |
up |
The latest checks passed |
down |
The latest checks failed at enough locations (see confirmation_threshold) |
degraded |
Responding, but outside a threshold such as latency |
An incident opens after failure_threshold failed checks in a row (by default the first) and resolves after recovery_threshold successes. A monitor with "status": "paused" is not being checked; one with "billing_state": "overdue" was paused because its monthly renewal was not paid.
Instructions for your agent
Paste this into your agent's instructions or tool description, and give it a token in UPTIME_MONITOR_API_KEY:
You can monitor websites and APIs with UpHeron (https://upheron.com).
- API base: https://upheron.com/api/v1 ; send the header X-API-Key: $UPTIME_MONITOR_API_KEY on every request.
- Docs as Markdown: https://upheron.com/llms-full.txt ; API schema: https://upheron.com/openapi.json
- Reading is free: GET /monitors (all statuses), GET /monitors/{id} (uptime, results, incidents), GET /monitors/{id}/uptime (daily uptime, ?from=&to=), GET /incidents.
- To add a monitor: POST /monitors/quote first; then POST /monitors with an Idempotency-Key header.
Body: {"name": "...", "url": "https://...", "interval_seconds": 300, "locations": ["<code from GET /locations>"]}
- If a request returns 402 Payment Required, it costs money: tell the user the amount_due and ask before paying,
unless they have already approved a budget. Monitors cost $0.01 per location per month, or $0.10 per location for life.
- On 429, wait Retry-After seconds. Never poll a monitor faster than its interval_seconds.
- Pro plans: with "vulnerability_alerts": true on a website monitor, POST /monitors/{id}/software/import {"content": "<lockfile, Dockerfile or one 'name version' per line>"}
tells it what the server runs; GET /monitors/{id}/vulnerabilities lists what affects it.
Asking before paying is a good default. Approve a budget once (for example "up to $1 for monitors this week") so the agent can act alone within it.
Example prompts
- "Is shop.example.com up right now, and has it had any incidents this week?"
- "Monitor https://api.example.com/health every minute from Frankfurt and New York, and email [email protected] when it goes down."
- "Add lifetime monitors for these five client websites; you can spend up to $0.50."
- "Turn on vulnerability alerts for shop.example.com and import this server's composer.lock and the output of
nginx -vandphp -v."
No account? Pay as you go
An agent with an MPP wallet can create a monitor without any account: send POST /api/v1/monitors without X-API-Key, pay the 402, and store the api_key from the response. See Payments → Without an account.