Back & lay prices
Read Smarkets back and lay ladders together, so your app can show both sides of the same selection.
Read Smarkets pre-match winner prices, handicaps and totals from $50/month, with REST and streaming included.
{
"event_id": "$EVENT_ID",
"items": [
{
"bookmaker": "smarkets",
"bet_type": "moneyline 3w",
"period_str": "full time",
"side": "home",
"selection_name": "Home team",
"odds": 2.12
},
{
"bookmaker": "smarkets",
"bet_type": "moneyline 3w",
"period_str": "full time",
"side": "draw",
"selection_name": "Draw",
"odds": 3.45
},
{
"bookmaker": "smarkets",
"bet_type": "moneyline 3w",
"period_str": "full time",
"side": "away",
"selection_name": "Away team",
"odds": 3.8
}
],
"resume": "$RESUME_TOKEN"
}
Build exchange screens with Smarkets prices, available liquidity and football markets from the Premier League to the Champions League.
Read Smarkets back and lay ladders together, so your app can show both sides of the same selection.
See the available stake at each price level, alongside best back and lay prices and matched activity.
Including the Premier League, Championship, Champions League, La Liga and Bundesliga.
Copy a request for your app or give the prompt to your AI agent.
X-API-Keysmarkets/v1/events/{event_id}/odds/snapshot?bookmakers=smarkets
Build a Smarkets Premier League odds board with https://api.odds-api.net/v1. Keep ODDS_API_KEY server-side and send it in the X-API-Key header.
Find an upcoming match at /events?league=EPL¬_started_only=true&limit=50 that lists smarkets. Support bookmaker lists and mappings. Use its event_id to request /events/{event_id}/odds/snapshot?bookmakers=smarkets.
Show teams, start time, market, period, line, selection and decimal odds. Preserve freshness fields, handle empty results and API errors, and use cursor pagination when needed. Load the snapshot before following the matching pre-match stream; reconnect with its resume token. This app reads market data and does not place bets.const apiKey = process.env.ODDS_API_KEY;
const baseUrl = "https://api.odds-api.net/v1";
const headers = { "X-API-Key": apiKey };
if (!apiKey) throw new Error("Set ODDS_API_KEY before running this file.");
async function getJson(path) {
const response = await fetch(`${baseUrl}${path}`, { headers });
if (!response.ok) throw new Error(await response.text());
return response.json();
}
const events = await getJson("/events?league=EPL¬_started_only=true&limit=50");
const event = events.items.find(({ bookmakers }) =>
Array.isArray(bookmakers)
? bookmakers.includes("smarkets")
: Object.hasOwn(bookmakers ?? {}, "smarkets")
);
if (!event) throw new Error("No current Smarkets event found.");
const snapshot = await getJson(
`/events/${encodeURIComponent(event.event_id)}/odds/snapshot?bookmakers=smarkets`
);
console.log(JSON.stringify(snapshot, null, 2));
import os
import requests
base_url = "https://api.odds-api.net/v1"
headers = {"X-API-Key": os.environ["ODDS_API_KEY"]}
events_response = requests.get(
f"{base_url}/events",
headers=headers,
params={"limit": 50, "league": "EPL", "not_started_only": True},
timeout=20,
)
events_response.raise_for_status()
events = events_response.json()["items"]
event = next(
(item for item in events if "smarkets" in item.get("bookmakers", [])),
None,
)
if event is None:
raise RuntimeError("No current Smarkets event found.")
response = requests.get(
f"{base_url}/events/{event['event_id']}/odds/snapshot",
headers=headers,
params={"bookmakers": "smarkets"},
timeout=20,
)
response.raise_for_status()
print(response.json())
export ODDS_API_KEY="your_api_key"
# Find an upcoming EPL game listing smarkets.
curl -sS \
-H "X-API-Key: $ODDS_API_KEY" \
"https://api.odds-api.net/v1/events?league=EPL¬_started_only=true&limit=50"
# Use that game's event_id below.
export EVENT_ID="replace_with_event_id"
curl -sS \
-H "X-API-Key: $ODDS_API_KEY" \
"https://api.odds-api.net/v1/events/$EVENT_ID/odds/snapshot?bookmakers=smarkets"
Read the price and its market context together, so your app compares the same outcome across sources.
Two-outcome winner prices and home, draw and away prices for football.
moneylinemoneyline 3wKeep the handicap line and selection attached to each price when comparing the same fixture.
handicapOver and under prices with the total line and period preserved in the response.
totalTools for events, odds, line movement, streams, and paid-plan positive EV or arbitrage feeds.
Agent-ready instructions.
TypeScript, Python, Postman and example builds.
Sports and racing odds coverage for agent workflows.
Lightweight streaming updates for dashboards and alerts.
Bidirectional streams for richer pre-match products.
Start with match prices. Use the separate exchange endpoints when your product needs price ladders and available size.
GET /v1/events?league=EPL¬_started_only=true&limit=50
Request upcoming EPL events and choose one whose bookmakers field contains smarkets. Use the returned event_id in later requests.
GET /v1/events/{event_id}/odds/snapshot?bookmakers=smarkets
Request bookmakers=smarkets for a normalized odds snapshot. Keep the selection, period, line, price and freshness fields together.
GET /v1/events/{event_id}/exchange/orderbook/snapshot?exchanges=smarkets&depth=2
For back and lay ladders, use the dedicated exchange route with exchanges=smarkets. Its response includes price levels and available size where supplied.
GET /v1/events/{event_id}/odds/stream?bookmakers=smarkets&since={resume}
Use the stream matching your chosen snapshot. Apply updates to that initial state and pass the resume token as since when reconnecting.
Choose a monthly plan based on request volume, rate limits, and support.
Enterprise grade
Custom projects, scoped with your team.
API access, football coverage, streaming and exchange order books.
No. odds-api.net is an independent market-data provider, not affiliated with or endorsed by Smarkets. Smarkets' own API handles exchange accounts and order management. This service supplies odds data without a Smarkets login and does not place, amend or cancel bets.
Create an odds-api.net account, choose a paid plan and copy your API key from the account page. Send it in the X-API-Key header from your server. Use bookmakers=smarkets for normalized odds or exchanges=smarkets for the dedicated order-book endpoints.
The observed Smarkets catalogue includes the Premier League (EPL), English Championship, Champions League, Europa League, La Liga, Bundesliga, Serie A and Ligue 1. Use the EPL league value in the request example, then retain the returned event_id when requesting its odds.
Yes. Request /v1/events/{event_id}/exchange/orderbook/snapshot?exchanges=smarkets&depth=2 for the dedicated order-book response. It provides back and lay price levels, available size and matched activity where supplied. This is a separate response from the normalized bookmaker odds snapshot.
Yes. Begin with a REST snapshot, then connect to its matching SSE or WebSocket stream for pre-match changes. Keep the resume token for reconnects and reload the snapshot if the stream requests a resync.
Paid odds-api.net plans start at US$50 per month. Starter includes 250,000 monthly API credits, 500 stream-hours and three concurrent streams. Choose a plan by request volume and streaming usage; the same API key works across covered sources.
Use shared event IDs to connect Smarkets with Betfair and covered UK bookmakers. Compare the same market, period, line and selection.
Explore exchange order booksChoose a plan and connect Smarkets prices to your football dashboard, comparison tool or exchange-data product.