Line-matched arbitrage on spreads and totals: backs the two opposing sides at complementary lines across books. Returns the best complementary pair per event/market with a guaranteed-profit (is_arb) flag; is_middle marks overlapping lines where both sides can win.
X-API-Key
3 credits
curl 'https://api.puntersedge.online/v1/arb/lines' \
-H 'X-API-Key: YOUR_KEY'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
sport_key |
query | string | no | Filter by sport e.g. afl, nrl |
maxAgeMinutes |
query | integer | no | Exclude bookmaker markets older than this many minutes. Same bound and default as /v1/sports/{sport_key}/odds, so an arb can never be built on a price that endpoint refuses to show. |
min_profit_pct |
query | number | no | Min guaranteed profit % (0 = also show the best line comparison when not an arb) |
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 3 credits.
Field names and types are as the API returns them; values are a real sample, trimmed to a few items.
[
{
"event_id": "6b1608c5-a9b8-4235-9a12-6db9656fef74",
"sport_key": "nrl",
"home_team": "Cronulla Sharks",
"away_team": "Nth Queensland Cowboys",
"commence_time": "2026-09-09T02:00:00Z",
"market_type": "totals",
"opportunities": [
{
"side_a": {
"name": "Over",
"point": 47.5,
"price": 2.05,
"bookmaker": "pointsbetau"
},
"side_b": {
"name": "Under",
"point": 48.5,
"price": 2.02,
"bookmaker": "tab"
},
"is_arb": true,
"is_middle": true,
"arb_pct": 1.7,
"optimal_stakes": [
{
"name": "Over",
"point": 47.5,
"stake": 49.63,
"bookmaker": "pointsbetau",
"profit_if_wins": 1.74
},
{
"name": "Under",
"point": 48.5,
"stake": 50.37,
"bookmaker": "tab",
"profit_if_wins": 1.75
}
]
}
]
}
]
GET /v1/arb/best-prices — Best prices comparisonGET /v1/arb/sports — Sports arb scannerThe free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart