BETCRYPTO

Developers · v1

Concepts

What the objects in the API and the MCP server mean and how they fit together. Read this before you compare venues or store keys.

Events, markets, outcomes and quotes

Event
One real-world question — a game, an election, a price by a date — merged across every venue that lists it.
Market
One bet on the event: the moneyline, a total at one line, a spread for one team, a player prop. Lists return each event's main market (is_primary); /events/{slug} lists every market, with outcomes for the one you select with market.
Outcome
One answer to a market, with a rollup across venues: implied_probability, the cheapest price to buy it and where, and volume.
Quote
One venue's listing of an outcome: its bid, ask, depth, fee and link, and when it was read.
Every field of every object is in the API reference →

Market keys

A market's key says what the bet is in the same words for every venue, so one venue's Rams −2.5 and another's land in the same market. Pass it as market to select one. Beyond the shapes below, treat a key as an opaque identifier.

moneylinemoneyline
Who wins a game — the main market of a game.
mainmain
The main market of any other question: a yes/no question, or a field of candidates with one outcome each.
totals:[<quantity>:]<line>[:<period>]totals:8.5totals:4.5:f5totals:corners:9.5
Over/under at one line. A quantity names what is counted when it isn't the score (corners, cards); a period narrows it to part of the game.
spread:[<quantity>:]<team>:-<line>[:<period>]spread:los-angeles-rams:-2.5spread:los-angeles-rams:-6.5:1h
A handicap keyed by the team giving the points, with both sides in one market: rows such as "Rams −2.5" and "Cardinals +2.5".
prop:<player>:<stat>:<n>prop:aaron-judge:home-runs:1prop:saquon-barkley:rushing-yards:100
One player reaching n or more of a stat, with rows Yes and No. An over/under at a half line is the next whole number or more: O/U 0.5 home runs is 1+.
binary:<rung>binary:december-31-2026
One yes/no rung of a ladder of separate questions — a deadline ("by December 31") or a threshold.
bracket:ladder | bracket:bins | bracket:exactbracket:bins
A numeric question split a second way when venues split it differently: cumulative thresholds, ranges, or exact counts.
to_advanceto_advance
Who goes through in a knockout tie, extra time and penalties included — apart from the result in normal time.
other:<slug>other:race-to-10-points
Everything else, shown as the venue lists it and never compared across venues.

Periods: 1h and 2h are the halves, f5 is baseball's first five innings. Quarter, set and map lines are other: markets.

A key can end in -2 or a short code when one venue lists two different bets that would otherwise share it.

Reading prices

  • Every price is between 0 and 1 — the implied probability. decimal_odds is 1 ÷ buy_price.
  • implied_probability is the cross-venue consensus: the median midpoint among the venues that are liquid (at least 10% of the busiest venue's volume) and have a comparable quote, and the mean of the two when there are two. venue_spread says how far apart they are.
  • buy_price is a venue's ask — what buying costs there. best_buy_price and best_buy_platform are the cheapest ask across venues and where it is.
  • mid_price is the middle of a venue's book. Compare venues on it only where comparable is true: a two-sided book no more than 10 points wide, or a venue that prices without a book.
  • quote_age_seconds is how long ago the venue last confirmed a quote. Past 90 seconds in play, 20 minutes before the game or 6 hours otherwise the quote is stale: it counts toward none of the outcome's numbers (implied_probability, best_buy_price, venue_spread) and is never comparable.
  • venue_price is whatever the venue publishes — an ask on some, a midpoint on others. Never subtract one venue's from another's.
  • taker_fee_rate is the venue's taker fee rate. The fee on one contract is rate × price × (1 − price).

Times

kickoff_at
When a game starts. Null for questions that aren't games.
starts_at
When the market opened — not a kickoff.
ends_at
When trading closes on the venue that closes last — not when the question resolves. Some venues keep trading open long after the answer is known.
settled_at
When the result was recorded.
quoted_at
On a quote, when the venue last delivered or changed it (quote_confirmed_at adds refreshes that found it unchanged); price_changed_at is when its price last moved.

Status, voids and abandoned events

upcoming
The market hasn't opened yet.
live
Trading is open. For a game this doesn't mean it has kicked off — compare kickoff_at with the time.
ended
Trading has closed and the result isn't in. A game stays live for 6 hours after kickoff even if a venue's close time has passed.
settled
The result is recorded: winning_outcome_id names the winning outcome, and its is_winner is true.
void
A settled event with no winning_outcome_id voided — a push, a cancellation or a no-contest.
abandoned
abandoned_at is set when every venue delisted the event without a result. It reads as ended, though a late result can still settle it.

IDs, slugs and merges

  • An event's id and slug don't change.
  • When BetCrypto finds that two events are the same question, it merges them: the survivor keeps its slug, and the other slug redirects (301) to the survivor — the web page, its Markdown twin and the API alike; the MCP tools answer with the survivor directly. Update a stored slug to the one the response carries.
  • A market can be re-keyed or folded into its twin when venues' listings are re-read — a spread gains its team, a prop its player. Look markets up by key on each request rather than storing their ids.

Price gaps

  • A price gap is one trade on one outcome: buy at buy_platform's best ask and sell into sell_platform's best bid, which pays when the bid is above the ask. Of every pair of venues quoting the outcome, the row is the pair that realizes the most.
  • edge_per_contract is the gap after both venues' taker fees. realizable_usd is that edge times the contracts both books can fill, and capital_usd is the ask plus (1 − the bid) per contract — selling into a bid is buying the other side.
  • Gaps the fees erase are listed with a negative edge; min_realizable=0 keeps only the ones that pay. A gap wider than 15 points before fees is treated as a mapping error and left out.
  • resolves_at_estimate is when the capital comes back: the earlier of the two venues' closes.