Flash Props Api

io.github.iFan6oyPublished by GitHub account iFan6oyv1.4.1Updated Oct 26, 2026

Flash Props API: player-prop analysis, projections, evidence, and line movement over REST/MCP.

VerifiedStreamable HTTPWeb executableFinanceData & Analytics

Overview

AI-generated overview

Hosted sports player-props API that lets an assistant browse games, props, Flash projections, evidence and line movement across sports and esports.

What you can do
  • List supported sports with live status and projection capability, and read each sport's market vocabulary
  • List today's games with props, resolve a matchup to an event id, and fetch every player prop for one game
  • Scan the whole slate for props, filter props for one player, and rank boards by gap, form or sample strength
  • Pull season context, a full evidence stack for a single prop, chronological line/odds history, and the biggest line movers in a window
When to use it
Useful when you want an assistant to answer questions about posted player-prop lines, Flash projections, line movement or player form without building a sports-data integration yourself. Read-only analysis only; it is not a betting or wagering tool.
Requirements
Remote streamable HTTP endpoint; no local install. A Flash Props API key sent as an Authorization Bearer token is needed for board data, while list_sports and get_market_metadata work anonymously. Free tier available; higher tiers are paid and raise quotas and row caps.
Before you install
The API key is a secret: keep it out of commits, URLs and shared collections. Paid tiers cost money and requests are rate-limited and row-capped per tier, so heavy use can hit quota walls. Several tools return only teasers or partial data on lower tiers. Data is informational only and the service is not a sportsbook.

Installation

