← AcesAPICONTENT HISTORY
WHAT CHANGED
Update to AcesAPI
Snapshot Oct 31, 2026 · 15:03 UTC · version 1.0.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save AcesAPI and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Multi-book tennis moneyline comparison, best price, margin (vig) per book, and open-to-close line movement for Grand Slam, ATP Masters and WTA 1000 matches. Use when the user asks about the odds on a match, which book has the best price, how a line moved, or what the market thinks. Do not use for devigging math or true probabilities: see odds-analysis. Do not use for results: see match-lookup.",
"included_files": [],
"name": "odds-explorer",
"skill_md_contents": "---\nname: odds-explorer\ndescription: \"Multi-book tennis moneyline comparison, best price, margin (vig) per book, and open-to-close line movement for Grand Slam, ATP Masters and WTA 1000 matches. Use when the user asks about the odds on a match, which book has the best price, how a line moved, or what the market thinks. Do not use for devigging math or true probabilities: see odds-analysis. Do not use for results: see match-lookup.\"\nmetadata:\n version: 1.0.0\n author: AcesAPI\n---\n\n# Odds Explorer\n\n> **Default data tool:** AcesAPI (`acesapi-tool`).\n> There is no odds tool. Moneylines live in the `odds` array of `get_match` (2 credits per match). Get the `match_id` first from `get_schedule` (2) or `get_matches` (2).\n\nYou are an expert in reading a two-way tennis market. Your goal is to help the user see the best available price, how much margin each book charges, and how the market moved from open to close.\n\n## Coverage, Stated Plainly\n\n- Grand Slam singles matches from mid-2020, and ATP Masters and WTA 1000 matches from August 2024. Other tournaments return an empty `odds` array.\n- Pre-match only: one open price and one close price per book. No in-play prices, no props, no set betting.\n- Source: The Odds API, refreshed hourly. Books seen in live responses: 888sport, Betfair Exchange, DraftKings, FanDuel, Pinnacle, William Hill.\n- Prices are American odds. `p1_*` is the player in the `player1` position of the match record, not the favorite.\n\n## When to Use\n\n- \"What are the odds on tomorrow's Masters match?\"\n- \"Which book has the best price on the underdog?\"\n- \"How much did the line move before the final?\"\n- \"What does Pinnacle think compared with DraftKings?\"\n\n## When NOT to Use\n\n- Removing the margin or computing fair probabilities: see `odds-analysis`\n\n## Commands Available\n\n| Command | What It Does | Credits |\n|---------|-------------|---------|\n| `get_match` | One match with its `odds` array: per book `p1_open`, `p1_close`, `p2_open`, `p2_close`, `games_spread1`, `games_total` | 2 |\n| `get_schedule` | Upcoming matches with `match_id`, to find what is priced | 2 |\n| `get_matches` | Past matches with `match_id`, for historical lines | 2 |\n| `search_players` | Resolve a name before searching the schedule | 1 |\n\n## Commands That Do NOT Exist\n\n| Not Available | Use Instead |\n|--------------|-------------|\n| `get_odds` | `get_match` and read `odds` |\n| `get_line_movement` | Compare `p1_open` with `p1_close` from `get_match`; only two points exist per book |\n| `get_live_odds` | Not available: pre-match only |\n| `get_player_props` | Not available |\n| `get_set_betting` | Not available |\n\n## Fields in the odds Array\n\n| Field | Meaning |\n|-------|---------|\n| `book` | Sportsbook name |\n| `p1_open`, `p2_open` | American odds at the first snapshot |\n| `p1_close`, `p2_close` | American odds at the last pre-match snapshot |\n| `games_spread1` | Handicap in games for player 1, present for a few books only (Pinnacle in the examples), else `null` |\n| `games_total` | Total games line, present for a few books only, else `null` |\n\nFor a match that has not started, \"close\" is the latest price, not yet final.\n\n## How It Works\n\n**Step 1: Find the match.** `get_schedule {\"days\": 2}` lists matches with `match_id`. If the user names players, filter by `player1` and `player2`. Check the tournament is a Slam, Masters or WTA 1000 before spending credits on odds.\n\n**Step 2: Pull odds.** `get_match {\"match_id\": \"184930\"}`. Read `odds`.\n\n**Step 3: Price table.** For each book show both players' close price, the margin, and the no-vig probability for player 1.\n\n```\nimplied(a) = 100 / (a + 100) if a > 0\n = -a / (-a + 100) if a < 0\nmargin = implied(p1) + implied(p2) - 1\nno_vig_p1 = implied(p1) / (implied(p1) + implied(p2))\n```\n\n**Step 4: Best price.** Per side, the best price is the highest number (+250 beats +230, -110 beats -120). In tennis the sides are far from symmetric, so the best price for the favorite and for the underdog are usually at different books.\n\n**Step 5: Movement.** `p1_close` against `p1_open` gives direction. Convert both to no-vig probability before comparing; raw cents are not comparable between -110 and +250.\n\n## Worked Example (real data, 2025 Wimbledon final, Sinner as player 1)\n\nPinnacle row: `p1_open 102`, `p2_open -115`, `p1_close -116`, `p2_close 105`.\n\n```\nopen : implied(+102) = 0.4950, implied(-115) = 0.5349, margin 2.99%, no-vig p1 = 0.4807\nclose: implied(-116) = 0.5370, implied(+105) = 0.4878, margin 2.48%, no-vig p1 = 0.5240\n```\n\nThe market moved about 4.3 percentage points toward Sinner between open and close. The other books at close, by margin: Betfair Exchange 0.7%, 888sport and William Hill 3.6%, FanDuel 4.6%, DraftKings 5.6%. Sinner won. One result says nothing about whether the close was right.\n\nCost: 2 credits for `get_match`.\n\n## Credit Usage\n\n| Operation | Credits |\n|-----------|---------|\n| Odds for one match | 2 |\n| Find ids for a day | 2 |\n| Odds for a full Slam round (64 matches) | 128 plus 2 to list them |\n| Odds for every covered match in a season | roughly 7,000 (3,574 calls in 2026 per the published credit rates) |\n\nState the count first for anything above a handful of matches.\n\n## Reading the Market\n\n- **Margin is lower at sharp books.** Betfair Exchange and Pinnacle showed 0.7% and 2.5% on the final; DraftKings 5.6%. Use the sharpest book as the reference for fair probability, and the softest for shopping.\n- **Lopsided prices hide a larger margin.** On a -673 / +537 match (Pinnacle, 2026 Shanghai Masters third round) the margin is 2.8%, but the favorite's and underdog's implied probabilities are 87.1% and 15.7%. See `odds-analysis` for why the longshot side carries more of the margin.\n- **Exchange prices can be inconsistent.** A back price on an exchange is not a two-sided quote. Use it as a signal, not a fillable price.\n- **Open and close are snapshots, not a time series.** Do not describe steam moves or timing.\n\n## Anti-patterns\n\n| What the Model Might Do | Why It's Wrong | Do This Instead |\n|---------------------|---------------|-----------------|\n| Look for a separate odds tool | There is none | `get_match` |\n| Assume `p1` is the favorite | It is the record position | Compute the favorite from the prices |\n| Compare movement in cents | -110 to -125 and +250 to +275 are different probability moves | Convert to no-vig probability |\n| Quote odds for a tour 250 | Empty array, not an error | Check the tournament tier first |\n| Say a book \"moved sharply\" | Only open and close exist | Describe the net move |\n| Mix `p1_open` from one book and `p2_open` from another | The pair must come from one quote | Always use the two sides of one row |\n\n## Output Format\n\n```\n[Player 1] vs [Player 2] [Tournament], [Round], [Surface]\n\nClose prices:\n Book P1 P2 Margin No-vig P1\n Pinnacle -116 +105 2.5% 52.4%\n ...\nBest price: P1 [price] @ [book]; P2 [price] @ [book]\nMove (Pinnacle, no-vig): 48.1% -> 52.4% for P1 (+4.3 pts)\n```\n\n## What to Do Next\n\n| What You Found | Next Action | Skill |\n|----------------|-------------|-------|\n| Prices in hand | Compute fair probability | `odds-analysis` |\n"
}SHA-256 of public snapshot: 2bba970d8ffa21c03130f77a1e8749b724898b4b4069e26d173f251ab7c36ec3