PrizePicks streaming and webhooks API.
For developers who want PrizePicks line changes pushed to a server, over Server-Sent Events on every plan or signed webhooks on Production, and who can treat plan delay and source coverage as two separate numbers.
Plan delay is ours: Free 300 seconds, Developer 60, Production none added. Source coverage is separate, and no plan changes it. No added plan delay is not instantaneous.
Not for
- Instantaneous delivery of every PrizePicks change
- No added plan delay removes our plan delay only. Collection and upstream timing still apply. Read more
- One always-on stream on the Free or Developer allowance
- A connection held open all month uses about 18,200 credits. Use ETag polling or Production. Read more
- Browser clients that hold the API key
- The stream takes the key in a header only. Run the consumer on your server. Read more
- Multi-book consensus or cross-book odds across many sportsbooks
- A broad odds API. See the decision tree, or pair the two. Read more

How many alerts to expect, last 24 hours
| League | Line moves | Per hour |
|---|---|---|
| NBA | 24,741 | 1,030.9 |
| UCL | 14,403 | 600.1 |
| NFL | 11,464 | 477.7 |
| College Football | 3,895 | 162.3 |
| NHL | 992 | 41.3 |
| Tennis | 215 | 9 |
| College Basketball | 136 | 5.7 |
| CS2 | 61 | 2.5 |
55,944 moves across all leagues, including quarter and half boards. Your threshold decides how many reach the channel. See them
Plan delay and source coverage are different numbers
Plan delay is a rule in our code, stated on each stream response in X-Stream-Delay-Seconds. Source coverage is what we have managed to observe. A plan can remove the first. Nothing on a plan changes the second.
| Step | Who sets it | What to expect |
|---|---|---|
| The source publishes a change | PrizePicks | Outside our control and not measurable by us directly. |
| We receive it | Collectors | Streamed changes apply to offers we already know. New offers wait for the board cycle, every few minutes, and can lag up to about 15 minutes. |
| We detect a pulled line | Collectors | From streamed status when sent, otherwise from complete league boards, about every 30 to 70 minutes per league. |
| Your plan delay | Your plan | Free 300 s, Developer 60 s, Production none added. |
| We send it to you | Our server | The stream reads new events every two seconds. Webhook retries add time when your endpoint fails. |
Measured numbers belong beside their date. /status shows live connection state, detected stream gaps and board coverage separately, and /reliability and /incidents keep the record over time.
Connect to the stream
curl -N 'https://prizepicksapi.com/api/v1/stream?league=NBA' \
-H "Authorization: Bearer $PRIZEPICKS_API_KEY" \
-H "Last-Event-ID: LAST_ID_YOU_APPLIED"A connection lasts about 285 seconds, then the server sends event: reconnect with the cursor and closes. Reconnect with Last-Event-ID and it continues from there. Concurrent connections: Free 1, Developer 3, Production 10.
What streaming costs
Each connection costs 2 credits, so reconnecting is what you pay for. One stream held open for a 30-day month is about 18,200 credits.
| Plan | Monthly credits | If streaming used all of them |
|---|---|---|
| Free | 100–500 | About 19 hours of one stream |
| Developer | 10,000 | About 16 days of one stream |
| Production | 50,000 | About 2.7 streams held open all month |
Webhook deliveries are not metered in credits, and Production includes them. For a short job, poll /api/v1/changes with a saved cursor and If-None-Match: a page costs 1 credit per requested 100 rows and an unchanged 304 costs zero.
What the feed does and does not carry
- It carries offer.new, offer.changed, offer.unavailable and offer.restored: line, tier, availability and status.
- Score-only updates do not emit events. Read live_score on /api/v1/projections.
- A dropped source connection can leave a gap until the next board reconciles it. Reconcile from the board on a schedule rather than treating the feed as the whole truth.
- Webhooks are Production only: HMAC-SHA256 signed, return 2xx within seven seconds, up to five attempts, deduplicate on the event ID.
Check the fit with a real offer
Keep the board open beside the feed for one game window. Note when a line moved, when the event arrived and what observed_at says, then decide whether that timing fits your product. Do this on your plan, since its delay is part of what you are measuring.
Try it
Endpoint docs:GET /api/v1/streamWebhooksGET /api/v1/changesPlans and limits
Frequently asked questions
Does no added plan delay mean instant PrizePicks updates?
No. It means we hold nothing back for your plan. An event still waits for the source to publish, for our collectors to receive it, and for our server to read it, which it checks every two seconds. New offers can take longer because they are discovered on the board cycle.
How much does the PrizePicks live feed cost in credits?
Each connection costs 2 credits and lasts up to 285 seconds, whatever it delivers. One stream held open for a 30-day month uses about 18,200 credits. A failed or refused connection costs nothing.
Should I use the stream, webhooks or polling for PrizePicks line changes?
Use webhooks on Production when your server can receive signed POSTs. Use the stream for a consumer you can keep connected and budget for. Use /api/v1/changes with a saved cursor and ETag for short scheduled jobs, because an unchanged 304 costs zero.