Developer guide
How to get PrizePicks projections through an API
A practical integration guide: authenticate, filter player props, paginate the board, and handle timestamps, unknown values, and promotional lines.
A player-prop integration needs more than a player name and a number. It needs a stable offer ID, the market and period, the time the observation was collected, and a clear signal when coverage is incomplete. This guide walks through the PrizePicks API data product at prizepicksapi.com. It is an independent service, not an official PrizePicks developer API.
Start with the separate demo dataset
The public demo lets you build a parser without creating an account or spending your live request allowance. Its players and lines are fictional. Demo routes have /demo/ in the path, and their records explicitly carry is_demo=true. Keep this distinction in your own storage so a convenient development fixture never becomes a real alert.
curl "https://prizepicksapi.com/api/v1/demo/projections?league=NBA&limit=5"Create a key and make an authenticated request
Create an API key in your workspace and keep it on your server. The token is shown once when created. Send it in the Authorization header; do not put a secret in a browser bundle, query string, shared notebook output, or public repository. The example below reads the key from an environment variable.
curl "https://prizepicksapi.com/api/v1/projections?league=NBA&stat=Points&limit=100" \
-H "Authorization: Bearer $PRIZEPICKS_API_KEY"The response contains data, an array of projections, and meta, which describes the page and source health. A successful HTTP response means the request worked; it does not mean every upstream offer was collected or that the observation is current enough for your application.
Read the board a page at a time
Use the returned meta.next_cursor with the same league, stat, status, and search filters on the next request. Stop when next_cursor is null. The default page size is 50 and the maximum is 200. Store projection IDs rather than matching records by a player name alone: a player can have several stats, periods, and offer variants.
- league narrows the collection, such as NBA. Consult coverage before assuming another league is present.
- stat selects an exact market name, case-insensitively. Points and Points (Combo) are distinct markets.
- search matches a player name or team string. Combo offers may contain more than one player or team.
- status defaults to active. Use status=all if your application also needs known unavailable offers.
Preserve what the fields actually mean
| Field | How to use it |
|---|---|
| line | The provider base line. Do not substitute a flash promotion or assume promotional eligibility. |
| observed_at | When this service collected the observation. Use it to decide whether to show stale data. |
| source_updated_at | An upstream update time when supplied. A missing value remains null. |
| first_seen_at | The earliest observation retained here, not necessarily the original opening line. |
| selections | Separate More/Less availability and tier. Unknown is not the same as unavailable. |
A null payout multiplier is not zero, and a prop line is not a sportsbook probability. Preserve nulls through your client, database, and UI. The service currently exposes provider base lines; promotional flash lines and eligibility are not modeled. The API metadata states that limitation.
Treat errors and collection freshness separately
A 401 calls for fixing or rotating a key, not retrying continuously. A 400 usually indicates a filter or cursor problem. A 429 may mean a minute limit or the monthly quota is exhausted; inspect the machine-readable error code. Respect Retry-After when it is present, and back off on temporary service errors. MDN documents that Retry-After can specify a wait in seconds or an HTTP date.
For data freshness, inspect meta.source_status and observation_age_seconds. Partial means completeness is unverified. Stale means the latest recorded collection has aged beyond the service freshness threshold. Your product should choose its own freshness requirement and display the observation time. A shared server-side cache can also keep every end user from requesting the same board separately.
Sources & reference
Published by PrizePicks API, an independent data service. Not affiliated with or endorsed by PrizePicks.
Guides explain our documented API. Automated reports use stored observations, disclose their collection time, and skip stale inputs. Reports are historical records, not recommendations, results, or live odds. Check current source health.