Beat the Market · read-only API

Every published
player–market pair.

Programmatic access ships with Beat the Market at $50/month. It is not open for self-serve signup right now; write with your use case and we will set an account up. Subscribers issue short-lived tokens from this page.

Version 1 contract

The distribution and its caveats.

Beat the Market includes the active week only. The API never exposes the 2025 prediction archive. Coverage varies by slate, participation, sportsbook availability, and whether a publishable distribution can price the quoted line.

Current week only

The API serves only the active weekly snapshot. Requests for 2025 or any non-current week fail closed; historical predictions are never exposed.

Every observed contract

The contract endpoint joins each fresh sportsbook Over/Under side to its canonical player distribution and reports coverage failures instead of silently inventing a price.

Forecast identity

Model ID, version, status, use, active-marginal flag, and point-estimate source travel with every player–market pair.

Fair-price semantics

Win, push, and loss mass are explicit. Fair odds condition on a decisive result; expected value keeps pushes at zero profit.

Current registered stat families
pass_attemptspass_ydsrush_attemptsrush_ydstargetsreceptionsreception_ydsdefensive_sacks

The response is the source of truth for actual coverage. A player appears only when a canonical record is published for that pair.

How access works

Tokens come from your subscription.

The research site is free and needs no account, but it does not include the API. With an active Beat the Market subscription you can mint a short-lived bearer token from this page while signed in; it expires automatically and is revoked the moment the subscription lapses. For sustained high-volume use, write [email protected] with your expected request volume.

Fair-price request
GET /api/v1/player-contracts
Current slate only
curl "$BACKFIELDIQ_BASE_URL/api/v1/player-contracts?season=2026&week=1&book=DraftKings&include_pmf=true" \
  -H "Authorization: Bearer $BACKFIELDIQ_API_TOKEN"
Each fresh observed side includes offered odds, fair win/push/loss mass, push-adjusted fair American and decimal odds, before-fee expected value, the authoritative point estimate, and the underlying distribution. Exchange fees and fill assumptions are labeled separately. Stale quotes fail closed.
Distribution request
GET /api/v1/player-markets
Bearer API token or service key
curl "$BACKFIELDIQ_BASE_URL/api/v1/player-markets?season=2026&week=1&market=reception_yds&include_pmf=true" \
  -H "Authorization: Bearer $BACKFIELDIQ_API_TOKEN"
Filters: season, week, game_id, player_id, market, snapshot_id, cursor, limit, and include_pmf. The market filter accepts either a stat key or its player_* market key. Maximum page size: 500 summary rows or 25 rows with PMFs.
PMF semantics

include_pmf defaults to false. Every row reports pmfAvailable and pmfIncluded. When requested and available, the canonical support and probabilities are included. Parametric fallbacks remain summary-only.

Snapshot semantics

Omitting season and week selects the current serving snapshot. Unsupported weeks return 404. Reuse meta.snapshot.id as snapshot_id while paginating; a changed snapshot returns 409 instead of silently mixing versions.

Response shape
{
  "meta": {
    "snapshot": { "id": "…", "season": 2026, "week": 1 },
    "model": { "game_intelligence_id": "game_intelligence_v1" },
    "pmf_requested": true,
    "next_cursor": 100
  },
  "data": [{
    "game_id": "2026_03_ARI_SF",
    "player": { "id": "…", "name": "…", "team": "SF" },
    "market": "reception_yds",
    "market_key": "player_reception_yds",
    "market_distribution": {
      "schemaVersion": "player_market_distribution_v1",
      "distributionStatus": "exact_shadow",
      "forecast": { "modelId": "…", "modelVersion": "…", "use": "shadow_explanatory" },
      "bettingApproval": { "mayEnterPickEvaluation": false, "pickAuthorized": false },
      "distribution": {
        "family": "…",
        "summary": { "mean": 0, "p10": 0, "p50": 0, "p90": 0 },
        "pmfAvailable": true,
        "pmfIncluded": true,
        "support": { "kind": "integer", "minimum": 0, "maximum": 1, "step": 1 },
        "probabilities": [0.5, 0.5]
      },
      "provenance": { "kind": "served_model_output", "artifact": "…", "summaryDerivation": "…" }
    }
  }]
}
Access boundary: The API is part of Beat the Market only. Tokens are short-lived and issued to the signed-in subscriber, so cancelling a subscription ends programmatic access at the end of the paid period. Durable keys, metering, and published rate limits are not yet live; contact [email protected] before building against sustained high volume.