Free Uptime Monitoring API — Monitor URLs & Get Alerts via REST
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 -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
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/monitors | Create a new monitor |
| GET | /api/monitors | List all your monitors |
| GET | /api/monitors/:id | Get monitor details with uptime stats |
| PUT | /api/monitors/:id | Update monitor settings |
| DELETE | /api/monitors/:id | Delete a monitor |
| POST | /api/monitors/:id/pause | Pause monitoring |
| POST | /api/monitors/:id/resume | Resume paused monitor |
| POST | /api/monitors/:id/check | Trigger an immediate check |
| GET | /api/monitors/:id/checks | Get check history (up to 1,000 entries) |
| GET | /api/monitors/:id/incidents | Get incident history (up/down transitions) |
| PUT | /api/monitors/:id/alerts | Configure webhook alerts |
| GET | /api/status | Get 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:
# 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:
- interval — Check frequency in seconds: 30, 60, 300, 600, 900, 1800, or 3600
- method — HTTP method: GET, POST, PUT, HEAD, etc.
- headers — Custom request headers (auth tokens, API keys)
- expectedStatus — Expected HTTP status code (default: 200)
- expectedBody — String that must appear in the response body
- timeout — Max wait time in ms (up to 30,000)
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
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 DocsComparison: Agent Uptime Monitor vs Alternatives
| Feature | Agent Monitor | UptimeRobot | Better Stack | Pingdom |
|---|---|---|---|---|
| Pricing | Free tier + pay-per-use | Free (50 monitors) | Free (5 monitors) | From $15/mo |
| API-first | Yes (REST only) | API available | API available | API available |
| Min interval | 30 seconds | 5 minutes (free) | 3 minutes (free) | 1 minute |
| Webhook alerts | Any URL | Email + integrations | Email + Slack + PagerDuty | Email + integrations |
| Signup required | No | Yes (email) | Yes (email) | Yes (credit card) |
| Status page | API endpoint | Hosted page | Hosted page | Hosted page |
| Body content check | Yes | Pro only | Yes | Yes |
| Custom headers | Yes | Pro only | Yes | Yes |
| Check history | 1,000 per monitor | 24 hours (free) | 30 days | Varies by plan |
| AI agent friendly | Built for agents | Not designed for agents | Not designed for agents | Not 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.