Pinnacle odds API curl recipes from the OpenAPI spec
Answer: Point curl at https://pinnfeed.io with header x-api-key: $PINNFEED_KEY. The live contract is /openapi.json. Free (€0, 30 s delay, 2 sports) covers every REST path below except closing lines (Builder+).
Setup#
export PINNFEED_KEY="ps_live_..."
alias pf='curl -sS -H "x-api-key: $PINNFEED_KEY" -H "accept: application/json"'
Account and sports#
pf https://pinnfeed.io/v1/account | jq .
pf https://pinnfeed.io/v1/sports | jq '.sports[] | {id,slug,inPlan,live,prematch}'
Events and odds (paginated)#
# Upcoming soccer moneylines, main lines only
pf "https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=20" | jq '.events | length'
# Next page
pf "https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=20&offset=20" | jq .
# Event list without markets
pf "https://pinnfeed.io/v1/events?sport=tennis&live=false&limit=10" | jq .
# One event with markets
pf "https://pinnfeed.io/v1/events/EVENT_ID?main=true" | jq .
Drops and closing lines#
# Price drops ≥5% in the last 15 minutes
pf "https://pinnfeed.io/v1/drops?sport=soccer&minutes=15&min_pct=5&limit=50" | jq .
# Closing lines for a UTC day (Builder+)
pf "https://pinnfeed.io/v1/closing?date=2026-11-08&sport=soccer&main=true&limit=50" | jq .
# Closing lines for one event
pf "https://pinnfeed.io/v1/closing/EVENT_ID" | jq .
Auth errors you will see#
| HTTP | Meaning |
|---|---|
| 401 | Missing or bad x-api-key |
| 403 | Plan lacks the endpoint (e.g. Free hitting /v1/closing) |
| 429 | rate_limited (per-second limit, with Retry-After) or daily_quota (Free: 1,000/day) |
Full schemas: REST docs. For push instead of poll, use the Python/Node WebSocket guide on Builder (€99/mo). Paid plans include a 3-day trial; a card is required and it is charged after day 3 unless you cancel. Educational content for adults (18+).
Questions people ask#
Does curl work on the Free plan?#
Yes for /v1/account, /v1/sports, /v1/events, /v1/odds and /v1/drops (30 s delay, 2 sports, 1,000 requests/day). Closing lines need Builder or Pro.
Is there a WebSocket curl example?#
Not with curl. For a terminal test use wscat: wscat recipe. For real clients, see the Python or Node code in the WebSocket guide.
Where is the OpenAPI file?#
https://pinnfeed.io/openapi.json. Import it into Postman, Insomnia or openapi-generator if you prefer generated clients over hand-written curl.