API reference/phone

List the account's phone monitors

GET/api/v1/phone/monitors

authentication
Secret API key as a bearer token
billing
Free.

The saved number lists this account re-checks on a schedule, newest first, 100 per page. Each monitor carries the summary of its last run: how many numbers were valid, invalid, in a block nobody holds or unreachable, how many changed status, how many decayed (valid last time, not any more), the credits the run spent, and whether it stopped for lack of credits. The numbers 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/phone/monitors \
  -H "Authorization: Bearer sk_live_…"
const response = await fetch('https://spaw.co/api/v1/phone/monitors', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer sk_live_…',
  },
});
const result = await response.json();
import requests

response = requests.get(
    'https://spaw.co/api/v1/phone/monitors',
    headers={'Authorization': 'Bearer sk_live_…'},
)
result = response.json()
$ch = curl_init('https://spaw.co/api/v1/phone/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": 7,
                "name": "SMS audience",
                "cadence": "monthly",
                "number_count": 2,
                "country": "GB",
                "live_check": false,
                "next_run_at": "2026-10-05T08:00:00+00:00",
                "last_run_at": "2026-09-05T08:00:12+00:00",
                "last_summary": {
                    "total": 2,
                    "valid": 1,
                    "invalid": 0,
                    "unassigned": 1,
                    "unreachable": 0,
                    "changed": 0,
                    "decayed": 0,
                    "credits_used": 1,
                    "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