Getting started
Odds formats
Decimal by default. Ask for American or fractional on /odds or a WebSocket subscribe.
Choosing a format
Pass format= on /odds, or the format field of a WebSocket subscribe. Every tier, no extra tokens. Prices are stored in decimal and converted when served, so the three formats are always the same price. The body (and each snapshot / changes frame) says which with odds_format. Any other value is a 400 bad_request.
It converts every price field: odds, prev_odds, open_odds and close_odds. A missing price stays missing.
Conversion rules
| Format | Type | Rule | Examples |
|---|---|---|---|
decimal | number | Unchanged | 2.1 to 2.1 |
american | integer | Decimal 2.0 and up: +(d-1)*100. Below 2.0: -100/(d-1). Rounded half up. Even money is 100; never between -100 and +100. | 2.0 to 100, 2.5 to 150, 1.5 to -200 |
fractional | string "n/d" | The nearest price on the traditional UK ladder (1/1000 up to 1000/1, evens is "1/1"), with traditional spellings kept (6/4, not 3/2). A display value: for maths, use decimal. | 2.5 to "6/4", 1.85 to "5/6", 2.0 to "1/1" |
Example
EVENT_ID=$(curl -s "https://api.b337.ai/odds/v1/events?league=epl&limit=1" \
-H "X-API-Key: demo" | jq -r '.data[0].event_id')
curl -sG "https://api.b337.ai/odds/v1/odds" \
--data-urlencode "event_id=$EVENT_ID" \
--data-urlencode "markets=head_to_head" \
--data-urlencode "books=sportsbet" \
--data-urlencode "format=fractional" \
-H "X-API-Key: demo" --compressedResponse (price-bearing part)
{
"odds_format": "fractional",
"markets": [
{"market": "head_to_head", "name": "Match Result", "selections": [
{"selection_key": "774c72a86710", "label": "Arsenal FC",
"prices": {"sportsbet": {"odds": "3/8", "updated_at": "2026-10-05T03:05:20Z",
"open_odds": "2/7"}}}]}
]
}