API reference/status

Health, latency and data freshness

GET/api/v1/status/data

authentication
No authentication
billing
Free.

The facts behind the public status page, without authentication: ok (the service answered and its databases are readable), the sync date and range counts of every dataset behind email and IP lookups, and measured API latency per endpoint group over the last hour and the last 24 hours. Point a monitor at it, or read it before a big run to know how fresh the feeds are. Throttled at 60 requests per minute per IP.

Example request

curl https://spaw.co/api/v1/status/data
const response = await fetch('https://spaw.co/api/v1/status/data', {
  method: 'GET',
});
const result = await response.json();
import requests

response = requests.get(
    'https://spaw.co/api/v1/status/data',
)
result = response.json()
$ch = curl_init('https://spaw.co/api/v1/status/data');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);

Responses

200The current status.

{
    "success": true,
    "data": {
        "ok": true,
        "checked_at": "2026-09-04T18:00:00+00:00",
        "datasets": [
            {
                "dataset": "dbip-city-lite",
                "version": "2026-08-01",
                "installed": true
            },
            {
                "dataset": "datacenter-ranges",
                "version": "2026-09-04",
                "installed": true,
                "feeds": 12
            }
        ],
        "latency": [
            {
                "group": "ip",
                "window": "1h",
                "p50_ms": 2,
                "p95_ms": 6,
                "sample": 812
            },
            {
                "group": "email",
                "window": "1h",
                "p50_ms": 410,
                "p95_ms": 2100,
                "sample": 1204
            }
        ]
    }
}

429Over 5 requests per second for the key. Retry after the limit resets.

{
    "success": false,
    "error": {
        "code": "RATE_LIMITED",
        "message": "Too many requests. Retry after the limit resets.",
        "request_id": "req_01m1kgdm4xngzmbmff68g94w0c"
    }
}

Error codes

Failures answer { success: false, error: { code, message, request_id } }. Each code has its own page.

markdown version·openapi.json