Free, public API for internet health data. No API key. No registration. Just fetch.
curl https://internetvitals.com/api/v1/health
const res = await fetch('https://internetvitals.com/api/v1/health')
const data = await res.json()
console.log(`Internet health: ${data.health_score}%`)
import requests
data = requests.get('https://internetvitals.com/api/v1/health').json()
print(f"Internet health: {data['health_score']}%")
InternetVitals runs a Model Context Protocol server (streamable HTTP). Claude, Cursor and any other MCP-compatible agent can query internet health directly — five tools: get_internet_health, get_service_status, list_services, get_recent_incidents, get_vitals_history.
https://internetvitals.com/mcp
/mcpExample prompt after connecting: “What's the current health of the internet? Is Cloudflare operational right now?”
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/health | Current health score + vitals |
| GET | /api/v1/services | All 41 services + status |
| GET | /api/v1/services/:slug | Single service detail + uptime + incidents |
| GET | /api/v1/incidents?limit=20&slug= | Recent incidents |
| GET | /api/v1/history/vitals?period=24h|7d|30d | Health score history |
{
"health_score": 97.3,
"status": "healthy",
"status_label": "The patient is stable.",
"vitals": {
"pulse_bpm": 72,
"temperature_c": 36.8,
"pressure": "118/76",
"spo2_pct": 99.1
},
"summary": {
"operational": 38,
"degraded": 3,
"outage": 0,
"unknown": 0,
"total": 41
},
"updated_at": 1751285600,
"updated_at_human": "2 minutes ago",
"next_check_in_seconds": 180
}
cloudflare, akamai, fastly, aws, azure, gcp, digitalocean, google-search, youtube, gmail, meta, whatsapp, tiktok, twitter-x, microsoft365, github, npm, docker-hub, vercel, gitlab, stripe, paypal, shopify, zoom, slack, discord, twilio, sendgrid, okta, apple, datadog, hubspot, salesforce, google-dns, cloudflare-dns, openai, anthropic, google-ai, meta-ai, mistral, huggingface
No API key required. No rate limits for reasonable use (<1 req/sec). Data updates every 5 minutes — responses are cached for 5 minutes (Cache-Control and X-Data-Updated-At headers tell you how fresh the data is). For high-frequency use, cache on your end.