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.