Per-scraper last-success age + a stale flag, so a silently stalled feed (the root cause of phantom arbs) is visible. `sports` breaks that down PER SPORT, because connector-level health cannot see a book that has quietly stopped covering one competition. Measured 2026-08-21: betright was reporting healthy and writing 15-21 events a cycle — its NRL and AFL rows current to the minute — while its NFL rows were 79 hours old. It had simply dropped NFL, and nothing said so. Those stale NFL prices were being served as arbitrage.
X-API-Key
1 credit
curl 'https://api.puntersedge.online/v1/health/connectors' \
-H 'X-API-Key: YOUR_KEY'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
stale_after_s |
query | number | no | age (s) past which a connector is 'stale' |
coverage_stale_after_s |
query | number | no | age (s) past which a book is treated as no longer COVERING a sport. Defaults to 6h, the same window /v1/sports/{sport_key}/odds will serve — past it the book is effectively absent for that sport. |
include_sports |
query | boolean | no | include the per-sport coverage breakdown |
Status codes: 200, 401, 402, 422, 429, 500. Response bodies are JSON; the full schema is in /openapi.json.
200 application/json
— this call costs 1 credit.
Field names and types are as the API returns them; values are a real sample, trimmed to a few items.
{
"now": "2026-09-07T00:49:16Z",
"stale_after_s": 180.0,
"any_stale": false,
"any_degraded": false,
"connectors": [
{
"connector": "sportsbet",
"last_ok_age_s": 6.0,
"last_poll_age_s": 6.0,
"polling": true,
"stale": false,
"records_written": 163,
"last_msg": "OK — 163 records",
"degraded": false,
"sports": [
{
"sport_key": "nrl",
"markets": 48,
"newest_age_s": 6.0,
"covering": true
},
{
"sport_key": "afl",
"markets": 27,
"newest_age_s": 6.0,
"covering": true
}
],
"sports_not_covering": []
},
{
"connector": "tab",
"last_ok_age_s": 11.2,
"last_poll_age_s": 11.2,
"polling": true,
"stale": false,
"records_written": 349,
"last_msg": "OK — 349 records",
"degraded": false,
"sports": [
{
"sport_key": "nrl",
"markets": 48,
"newest_age_s": 11.2,
"covering": true
},
{
"sport_key": "afl",
"markets": 27,
"newest_age_s": 11.2,
"covering": true
}
],
"sports_not_covering": []
},
{
"connector": "ladbrokes_au",
"last_ok_age_s": 10.6,
"last_poll_age_s": 10.6,
"polling": true,
"stale": false,
"records_written": 375,
"last_msg": "OK — 375 records",
"degraded": false,
"sports": [
{
"sport_key": "nrl",
"markets": 48,
"newest_age_s": 10.6,
"covering": true
},
{
"sport_key": "afl",
"markets": 27,
"newest_age_s": 10.6,
"covering": true
}
],
"sports_not_covering": []
}
],
"coverage_stale_after_s": 21600.0,
"not_covering": []
}
The free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart