Pari APIpari.ru ↗
Access live and upcoming football match odds from pari.ru. Get match details, betting markets, decimal odds, and sub-event data via two structured endpoints.
What is the Pari API?
The Pari.ru API covers football betting odds and match details from pari.ru across two endpoints. get_prices returns a full list of upcoming and live matches — including team names, competition, start time, and key market factors — while get_match_detail exposes all available betting markets for a single event, including sub-event breakdowns for halves and corners, with decimal odds coefficients and parameter values per factor.
curl -X GET 'https://api.parse.bot/scraper/ce95e65d-f855-43ac-b1a2-6db9fe5fe73a/get_prices?lang=ru&sport_id=1' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace pari-ru-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: pari_ru_api SDK — bounded, re-runnable; every call capped."""
from parse_apis.pari_ru_api import Pari, EventNotFound
client = Pari()
# List football matches with their odds
for match in client.match_summaries.list(sport_id="1", limit=3):
print(match.team1, "vs", match.team2, "| markets:", match.total_markets)
# Drill into the first match for full detail
summary = client.match_summaries.list(sport_id="1", limit=1).first()
try:
detail = client.matches.get(event_id=str(summary.event_id))
print(detail.team1, "vs", detail.team2, "| competition:", detail.competition)
for sub in detail.sub_events[:3]:
print(" sub-event:", sub.name, "| markets:", sub.total_markets)
except EventNotFound as e:
print("event gone:", e.event_id)
print("exercised: match_summaries.list, matches.get")
Retrieve football match prices (odds) for all upcoming and live matches. Returns main-level matches with their basic market factors. Each match includes team names, start time, competition, and key betting odds. The factors array contains market odds where 'f' is the factor/market ID, 'v' is the coefficient (decimal odds), 'p' is the handicap/total parameter value (in hundredths), and 'pt' is the parameter display string.
| Param | Type | Description |
|---|---|---|
| lang | string | Language code for team/competition names (e.g. 'ru', 'en'). |
| sport_id | string | Numeric sport ID. 1 = Football. |
{
"type": "object",
"fields": {
"total": "integer total count of matches returned",
"matches": "array of match summary objects with event_id, team1, team2, start_time, sport_name, competition_id, place, total_markets, factors"
},
"sample": {
"data": {
"total": 3369,
"matches": [
{
"place": "line",
"team1": "Локомотив Москва",
"team2": "Ахмат",
"factors": [
{
"f": 924,
"v": 1.17
},
{
"f": 910,
"p": -250,
"v": 4.8,
"pt": "-2.5"
},
{
"f": 912,
"p": 250,
"v": 1.13,
"pt": "+2.5"
}
],
"event_id": 66039247,
"sport_name": "Россия. Премьер-Лига. Сезон 26/27",
"start_time": 1785074400,
"total_markets": 757,
"competition_id": 11935
}
]
},
"status": "success"
}
}About the Pari API
What the API Returns
The get_prices endpoint returns an array of football match summaries, each identified by an event_id. Each match object includes team1, team2, start_time as a Unix timestamp, competition_id, place (indicating whether the match is on the pre-match line or live), total_markets, and a factors array of key market odds. The total field gives the count of matches returned. The optional lang and sport_id parameters let you request team and competition names in a specific language and filter by sport.
Match Detail and Sub-Events
Passing an event_id to get_match_detail returns the full market picture for one match. The top-level response includes team1, team2, competition, start_time, place, total_markets, and a factors array for the main event. Each factor object carries f (a market ID), v (the decimal odds coefficient), and optionally p (a parameter, used for handicap or total lines). The sub_events array breaks the match into segments — first half, second half, corners, and similar markets — each carrying its own factors array with the same structure.
Coverage and Parameters
Both endpoints accept a lang parameter (ru or en) that controls the language of team and competition names in the response. sport_id on get_prices defaults to football (1). Match status — live vs. pre-match — is surfaced via the place field on every match object. The event_id returned from get_prices is the required input to get_match_detail, so the typical workflow is to list matches first and then fetch detail for events of interest.
The Pari API is a managed, monitored endpoint for pari.ru — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pari.ru changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official pari.ru API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate pre-match and live football odds from pari.ru into a odds-comparison dashboard
- Monitor the
placefield to detect when a match transitions from line to live status - Pull sub-event markets (halves, corners) from
get_match_detailto build in-play betting feeds - Extract decimal odds coefficients from
factorsto calculate implied probabilities for model inputs - Track
total_marketsacross events to identify matches with the deepest available market coverage - Build a competition-level odds feed by filtering match summaries on
competition_id - Store
start_timeUnix timestamps to schedule automated odds snapshots before match kick-off
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does pari.ru offer an official developer API?+
What does the `factors` array in each match or sub-event contain?+
factors array has an f field (market ID identifying the bet type), a v field (the decimal odds coefficient), and an optional p field used for markets with a parameter such as a handicap value or a total-goals line. The same structure appears at the main event level and inside each sub_events entry.Does the API cover sports other than football?+
sport_id parameter on get_prices accepts 1 for football, but no other sport IDs are documented. You can fork this API on Parse and revise it to add support for additional sport IDs if pari.ru carries them.Is historical odds data available, such as closing lines or pre-match odds snapshots?+
How can I tell whether a match is live or pre-match from the response?+
place field on each match object in get_prices, and on the root object in get_match_detail, indicates market status. A value of live means the match is currently in progress; line means the match is pre-match.