Hockey research, in your workflow.
Read published forecasts, explore historical FSPI and bring saved model context into your own tools. API reads use existing results.
One key. Only the scopes you need.
Create a key from your account, copy it once and store it outside your source code. Send it as a Bearer credential on each request.
# Set NHLFUTURES_API_KEY through your secret manager or shell environment.
export NHLFUTURES_API_BASE='https://leaguefutures.com/api/pro/v1'
curl --fail-with-body -i \
-H "Authorization: Bearer $NHLFUTURES_API_KEY" \
"$NHLFUTURES_API_BASE/models"Keys belong in a server, script or private notebook environment. Do not place them in browser JavaScript, query strings or public repositories. Revocation is immediate; expired keys and accounts that lose Pro or verified access cannot authenticate.
Read endpoints
All endpoints below use GET /api/pro/v1/… with Bearer authentication. No API request collects data, fits a model or starts a simulation.
| Resource | Returns | Query and availability |
|---|---|---|
/status | API availability and current capabilities. | No query parameters. |
/models | Published model catalog and research status. | No query parameters. |
/forecasts | Saved forecast results for a model or selected team. | modelId (default champion), teamCode; optionally publicationId or asOfUtc. |
/publications | Available saved publications for a model. | modelId, fromUtc, toUtc, limit (1–100), cursor. Filters use forecast origin time. |
/changes | Differences between two retained forecast publications. | modelId, teamCode, fromPublicationId; optionally toPublicationId (latest by default). |
/history | Saved forecasts or historical team index values. | dataset=forecasts: modelId and date, or from/to/limit/cursor. dataset=index: teamCode/from/to, up to 366 days. |
/injuries | Saved injury assumptions, attribution and roster context. | teamCode and modelId. This is model context, not a live injury wire. |
/odds | Model-implied odds, where saved probabilities support them. | modelId (for example next-game-independent), teamCode. source=market is not enabled. |
/cme | Reserved for a future licensed CME / ETF integration. | Currently returns rights_not_enabled. No market feed is activated. |
The OpenAPI specification defines each schema, scope and query constraint. Missing data stays explicitly unavailable. Injury data reflects retained model information; model-implied odds are not bookmaker or exchange quotes. CME and licensed market requests return 403 rights_not_enabled.
Read a forecast. Keep its identity.
Select a saved model and, optionally, a team. Probabilities are fractions from 0 to 1. FSPI values use the native 7,500-base index.
curl --fail-with-body --get \
-H "Authorization: Bearer $NHLFUTURES_API_KEY" \
--data-urlencode 'modelId=champion' \
--data-urlencode 'teamCode=CAR' \
"$NHLFUTURES_API_BASE/forecasts"Use /publications to discover retained publication IDs, then request that exact ID for a reproducible result. You can instead specify an ISO timestamp with a timezone using asOfUtc; do not combine it with publicationId.
# Use a publication ID returned by /publications.
curl --fail-with-body --get \
-H "Authorization: Bearer $NHLFUTURES_API_KEY" \
--data-urlencode 'modelId=champion' \
--data-urlencode "publicationId=$PUBLICATION_ID" \
"$NHLFUTURES_API_BASE/forecasts"Publication-feed time filters refer to forecast origins. An origin date does not establish when a result was first published or publicly available. If publishedAtUtc is unknown, it remains unknown.
Use /changes to compare two saved publication IDs. Preserve its window-shift flag: a changed forecast horizon is not a like-for-like revision. Differences describe the saved results; they do not attribute a change to an injury, trade or other cause.
Read freshness and status with the values
- Response envelope
apiVersion,resource,dataandmetaidentify the response. Errors replacedatawitherror.codeanderror.message.- Served time
meta.servedAtUtcis the response time. It is not the forecast origin, source observation time or publication timestamp.- Execution and lineage
meta.executionModeispublished_read_only. Preserve the model, publication, origin and source identifiers returned with the data when comparing or archiving results.- Research status
- Keep canonical, experimental and calibration labels attached to each model and component. An available preset is not automatically validated. Unavailable fields must not be treated as zero.
- Cache validation
- Use the returned
ETagwithIf-None-Match. Authentication happens before a possible304; those requests still count toward usage. Responses vary byAuthorization. - Request support
X-Request-Idandmeta.requestIdidentify a request. Retain that ID when reporting an issue; never include your API key.
Usage, limits and errors
The account API page shows your current shared allowance and per-key limits. Read the response headers instead of assuming a fixed quota.
- Account minute limit
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset.- Account daily limit
X-RateLimit-Day-Limit,X-RateLimit-Day-Remaining,X-RateLimit-Day-Reset.- Individual key limit
X-RateLimit-Key-Limit,X-RateLimit-Key-Remaining,X-RateLimit-Key-Reset. Reset headers use Unix seconds.- 429 · Rate limited
- Wait for
Retry-Afterbefore retrying. Limits are shared across concurrent clients using the same account or key. - 401 / 403 · Access
- Check expiry, revocation, verification, Pro access and the required scope.
rights_not_enabledmeans the requested licensed feed is unavailable; creating another key will not enable it. - 503 · Unavailable
pro_api_disabledmeans requests are not enabled. A source or service failure can also make saved data temporarily unavailable. Do not replace a failed response with assumed data.
What comes next
More frequent access is useful only when a new publication is available. Refresh schedules, delivery guarantees and licensed feeds are not activated by creating a key.
Publication changes
Richer forecast-revision and delta views, with retained identities and reproducible as-of comparisons.
More forecast windows
Calendar and matchup horizons, plus intraday refresh frequencies after the publication workflow and costs are qualified.
CME / ETF context
Pricing integration depends on data rights and a licensed source. It is currently unavailable; no live or delayed feed is promised.