The read API gives you your monitoring data as JSON: sites, monitors, incidents, monthly SLA data and response-time series. Everything is read-only and scoped to your own account.
Authentication
Create a key under Settings → API (read permission) and send it in the X-API-Key header. Keys are shown once — store them safely. Each key has its own rate limit; 429 means slow down.
Endpoints
GET /api/v1/monitoring/sites— all active sites with state.GET /api/v1/monitoring/sites/{site}— one site: monitors, state, 30-day uptime, p95.GET /api/v1/monitoring/sites/{site}/incidents— incident log (paginated,?per_page=up to 100).GET /api/v1/monitoring/sites/{site}/uptime?year=2026&month=8— the monthly SLA report as JSON.GET /api/v1/monitoring/sites/{site}/monitors/{monitor}/series?range=24h|7d|30d— avg/p95 series per hour or day.
{site} and {monitor} are the public ids from the API (e.g. rhuuiltnynyn), also visible in the app URLs.
curl
curl -H "X-API-Key: YOUR_KEY" https://ravnsight.com/api/v1/monitoring/sites
PHP
$ch = curl_init('https://ravnsight.com/api/v1/monitoring/sites');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-API-Key: YOUR_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$sites = json_decode(curl_exec($ch), true)['data'];
foreach ($sites as $site) {
echo $site['name'] . ': ' . $site['state'] . PHP_EOL;
}
Python
import requests
r = requests.get(
'https://ravnsight.com/api/v1/monitoring/sites',
headers={'X-API-Key': 'YOUR_KEY'}, timeout=10)
for site in r.json()['data']:
print(site['name'], site['state'])
JavaScript
const res = await fetch('https://ravnsight.com/api/v1/monitoring/sites', {
headers: { 'X-API-Key': 'YOUR_KEY' },
});
const { data } = await res.json();
data.forEach(site => console.log(site.name, site.state));
Errors
401— missing/invalid key.403— the plan lacks API access (Pro and up), or the key lacks read permission.404— unknown site/monitor id (or not yours).429— rate limit hit; retry after a minute.