For AI agents & developers

Quick Monitor Setup for AI agents

Your AI agent sets up UptimeRobot for you in seconds, no signup, no dashboard, no config. You just provide the email where you want to receive downtime notifications. Free, forever.

50 monitors, free forever 5-minute checks Real-time alerts when a site goes down No human registration, the agent sets it up

Normally, monitoring means signing up, logging into a dashboard, and configuring each monitor by hand. With agent setup, your AI assistant does all of it for you. It's the same UptimeRobot free plan that 3.3M+ users trust: 50 monitors, 5-minute checks, free forever, no credit card.

The one thing the owner provides is their email. That's where every down and up alert is delivered, so use an inbox they actually check.

Your AI agent does steps 1 to 4. You only do step 5.

1
Request a proof-of-work challenge
AI agent
2
Solve the proof-of-work puzzle
AI agent
3
Submit the monitor request
AI agent
4
Tell the user to check their inbox
AI agent
5
Owner clicks & confirms by email
You

Base URL

All agent-monitor endpoints are served from a single host.

https://api.uptimerobot.com

How to create a monitor

Five steps. The agent performs steps 1-4; the human owner performs step 5 from their inbox.

Step 1: Request a proof-of-work challenge

GET /agentic/agent-monitor/challenge?email=USER_EMAIL&url=https://example.com
A bare domain works, https:// is assumed when you omit the scheme, so example.com becomes https://example.com and www.example.com becomes https://www.example.com (the www. is not stripped). Pass an explicit http:// only if you specifically need plain HTTP. The same applies to the submit body and the browser deep-link below.

Returns JSON:

json
{ "nonce": "<hex>", "timestamp": <ms>, "difficulty": <bits>, "signature": "<hex>" }
! The difficulty value is returned by the server at challenge time. Do not hardcode it. Use the value from the response.

Step 2: Solve the proof-of-work puzzle

Find a counter value such that SHA-256(nonce|counter) starts with difficulty leading zero bits. The hash input is the string "<nonce>|<counter>" (pipe-separated, no spaces).

Python
import hashlib

# nonce and difficulty come from the challenge response
counter = 0
while True:
    h = hashlib.sha256(f"{nonce}|{counter}".encode()).digest()
    leading_zeros = 0
    for byte in h:
        if byte == 0:
            leading_zeros += 8
        else:
            leading_zeros += 8 - byte.bit_length()
            break
    if leading_zeros >= difficulty:
        break
    counter += 1
Node.js / TypeScript
import { createHash } from "node:crypto";

// nonce and difficulty come from the challenge response
let counter = 0;
while (true) {
  const h = createHash("sha256")
    .update(`${nonce}|${counter}`)
    .digest();
  let zeros = 0;
  for (const byte of h) {
    if (byte === 0) { zeros += 8; }
    else { zeros += 8 - Math.floor(Math.log2(byte)) - 1; break; }
  }
  if (zeros >= difficulty) break;
  counter++;
}

Step 3: Submit the monitor request

POST /agentic/agent-monitor
HTTP · application/json
POST /agentic/agent-monitor
Content-Type: application/json

{
  "email": "user@example.com",
  "url": "https://example.com",
  "nonce": "<from challenge>",
  "timestamp": <from challenge>,
  "counter": <solution>,
  "signature": "<from challenge>"
}

Response (all submissions return the same shape):

HTTP 200
HTTP 200 { "status": "ok", "message": "...", "help": "..." }

Exception: invalid proof-of-work returns HTTP 400:

HTTP 400
HTTP 400 { "status": "error", "code": "INVALID_PROOF_OF_WORK" }

Step 4: Tell the user to check their inbox

"Check your inbox for an activation email from UptimeRobot. Click the link to activate your monitor."

Step 5: Owner clicks the activation email and confirms

GET /agentic/agent-monitor/activate?token=<token>

UptimeRobot sends an activation email to the submitted address. The owner clicks the link, which renders a confirmation page. The GET request alone does not complete activation, it only displays the confirm button.

POST /agentic/agent-monitor/activate?token=<token>

The owner clicks the "Activate" button on the confirmation page, which issues a POST to the same endpoint. This is the request that creates the account and monitor. No account or monitor is created until this POST succeeds.


Deep-link (browser-based flow)


Response contract

How each endpoint signals success, rejection, and failure.

POST /agentic/agent-monitor

All request-handling rejections (invalid email, invalid URL, rate-limited, deduplicated, feature off) return HTTP 200 with the same message body as the success response. Only proof-of-work failure returns HTTP 400. This uniform-200 design prevents user-state enumeration.

GET and POST /agentic/agent-monitor/activate

The browser GET renders the confirm page for a valid token. For an unknown, expired, or already-consumed token (or a feature-off state) it redirects (HTTP 302) to a friendly page such as /quick-start/invalid, it never shows a raw status code to the owner. The confirm button issues a POST, which returns HTTP 409 for those same token states so the page can render the correct message. Infrastructure errors on any endpoint return HTTP 503.

Status Endpoint Meaning
200 POST /agentic/agent-monitor Accepted, or silently rejected (same body). Tell the user to check their inbox.
400 POST /agentic/agent-monitor Invalid proof-of-work. Re-request a fresh challenge and solve again.
200 GET / POST /agentic/agent-monitor/activate Valid token. The browser GET renders the confirm page; the confirm POST returns a 200 JSON result and creates the account and monitor.
302 / 409 GET / POST /agentic/agent-monitor/activate Bad, expired, or consumed token, or feature off. The browser GET redirects (302) to a friendly page; the confirm POST returns 409.
503 any endpoint Infrastructure error. Retry with backoff.