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
Pixel-art terminal distributing events to three connected receivers.

How many alerts to expect, last 24 hours

LeagueLine movesPer hour
NBA24,7411,030.9
UCL14,403600.1
NFL11,464477.7
College Football3,895162.3
NHL99241.3
Tennis2159
College Basketball1365.7
CS2612.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.

StepWho sets itWhat to expect
The source publishes a changePrizePicksOutside our control and not measurable by us directly.
We receive itCollectorsStreamed 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 lineCollectorsFrom streamed status when sent, otherwise from complete league boards, about every 30 to 70 minutes per league.
Your plan delayYour planFree 300 s, Developer 60 s, Production none added.
We send it to youOur serverThe 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.

PlanMonthly creditsIf streaming used all of them
Free100–500About 19 hours of one stream
Developer10,000About 16 days of one stream
Production50,000About 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.

Continue building

References