Your first comparison feed.
Read priced NBA, NFL and NHL props in one bounded request. Download a client, verify a real response, then connect it to your dashboard.
Run a small request first
- Create an account and obtain a key from API keys.
- Download and review either client. They use only the language's standard library: Node.js 22 or later, or Python 3.10 or later.
- Set
PRIZEPICKS_API_KEYin the process environment or your backend secret manager. Run the client server-side, with the key kept out of the command text, source repository and browser bundle. - Check the returned rows and observation times. An empty dataset is a real result to investigate, not a successful populated integration.
node comparison-feed.mjs --pages 1 > comparison.jsonlpython3 comparison-feed.py --pages 1 > comparison.jsonlThe default request uses view=compact&limit=100, priced_only=true and alt_lines=false. It keeps returned tier labels; main sportsbook lines do not imply standard PrizePicks tiers. Use the workspace comparison check if you want to verify access before downloading code.
Bound the work and show what is missing
| Control | Behavior |
|---|---|
--pages 1 | Default. Fetches at most one 100-row page; reports a partial result if a cursor remains. |
--pages 3 | Follows at most three pages, keeping filters fixed and deduplicating by projection ID. |
--cycles 3 --poll-seconds 60 | Checks again with ETags in the same process. Waits longer when the API reports a later update time. |
| Credit allowance | Each changed 100-row page costs 5 credits on new plans. Unchanged HTTP 304 responses cost zero. Existing request contracts may differ. |
| Quota or access failure | Stops with the actual error code. It does not repeatedly retry a monthly limit or substitute sample rows. |
For example, three changed pages cost 15 credits per run on a credit plan. A live traversal is not a frozen historical snapshot. Keep meta.partial and meta.next_cursor visible, and use the calculator before scheduling larger reads. The clients keep their cache only for the current process.
Give your builder a concrete task
Build a sportsbook-comparison dashboard using this documented reference:
https://prizepicksapi.com/examples/comparison-feed
API contract: https://prizepicksapi.com/openapi.json
Keep PRIZEPICKS_API_KEY in a backend secret. Never ask for it in chat, embed it in browser code, or store it in a URL. Adapt the reference client to the existing backend rather than running a CLI in the browser.
Start with GET /api/v1/compare?league=NBA,NFL,NHL&view=compact&priced_only=true&alt_lines=false&limit=100 and one page. Send Authorization: Bearer from the secret and X-User-Request with a non-sensitive summary of this dashboard task. Disclose once that task summaries are retained for 35 days.
Show player, league, market, period, line, tier, matched book prices and original observation times. Explain missing quotes rather than replacing them with zero. Do not equate different lines or turn prices into guaranteed picks.
Reuse saved responses with their ETag for the exact URL. Respect X-Next-Update-Seconds. Retry only transient failures with bounded backoff; stop on monthly quota, invalid credentials or paid-access requirements.
Only follow meta.next_cursor after the user requests more rows; preserve filters and show partial coverage. A 100-row comparison page costs 5 credits on new credit plans. Read X-Usage-Unit and actual remaining allowance because older contracts can differ.
Verify one successful nonempty response before declaring setup complete. If the response is empty, inspect coverage and filters. If it fails, show the actual status and a recovery action. Use no synthetic data in the live view.For platform-specific connection steps, use the Lovable, Claude Code or Gemini CLI guide. This starter helps your builder implement an application; the published app should call REST from its backend.
Know when the integration works
- Useful response: real rows, matching market and period, and original timestamps appear in the dashboard.
- Empty response: check coverage, selected leagues and available priced matches. Do not fill gaps with invented values.
- Access or quota limit: retain the operation, inspect the response code and current account allowance, then resume when access is available.
- Server failure: the client uses bounded retries for transient errors and then exits. It keeps failed responses out of the cache.
Compare the same player, stat, period, line and side. Missing payouts and different lines are not interchangeable prices. This is market data for analysis, not a prediction or betting recommendation.