REST API

Base URL: https://pinnfeed.io/v1. Authenticate with x-api-key. All responses are JSON. Responses on the Free plan are delayed by 30 seconds and carry the header X-Data-Delay-Seconds: 30.

Common filters#

Parameter Example Notes
sport soccer or 1,2 Slugs or ids, comma-separated. Required on /v1/odds.
league 1980,2627 League ids.
event 1640278226 Event ids.
market moneyline,total moneyline, spread, total, team_total.
live true / false Omit for both.
main true Main lines only.
limit, offset limit=100&offset=200 Pagination over events.

GET /v1/sports#

Sports with live and prematch event counts and whether each is in your plan.

curl -H "x-api-key: $PINNSOCKET_KEY" https://pinnfeed.io/v1/sports

GET /v1/events#

Events without markets. Default limit 500, max 1000.

curl -H "x-api-key: $PINNSOCKET_KEY" "https://pinnfeed.io/v1/events?sport=tennis&live=true"

GET /v1/odds#

Events with their markets — the REST equivalent of a WebSocket snapshot. Default limit 200 events.

curl -H "x-api-key: $PINNSOCKET_KEY" "https://pinnfeed.io/v1/odds?sport=basketball&market=spread,total&main=true"
{ "count": 37, "offset": 0, "limit": 200,
  "events": [ { "id": 1640301122, "sport": "basketball", "home": "...", "away": "...", "markets": [ { "type": "spread", "line": -4.5, "outcomes": [] } ] } ] }

GET /v1/events/{id}#

One event with all its markets (subject to your filters and plan).

GET /v1/closing/{eventId}#

Closing lines of one event. Builder and above.

GET /v1/closing?date=YYYY-MM-DD#

All closing lines for events that started on a UTC day. Filters: sport, main=true. Pagination with limit (max 2000) and offset.

curl -H "x-api-key: $PINNSOCKET_KEY" "https://pinnfeed.io/v1/closing?date=2026-11-08&sport=soccer&main=true"

GET /v1/account#

Your plan, limits and today's usage for the key.