In SourceWeft

  1. Open Flash Props Api in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.iFan6oy%2Fflash-props-api/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "flash-props-api": {
      "type": "http",
      "url": "https://api.flashodds.live/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

Flash Props API + MCP

Flash Props API is a player-props API and MCP server by Flash AI Solutions for posted lines, Flash projections, evidence, context, and line movement across sports and esports.

This repository is the public connector and metadata surface for the hosted Flash Props API and MCP service. There is no proprietary Flash Props backend server to install from this repository. Point your client at the hosted endpoint and authenticate with a Flash Props API key for board data.

[Flash Props API MCP server]

Canonical Flash Props links

Explore the API with Postman

The Flash Props public Postman workspace contains the collection for graphical exploration and forking. To get your first successful request without an SDK, start with the Postman quickstart, create a free key, then run the List supported sports with live status + capability request inside the Start here folder.

If Postman isn't accessible from your browser, download the credential-free collection JSON and use Postman's Import action. Our API host maintains that JSON as the reference copy; the marketplace copy may lag after a product release.

Never paste your key into GitHub, a URL, a shared collection variable, or a screenshot. The collection's apiKey variable is intentionally empty; set your key privately in Postman before running authenticated requests.

Try the REST API in two requests (Node 20+)

New to sports data integrations? Run the dependency-free first-request example. It reads the current sport catalog, then fetches the market vocabulary for a sport you choose. This is a read-only example, with no wagers, betting automation, SDK install, or paid plan required.

  1. Get a free Flash Props API key.
  2. Put the key in your local FLASH_PROPS_API_KEY environment variable. Keep it out of commits and query strings.
  3. Run node examples/first-request.mjs for CS2 or node examples/first-request.mjs nfl for NFL.

On macOS/Linux, one shell-safe way to enter the key without saving it to command history is read -rs FLASH_PROPS_API_KEY && export FLASH_PROPS_API_KEY. On PowerShell, use $env:FLASH_PROPS_API_KEY = Read-Host "Flash Props API key". Clear the variable after using it.

The script checks for 401, 403 and 429 without leaking your key or silently retrying into a quota wall. It uses GET /api/v1/sports as the source of truth for current coverage; its chosen sport may have no live board right now. Tests are included under examples/first-request.test.mjs, using mocked responses and no network.

Want to connect an AI agent instead? Use the remote MCP endpoint below with the same key and plan. Prefer the live public contract if a third-party directory's cached feature list is older than the hosted server.

Connect

Streamable HTTP endpoint:

https://api.flashodds.live/mcp

Send your API key in the Authorization header:

Authorization: Bearer <your_api_key>

Anonymous access works for capability discovery (list_sports, get_market_metadata) so a client can inspect current coverage on first run. Retrieving board data requires at least a free key. Get one at https://api.flashodds.live/billing/free.

Claude Desktop

Add to your claude_desktop_config.json:

json
{  "mcpServers": {    "flash-props": {      "type": "streamable-http",      "url": "https://api.flashodds.live/mcp",      "headers": { "Authorization": "Bearer YOUR_API_KEY" }    }  }}

Tools

The access ladder below is generated from the hosted contract. Do not edit it by hand.

ToolAccess
list_sportsAnonymous capability discovery
get_market_metadataAnonymous capability discovery
list_gamesAnonymous preview (first 5); Free+ for the full slate
get_game_propsFree+
scan_propsAnonymous preview (first 5 rows); Free+; rows capped per tier (Free 15 rows, Builder 100, Pro 3,000, Enterprise 5,000)
find_gameFree+
find_player_propsFree+
get_player_contextFree/Builder basic; Pro full
get_prop_evidenceFree teaser; Builder basic; Pro full
get_prop_historyBuilder limited (latest 25 points); Pro full
scan_moversBuilder limited (top 25 movers); Pro full
get_leadersFree top 3; Builder top 10; Pro top 100

What each tool returns:

  • list_sports: every sport with live status, data freshness, and projection/context capability
  • get_market_metadata: market labels, families, scope, and whether a market is modeled
  • list_games: games with props for a sport
  • get_game_props: all player props for one game
  • scan_props: market-wide prop scan across the slate
  • find_game: resolve team names to an event id
  • find_player_props: every active prop for one player
  • get_player_context: season baselines, recent form, and deeper context
  • get_prop_evidence: book line, Flash line, gap, form, confidence, splits, movement
  • get_prop_history: chronological line and odds history for a prop
  • scan_movers: biggest line movers in a window
  • get_leaders: ranked boards for gap, form, and sample strength

REST and MCP share the same entitlement shaping, so a key sees the same product tier regardless of transport.

Provider-driven coverage

Do not hard-code a list of sports with Flash projections. Coverage is resolved from the server's registered model providers and can vary by sport + market.

Use list_sports (or GET /api/v1/sports) to inspect projectionCapability, effectiveProjection, and contextCapability, then use get_market_metadata to determine whether a specific market is modeled. A partially modeled sport can legitimately expose Flash projections for one stat while keeping another stat posted-lines-only.

Missing analysis is reported explicitly. Flash Props does not fabricate a projection to fill an unsupported market.

Reading projections and board snapshots

  • Check basis on every projection. current_season is built from this season. prior_season is a prior-season baseline and must never be presented as current form; basisNote and seasonId explain which season it came from.
  • Use snapshotId to tell whether numbers describe the same board. Equal snapshotId values on sports, games, and props responses mean counts and rows came from the same logical board. A mixed consistency value means the response is partial, so do not compare its counts against rows from another snapshot.

Tiers

Generated from the hosted contract. Do not edit by hand.

  • Free: $0, 300 requests/day, 10 requests/minute, 15-row scans, evidence teaser, context basic, history none, movement none, top 3 leaders
  • Builder (internal id starter): $19/mo, 25,000 requests/day, 120 requests/minute, 100-row scans, evidence basic, context basic, history limited, movement limited, top 10 leaders
  • Pro: $49/mo, 150,000 requests/day, 600 requests/minute, 3,000-row scans, evidence full, context full, history full, movement full, top 100 leaders
  • Enterprise: custom limits

See current pricing and the REST reference at https://api.flashodds.live/.

Contract

Tier limits, entitlements, and the MCP tool ladder in this README are generated, not written by hand. The hosted API publishes a keyless, machine-readable contract, and this repository vendors a copy at contract/flash-props-contract.json.

Machine sources, in order of authority:

  • GET https://api.flashodds.live/contract.json: tiers, quotas, entitlements, MCP tools and access, sports vocabulary, projection and snapshot rules. Static per API release.
  • GET https://api.flashodds.live/api/v1/sports (requires a Free key) or the anonymous MCP list_sports tool: runtime state. Which sports are modeled, live, or fresh right now lives here, never in the contract or this README.

Maintainers:

node scripts/contract.mjs sync          # regenerate README blocks and server.json versionnode scripts/contract.mjs check         # offline drift gate (runs on every push and PR)node scripts/contract.mjs check --live  # also compare the vendored copy to the hosted contractnode scripts/contract.mjs links         # check every https link in this README

CI fails when the generated blocks are stale, when prose quotes a quota or price the contract does not contain, when a retired tier name appears, when a frozen list of modeled sports appears, when server.json disagrees with the contract version or MCP endpoint, or when the README and contract disagree about which tools exist. A daily scheduled job also compares the vendored contract against the hosted one, so drift is caught even when this repository does not change.

Disclaimer

Data is informational only. Flash Props is not a sportsbook and is not affiliated with any league, team, player, sportsbook, or DFS operator.

Links

Source: README.md at commit c3f9033

Tools

12

list_sports

List sports with live status + capability

List every sport supported by Flash Props API with its live status and how deep the Flash model goes. Read-only. No side effects. Rate-limited per your tier. Returns { sports: Array<{ id, name, category, enabled, status, activeGames, activeProps, projectedProps, projectionCapability, effectiveProjection, contextCapability, marketFamilies, supportedMarkets, sources, lastFetchedAt, cacheAgeSeconds, shapeCanaryTripped, legalLine, notes, dataStatus, dataReason, projectableMarkets, projectionBasis, coverage, snapshotId, event, season }> }. id is what you pass as the sport parameter to other tools. status: "live" = props posted now, "idle" = none posted now but lines were archived recently, "offseason" = no lines archived for an extended period (observed, never a calendar). snapshotId identifies the exact board the counts describe. projectionCapability is the structural model ceiling; effectiveProjection tempers that by what is actually posted right now. contextCapability "deep" means a registered Flash pack can serve player context; "none" means it cannot. Call this tool instead of hard-coding which sports are modeled. enabled=false means the sport is outside your tier. When to use: to discover valid sport ids, or to check which sport actually has projections/context before asking for them. When not to use: if you already know the sport id and just want its props.

Takes no parameters.

get_market_metadata

Market metadata (stat vocabulary) for a sport

Return the machine-readable stat vocabulary for a sport: for each live market, its label, family, scope (map1/maps13/full_game), unit, display order, and whether a Flash projection is supported (with a reason when not). Read-only. No side effects. Rate-limited per your tier. Returns { sport, count, markets: Array<{ statKey, label, family, scopeKind, scope, scopeLabel, unit, displayOrder, uiGroup, projection: { supported, reason }, contextSupported, lineOnly, alternateLine }> }. This is what turns a raw stat key like "kills_on_game_1" into a labeled, scoped market so you can group props without guessing. Projection support is provider-driven per market, so partially modeled sports stay honest. When to use: after scan_props / get_game_props, to explain or group the raw stat keys you got back. When not to use: if you only need one sport's existence/access, list_sports already carries marketFamilies.

Parameterssport

list_games

List today's games

Return today's games that have player props available for a sport. Read-only. No side effects. Requires an API key; rate-limited per your tier. Returns: { sport, count, games: Array<{ id, sport, homeTeam, awayTeam, startTime, live, source }> }. id is the eventId to pass to get_game_props (prefixed ud- for Underdog); live is true when the game is in progress; source is "underdog". Live games sort first; scheduled games follow. Typical workflow: call list_games to discover eventIds, then pass an eventId to get_game_props. If sport is omitted the server selects the active in-season league automatically. Returns count=0 with an empty games array (not an error) when no props are posted yet for the day. When to use: to browse all games on the slate or to find an eventId before calling get_game_props. When not to use: if you already have the eventId, skip this and call get_game_props directly. Use find_game instead when you know the team names but want a single-game eventId without browsing the full slate.

Parameterssport

get_game_props

Get player props for a specific game

Fetch all player props for one game identified by eventId. Read-only. No side effects. Requires an API key; rate-limited per your tier. Returns: { eventId, sport, homeTeam, awayTeam, startTime, props: Array<{ player, stat, line, overOdds, underOdds, bookCount, gameState?, flashProjection? }>, sources: string[], fetchedAt, delayed, snapshotId, snapshotConsistency }. flashProjection is present when that sport + market has a registered Flash model and a player baseline is available; it is { value, sampleN, method, marketKey, basis, seasonId, basisNote } and is never fabricated. basis prior_season means a prior-season baseline, never current form. overOdds and underOdds are American-format integers (e.g. -110, +115); null when odds are not available. The stats parameter filters to specific markets (e.g. "points,rebounds" for basketball, "strikeouts,hits_allowed" for MLB). Typical workflow: (1) call list_games to get eventIds, (2) call get_game_props with the eventId. Alternatively, call find_game with team names to resolve the eventId when you know the matchup. Event ids are prefixed ud- (Underdog Fantasy source). Returns an error when the event id is not found, the game has ended with no active props, or lines have not been posted yet. When to use: when you have an eventId and want all props for that specific game. When not to use: use scan_props instead when you want a cross-game market view. Use find_player_props when you know the player name but not which game they are in.

ParameterssportstatseventIdrequired

scan_props

Scan all props across today's slate (market-wide feed)

Flatten every active player prop across all of today's games for a sport into a single list. Read-only. No side effects. Requires an API key; rate-limited and row-capped per your tier (Free 15 rows, Builder 100, Pro 3,000, Enterprise 5,000). Returns: { sport, stat, count, rows: Array<{ player, stat, line, overOdds, underOdds, bookCount, gameState?, flashProjection?, eventId, sport, homeTeam, awayTeam, startTime, source, fetchedAt }>, snapshotId, snapshotConsistency }. Each row is a player prop merged with its event context; use homeTeam/awayTeam for matchup context. overOdds/underOdds are American-format integers; null when odds unavailable. Use scan_props when you need a broad cross-game market view. Returns count=0 with an empty rows array (not an error) when no props are posted for the day yet. When not to use: use get_game_props when you already have an eventId; use find_player_props for one player.

Parametersstatlimitsport

find_game

Resolve team names to an event id

Translate a matchup (home team + away team) into the eventId needed by get_game_props. Read-only. No side effects. Requires an API key; rate-limited per your tier. Use this when you know the teams playing but don't have the eventId. On success returns: { eventId }. Pass that id straight to get_game_props. On failure returns an error explaining that the game was not found on today's board. If multiple games match the team names (rare), returns the first match sorted by start time. Matching is case-insensitive substring containment against the full team name. When not to use: use list_games to browse a slate, or get_game_props directly if you already have the eventId.

Parametersawayrequiredhomerequiredsport

find_player_props

Find all active props for a player

Every active prop for one player across today's board for a sport; same rows as scan_props, filtered by name (exact normalized match preferred, case-insensitive contains match as a fallback; see matchType in the response) instead of stat. Read-only. No side effects. Requires an API key. When to use: you know the player but not which game or event they are in, and you want their posted lines. When not to use: get_prop_evidence explains ONE prop with its line, gap and form; get_player_context gives season baselines and recent form but no posted lines; scan_props is the whole board.

Parametersnamerequiredsport

get_player_context

Season baselines, recent form, and context for a player

Season context from the sport's registered Flash pack: per-market baselines, recent form, and sport-native splits. Free and Builder receive the same basic context shape as REST; Pro adds the dense recent map/game log when available. If the sport has no registered pack or the player is unmatched, returns an honest empty context, never fabricated data. Use list_sports first when you need to discover which sports currently advertise deep context. When to use: "what is this player averaging", "how has this player been playing lately". When not to use: it returns NO posted lines; use find_player_props for the board and get_prop_evidence for one prop against its line.

Parametersnamerequiredsport

get_prop_evidence

One prop's evidence: book line, Flash line, gap, form, splits, movement

Assemble the whole story of a single prop in one call. Read-only. No side effects. Requires an API key and is tier-shaped exactly like REST: Free gets the book/Flash/gap teaser, Builder adds recent form + Confidence summary + movement delta + teaser splits, and Pro gets the full evidence stack including movement series and deep splits. Paywall metadata says exactly which fields are withheld. No picks, no advice. Available when the sport has a registered Flash provider; otherwise returns found:false with a reason, never fake data. When to use: explain one prop end-to-end. When not to use: scan_props for broad discovery or get_player_context for a player overview.

Parametersstatrequiredeventsportplayerrequired

get_prop_history

Line history for a prop (Builder+)

Chronological line/odds history for a player prop, with opened/current/movement. Free is locked with a structured tier_required response naming Builder as the first unlock. Builder receives the most recent history window; Pro receives full history. History accrues from when archiving started, so early results may be short. When to use: "has this line moved since it opened", "what did this prop open at", the timeline of ONE player prop. When not to use: scan_movers ranks movement across the whole board; get_prop_evidence already includes the movement delta beside the line.

Parametersstateventlimitsportplayerrequired

scan_movers

Biggest line movers (Builder+)

Props whose line moved most within a lookback window (default 24h, max 7d), sorted by absolute movement. Free is locked with Builder as the first unlock. Builder gets a limited board; Pro gets the full movement board. When to use: "biggest movers", "which lines moved the most today", steam across a sport. When not to use: the history of one prop is get_prop_history; the current board without movement is scan_props.

Parametersstatlimitsincesport

get_leaders

Rankings: top gaps, recent form, sample strength (tiered)

Ranked boards for a sport with a registered Flash pack. Read-only. No side effects. Tier-shaped exactly like REST: Free sees the top 3 teaser, Builder the top 10, and Pro the full board. metric=gap ranks Flash-vs-book gaps; metric=form ranks recent mean vs Flash Line; metric=sample ranks baseline size. Paywall metadata includes totalAvailable and the next unlock when rows are capped. No picks. Use list_sports to discover which sports have deep context. When to use: "where does Flash disagree most with the books", "biggest projection gaps", "who has the strongest sample". When not to use: one player is get_player_context; the posted board is scan_props; one prop end to end is get_prop_evidence.

Parametersstatlimitsportmetric

Version history

1
  1. v1.4.1LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts