pnclFEED Free key

Quickstart notes

Drops without the stream: polling the drops endpoint

No SSE plan needed for drop alerts on a schedule: the REST drops endpoint returns recent moves as plain JSON, and a cron job is enough.

Not everyone needs a held-open connection. If you want to see recent price drops on a schedule rather than in real time, the REST drops endpoint returns them as plain JSON, and a cron job that calls it every few minutes is a complete alerting setup. No stream, no plan with SSE, just a poll.

What the endpoint returns

The drops endpoint hands you the moves the feed detected in the last few minutes, as the curl quickstart describes it, checked 2026-10-18. You pick live or prematch with the mode parameter, set the size of move with min_drop_pct, and bound the age with max_age_sec. Each drop names the match, the market and the side, and carries the prices before and after.

A call returns a bounded window of history, not a live feed: you are reading what recently fell, on your schedule.

The polling pattern

The poll is a cron job or a timer that calls the endpoint and prints what is new:

curl -s -H "x-portal-apikey: $ODDS_API_KEY" \
  "$ODDS_BASE_URL/api/drops?mode=prematch&min_drop_pct=5&max_age_sec=300" \
  | jq '.drops[] | [.home, .away, .sect, .from_price, .to_price] | @tsv'

Keep the age window slightly wider than your poll interval so a slow run never silently skips a move, and store the drop ids you have already seen so each one reports once.

The budget side

This is the part that matters for the free key: the drops endpoint is a REST call, so it spends from the same 100-call daily allowance the pricing page lists, checked 2026-10-18. A poll every 15 minutes fits the free key all day at 96 calls, and gives you a quarter-hourly digest of every drop past your threshold.

Every minute instead of every fifteen is 1,440 calls a day and belongs on a paid plan, which the pricing page lists by rate.

What you give up

The stream pushes a drop the moment it is detected; a poll sees it at the next run. For prematch moves, where the gap at other books lasts minutes or longer, the delay rarely matters. For live moves, it does, and that is the honest line between the two: drops that expire in seconds belong on the stream, and everything else polls fine.

One endpoint, one timer, one dedupe list. The drops endpoint is the stream's patient sibling, and for a quarter-hourly watch it is all you need.