Free Uptime Monitoring API — Monitor URLs & Get Alerts via REST

March 2026 9 min read No signup required

Need to know when your API goes down — without setting up Grafana, Prometheus, or paying for UptimeRobot? The Agent Uptime Monitor API lets you create URL monitors, track response times, receive webhook alerts on downtime, and build status pages — all via REST.

In this guide you'll learn how to set up monitors, configure downtime alerts, query check history, and build real-world monitoring workflows with the API.

12 REST Endpoints

Full CRUD for monitors plus check history, incidents, alerts, pause/resume, manual trigger, and status page.

Flexible Intervals

Check every 30s, 1m, 5m, 10m, 15m, 30m, or 1h. Automatic smart rounding to nearest valid interval.

Webhook Alerts

Get notified instantly via webhook when a monitor goes down or recovers. Custom headers supported.

Uptime Stats

Overall uptime percentage, 24h uptime, average response time, check history, and incident timeline.

Quick Start — Monitor a URL in 60 Seconds

Get an API key (free), then create a monitor that checks your site every 60 seconds:

Step 1: Get an API Key

curl -X POST https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/keys/create

{
  "apiKey": "mon_abc123...",
  "credits": 20,
  "plan": "free"
}

Step 2: Create a Monitor

curl
Python
Node.js
curl -X POST https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors \
  -H "Authorization: Bearer mon_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production API",
    "url": "https://api.example.com/health",
    "interval": 60,
    "method": "GET",
    "expectedStatus": 200,
    "timeout": 5000
  }'

# Response:
{
  "id": "f7a1b2c3-d4e5-6789-abcd-ef0123456789",
  "name": "Production API",
  "url": "https://api.example.com/health",
  "interval": 60,
  "method": "GET",
  "status": "checking",
  "created": "2026-03-04T12:00:00.000Z",
  "credits_remaining": 19
}
import requests

API_KEY = "mon_abc123..."
BASE = "https://agent-gateway-kappa.vercel.app/v1/agent-monitor"

# Create a monitor
resp = requests.post(
    f"{BASE}/api/monitors",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "name": "Production API",
        "url": "https://api.example.com/health",
        "interval": 60,
        "expectedStatus": 200,
        "timeout": 5000,
    },
)
monitor = resp.json()
print(f"Monitor created: {monitor['id']}")
const API_KEY = 'mon_abc123...';
const BASE = 'https://agent-gateway-kappa.vercel.app/v1/agent-monitor';

const resp = await fetch(`${BASE}/api/monitors`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Production API',
    url: 'https://api.example.com/health',
    interval: 60,
    expectedStatus: 200,
    timeout: 5000,
  }),
});
const monitor = await resp.json();
console.log(`Monitor created: ${monitor.id}`);

That's it. The API starts checking your URL immediately and tracks every result.

API Reference — All 12 Endpoints

MethodEndpointDescription
POST/api/monitorsCreate a new monitor
GET/api/monitorsList all your monitors
GET/api/monitors/:idGet monitor details with uptime stats
PUT/api/monitors/:idUpdate monitor settings
DELETE/api/monitors/:idDelete a monitor
POST/api/monitors/:id/pausePause monitoring
POST/api/monitors/:id/resumeResume paused monitor
POST/api/monitors/:id/checkTrigger an immediate check
GET/api/monitors/:id/checksGet check history (up to 1,000 entries)
GET/api/monitors/:id/incidentsGet incident history (up/down transitions)
PUT/api/monitors/:id/alertsConfigure webhook alerts
GET/api/statusGet status page summary

All endpoints are prefixed with https://agent-gateway-kappa.vercel.app/v1/agent-monitor. Requires an API key in the Authorization: Bearer header.

Configure Webhook Alerts

Get notified the moment your site goes down — and again when it recovers:

curl
Python
Node.js
# Configure webhook alerts for a monitor
curl -X PUT https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors/MONITOR_ID/alerts \
  -H "Authorization: Bearer mon_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "webhookUrl": "https://hooks.slack.com/services/T.../B.../xxx",
    "webhookHeaders": {"Content-Type": "application/json"}
  }'

