API reference/ip

List the account's IP monitors

GET/api/v1/ip/monitors

authentication
Secret API key as a bearer token
billing
Free.

The saved address lists this account re-checks on a schedule, newest first, 100 per page. Each monitor carries the summary of its last run: how many addresses were clean, flagged (on a threat blocklist, a Tor exit, or scoring high) or reserved, how many changed status, how many newly became flagged, the credits the run spent, and whether it stopped for lack of credits. The addresses and their statuses are on the single-monitor endpoint.

Parameters

name in type description
pagequeryintegerThe page to return. Default: 1.

Example request

curl https://spaw.co/api/v1/ip/monitors \
  -H "Authorization: Bearer sk_live_…"
const response = await fetch('https://spaw.co/api/v1/ip/monitors', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer sk_live_…',
  },
});
const result = await response.json();
import requests

response = requests.get(
    'https://spaw.co/api/v1/ip/monitors',
    headers={'Authorization': 'Bearer sk_live_…'},
)
result = response.json()
$ch = curl_init('https://spaw.co/api/v1/ip/monitors');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer sk_live_…'],
]);
$result = json_decode(curl_exec($ch), true);

Responses

200One page of monitors.

{
    "success": true,
    "data": {
        "monitors": [
            {
                "id": 4,
                "name": "Mail servers",
                "cadence": "daily",
                "ip_count": 2,
                "next_run_at": "2026-09-06T08:00:00+00:00",
                "last_run_at": "2026-09-05T08:00:03+00:00",
                "last_summary": {
                    "total": 2,
                    "clean": 1,
                    "flagged": 1,
                    "reserved": 0,
                    "changed": 1,
                    "newly_flagged": 1,
                    "credits_used": 0,
                    "stopped_reason": null
                },
                "created_at": "2026-08-27T08:00:00+00:00"
            }
        ]
    },
    "meta": {
        "page": 1,
        "per_page": 100,
        "total": 1
    }
}

401The key is missing, malformed, or revoked.

{
    "success": false,
    "error": {
        "code": "UNAUTHENTICATED",
        "message": "Provide a valid API key as a bearer token.",
        "request_id": "req_01m1kgdm4xngzmbmff68g94w0c"
    }
}

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