prizepicksapi

League coverage

NFL, NHL, and soccer props: check coverage before you build.

League support is a fact about stored observations, not a product promise. The table below is measured from the coverage endpoint now; build only on leagues that appear there with fresh collection times.

Leagues stored right now

Source: partialMeasured from stored observations

Latest collection: .

LeagueActive offersMarketsLast observed
CFB3,29123Oct 28, 2026, 04:13:03 AM UTC
CS22304Oct 28, 2026, 04:16:03 AM UTC
LOL1802Oct 28, 2026, 04:17:03 AM UTC
NBA3,36731Oct 28, 2026, 04:18:04 AM UTC
NFL3,91650Oct 28, 2026, 04:10:03 AM UTC
NHL49713Oct 28, 2026, 04:11:03 AM UTC
SOCCER8,82716Oct 28, 2026, 04:14:04 AM UTC
TENNIS7048Oct 28, 2026, 04:15:03 AM UTC
WNBA39312Oct 28, 2026, 04:12:03 AM UTC

A league listed here has stored observations; active offers counts only records confirmed in the latest collection within ten minutes, so it can be zero for a stale or out-of-season league. Leagues not listed are not covered. Inspect source health →

Ask the API which leagues exist

curl "https://prizepicksapi.com/api/v1/coverage" \
  -H "Authorization: Bearer $PRIZEPICKS_API_KEY"

Each coverage row has league, projection_count (offers currently confirmed active), first_observed_at, last_observed_at, the distinct markets observed, the overall source status, history_available, and results_available (always false). An empty list means no live collection has been stored. The demo coverage endpoint describes fictional fixtures and says nothing about live leagues.

How the league filter behaves

league is upper-cased and matched exactly against the stored value, so nfl and NFL are the same request. It does not do fuzzy or alias matching: a code that is not stored returns 200 with an empty data array. That is why a client should validate a requested league against the coverage response instead of trusting user input.

Gate a feature on verified coverage

// Fail early if a league is missing or not recently observed.
async function requireLeague(league, maxAgeHours = 24) {
  const res = await fetch("https://prizepicksapi.com/api/v1/coverage", {
    headers: { Authorization: "Bearer " + process.env.PRIZEPICKS_API_KEY },
  });
  const { data, meta } = await res.json();
  const row = data.find((r) => r.league === league.toUpperCase());
  if (!row) throw new Error(league + " is not in observed coverage");
  const ageH = (Date.now() - Date.parse(row.last_observed_at)) / 3.6e6;
  if (ageH > maxAgeHours) throw new Error(league + " last observed " + ageH.toFixed(1) + "h ago");
  return { markets: row.markets, active: row.projection_count, source: meta.source_status };
}

Sports differ; do not hard-code their shape

Market names and periods come from the source and differ by sport. Read market.stat and market.period values from the data rather than assuming basketball conventions apply to football, hockey, or soccer. Combo and team markets can name several participants in player.name. Build filters from the markets list in coverage so new or seasonal markets appear without code changes.

What we can and cannot say today

  • NBA records are stored and shown on the NBA guide with collection timestamps.
  • The collector works from a fixed allowlist of upstream league identifiers. Being on that allowlist only means collection can be configured; it does not mean records are being stored.
  • A one-off research probe recorded the upstream source publishing NFL projections. That is evidence the source has NFL boards, not that this service currently stores them.
  • No local evidence currently shows stored NHL or soccer records. Treat them as unavailable unless they appear in the table above.
  • Seasonality matters: a league with no current games may legitimately have few or no active offers.

Frequently asked questions

Does the API cover the NFL?

Check the live coverage table on this page or GET /api/v1/coverage. A league is covered when it appears there with recent last_observed_at values; no league is promised beyond what is stored.

What league code should I use for soccer or hockey?

Use the exact league string returned by the coverage endpoint. Do not guess codes; a filter for a league that is not stored returns an empty page, not an error.

References

Current API documentation ↗Machine-readable OpenAPI contract ↗Current observed coverage ↗

PrizePicks API is an independent data service. It is not affiliated with or endorsed by PrizePicks. Observations, completeness, and freshness are separate claims; consult source status before relying on a stored line.