# When the monitor goes down, you'll receive:
{
  "event": "monitor.down",
  "monitor": {
    "id": "f7a1b2c3-...",
    "name": "Production API",
    "url": "https://api.example.com/health"
  },
  "incident": {
    "type": "down",
    "statusCode": 0,
    "error": "Timeout",
    "startedAt": "2026-03-04T14:23:01.000Z"
  },
  "timestamp": "2026-03-04T14:23:01.000Z"
}
# Configure Slack webhook alerts
resp = requests.put(
    f"{BASE}/api/monitors/{monitor_id}/alerts",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "webhookUrl": "https://hooks.slack.com/services/T.../B.../xxx",
        "webhookHeaders": {"Content-Type": "application/json"},
    },
)
print(resp.json())  # {"configured": true, "monitorId": "...", "webhookUrl": "..."}
// Configure Discord webhook alerts
await fetch(`${BASE}/api/monitors/${monitorId}/alerts`, {
  method: 'PUT',
  headers: {
    'Authorization': `Bearer ${API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    webhookUrl: 'https://discord.com/api/webhooks/...',
    webhookHeaders: { 'Content-Type': 'application/json' },
  }),
});

The webhook fires on every state transition: monitor.down when the site becomes unreachable, and monitor.up when it recovers. Works with Slack, Discord, PagerDuty, or any custom endpoint.

Check History & Uptime Stats

Every health check is recorded with status, response time, and status code:

# Get detailed monitor info with uptime stats
curl https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors/MONITOR_ID \
  -H "Authorization: Bearer mon_abc123..."

{
  "id": "f7a1b2c3-...",
  "name": "Production API",
  "url": "https://api.example.com/health",
  "status": "up",
  "interval": 60,
  "lastCheck": "2026-03-04T14:30:01.000Z",
  "lastResponseTime": 142,
  "uptimePercent": 99.87,
  "uptime24h": 100.0,
  "avgResponseTime": 156,
  "totalChecks": 1440,
  "totalIncidents": 2,
  "recentIncidents": [
    {
      "type": "recovery",
      "startedAt": "2026-03-04T03:15:00.000Z",
      "statusCode": 200,
      "responseTime": 89
    }
  ]
}
# Get raw check history (last 50 checks)
curl "https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors/MONITOR_ID/checks?limit=50" \
  -H "Authorization: Bearer mon_abc123..."

{
  "checks": [
    {"timestamp": "2026-03-04T14:30:01Z", "status": "up", "statusCode": 200, "responseTime": 142},
    {"timestamp": "2026-03-04T14:29:01Z", "status": "up", "statusCode": 200, "responseTime": 138},
    {"timestamp": "2026-03-04T14:28:01Z", "status": "up", "statusCode": 200, "responseTime": 155}
  ],
  "total": 1440,
  "limit": 50
}

Build a Status Page

Get a summary of all your monitors in one call — perfect for building a public status page:

curl https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/status \
  -H "Authorization: Bearer mon_abc123..."

{
  "overall": "operational",
  "monitors": [
    {"name": "Production API", "status": "up", "uptimePercent": 99.87, "lastResponseTime": 142},
    {"name": "Payment Service", "status": "up", "uptimePercent": 100.0, "lastResponseTime": 45},
    {"name": "CDN Origin", "status": "up", "uptimePercent": 99.95, "lastResponseTime": 23}
  ],
  "total": 3,
  "up": 3,
  "down": 0,
  "paused": 0,
  "timestamp": "2026-03-04T14:30:00.000Z"
}

Advanced: Custom Check Configuration

Beyond basic URL checks, the API supports custom HTTP methods, headers, expected body content, and timeouts:

# Monitor a POST endpoint with custom headers and body matching
curl -X POST https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors \
  -H "Authorization: Bearer mon_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Auth Service",
    "url": "https://auth.example.com/api/health",
    "method": "POST",
    "headers": {"X-Health-Check": "true"},
    "expectedStatus": 200,
    "expectedBody": "\"healthy\"",
    "interval": 300,
    "timeout": 10000
  }'

Monitor configuration options:

Real-World Use Cases

SaaS Uptime Monitoring

Monitor your production API, database, and third-party services. Get Slack alerts on downtime. Build a customer-facing status page.

CI/CD Health Gates

After deployment, create a temporary monitor to verify the new version is healthy. Check response times and error rates before marking the deploy as successful.

AI Agent Monitoring

Monitor tool endpoints that AI agents depend on. Automatically detect when tools become unavailable so agents can switch to fallback providers.

Competitive Intelligence

Monitor competitor APIs and landing pages for uptime. Track their response times over time. Detect when they ship changes (body content check).

Example: Monitoring Script with Slack Alerts

Python
Node.js
import requests

BASE = "https://agent-gateway-kappa.vercel.app/v1/agent-monitor"

# Step 1: Get an API key
key_resp = requests.post(f"{BASE}/api/keys/create")
API_KEY = key_resp.json()["apiKey"]
headers = {"Authorization": f"Bearer {API_KEY}"}

# Step 2: Create monitors for all your services
services = [
    {"name": "Main API", "url": "https://api.myapp.com/health", "interval": 60},
    {"name": "Payment Service", "url": "https://pay.myapp.com/health", "interval": 30},
    {"name": "CDN Origin", "url": "https://cdn.myapp.com", "interval": 300},
]

for svc in services:
    resp = requests.post(f"{BASE}/api/monitors", headers=headers, json=svc)
    monitor = resp.json()
    monitor_id = monitor["id"]
    print(f"Created monitor: {svc['name']} ({monitor_id})")

    # Configure Slack alerts
    requests.put(
        f"{BASE}/api/monitors/{monitor_id}/alerts",
        headers=headers,
        json={"webhookUrl": "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"},
    )

# Step 3: Check overall status
status = requests.get(f"{BASE}/api/status", headers=headers).json()
print(f"Overall: {status['overall']} ({status['up']}/{status['total']} up)")
const BASE = 'https://agent-gateway-kappa.vercel.app/v1/agent-monitor';

// Step 1: Get an API key
const keyResp = await fetch(`${BASE}/api/keys/create`, { method: 'POST' });
const { apiKey } = await keyResp.json();
const headers = { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' };

// Step 2: Create monitors
const services = [
  { name: 'Main API', url: 'https://api.myapp.com/health', interval: 60 },
  { name: 'Payment Service', url: 'https://pay.myapp.com/health', interval: 30 },
  { name: 'CDN Origin', url: 'https://cdn.myapp.com', interval: 300 },
];

for (const svc of services) {
  const resp = await fetch(`${BASE}/api/monitors`, {
    method: 'POST', headers, body: JSON.stringify(svc),
  });
  const monitor = await resp.json();
  console.log(`Created: ${svc.name} (${monitor.id})`);

  // Configure alerts
  await fetch(`${BASE}/api/monitors/${monitor.id}/alerts`, {
    method: 'PUT', headers,
    body: JSON.stringify({ webhookUrl: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK' }),
  });
}

// Step 3: Check status
const status = await (await fetch(`${BASE}/api/status`, { headers })).json();
console.log(`Overall: ${status.overall} (${status.up}/${status.total} up)`);

Start Monitoring in 30 Seconds

Create monitors, get alerts, track uptime — all via REST API. Free tier with no signup.

Interactive API Docs

Comparison: Agent Uptime Monitor vs Alternatives

FeatureAgent MonitorUptimeRobotBetter StackPingdom
PricingFree tier + pay-per-useFree (50 monitors)Free (5 monitors)From $15/mo
API-firstYes (REST only)API availableAPI availableAPI available
Min interval30 seconds5 minutes (free)3 minutes (free)1 minute
Webhook alertsAny URLEmail + integrationsEmail + Slack + PagerDutyEmail + integrations
Signup requiredNoYes (email)Yes (email)Yes (credit card)
Status pageAPI endpointHosted pageHosted pageHosted page
Body content checkYesPro onlyYesYes
Custom headersYesPro onlyYesYes
Check history1,000 per monitor24 hours (free)30 daysVaries by plan
AI agent friendlyBuilt for agentsNot designed for agentsNot designed for agentsNot designed for agents

Best for: Developers who want monitoring via API without creating accounts, AI agents that need to monitor their tool endpoints, and teams building custom status pages or monitoring dashboards.

Manage Monitors — Pause, Resume, Delete

# Pause a monitor (during maintenance)
curl -X POST https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors/MONITOR_ID/pause \
  -H "Authorization: Bearer mon_abc123..."

# Resume monitoring
curl -X POST https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors/MONITOR_ID/resume \
  -H "Authorization: Bearer mon_abc123..."

# Trigger an immediate check (don't wait for next interval)
curl -X POST https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors/MONITOR_ID/check \
  -H "Authorization: Bearer mon_abc123..."

# View incident history (down/recovery events)
curl https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors/MONITOR_ID/incidents \
  -H "Authorization: Bearer mon_abc123..."

# Delete a monitor
curl -X DELETE https://agent-gateway-kappa.vercel.app/v1/agent-monitor/api/monitors/MONITOR_ID \
  -H "Authorization: Bearer mon_abc123..."

FAQ

How often does it check my URL?

You choose the interval when creating the monitor: 30 seconds, 1 minute, 5 minutes, 10 minutes, 15 minutes, 30 minutes, or 1 hour. The API automatically rounds to the nearest valid interval.

What counts as "down"?

A URL is marked "down" if the HTTP status code doesn't match expectedStatus (default: 200), the response body doesn't contain expectedBody (if set), or the request times out. Status codes 200-399 are considered "up" by default.

How are webhook alerts triggered?

The API fires a webhook on every state transition: when a monitor changes from "up" to "down" (monitor.down event) or from "down" to "up" (monitor.up event). It does NOT fire on every check — only on changes.

Can I monitor internal/private URLs?

The API makes outbound HTTP requests from its server, so it can only monitor publicly accessible URLs. For internal services, expose a health endpoint or use a VPN tunnel.

How long is check history retained?

Up to 1,000 checks per monitor (in-memory). At 1-minute intervals, that's ~16 hours of history. At 5-minute intervals, that's ~3.5 days.

Is there a limit on monitors?

No hard limit on the number of monitors. Each API call to create or manage monitors costs 1 credit. Free tier includes 10 free requests, then you can top up with USDC for $0.002/request.

Can I use this with Slack, Discord, or PagerDuty?

Yes. Any service that accepts incoming webhooks works. Set the webhookUrl to your Slack incoming webhook URL, Discord webhook URL, or PagerDuty Events API endpoint.