Pinnacle soccer corners odds API
Answer: corner lines arrive as related soccer events (with a parentId pointing at the main game) whose units equals "Corners" (see schema). They are not a separate sport and not specials. The main corner lines come through on every plan that includes soccer, Free and Hobby too; Free and Hobby are main-markets-only, so alternate corner lines need Builder (or Pro). On the Builder WebSocket, subscribe to soccer with main: false to get the alternate lines as well, then keep markets whose parent event has units === "Corners".
Filter corners from a snapshot#
import os, requests
KEY = os.environ["PINNFEED_KEY"]
r = requests.get(
"https://pinnfeed.io/v1/odds",
params={"sport": "soccer", "live": "true", "limit": 100},
headers={"x-api-key": KEY},
timeout=15,
)
r.raise_for_status()
for ev in r.json().get("events", []):
if ev.get("units") != "Corners":
continue
print(ev["home"], "v", ev["away"], ev.get("league", {}).get("name"))
for m in ev.get("markets", []):
print(" ", m["type"], m.get("line"), [(o["name"], o["decimal"], o["fair"]) for o in m["outcomes"]])
WebSocket subscribe#
{
"type": "subscribe",
"sports": ["soccer"],
"markets": ["total", "spread", "moneyline"],
"main": false,
"specials": true
}
Then in your book, retain events with units == "Corners". Related matchups share keys like s;0;m with the main game — always key state by market id (eventId:key), as in the Python client.
Trial CTA#
Full market depth, including alternate corner lines: Builder (€99/mo, 3-day trial; card required, charged after day 3 unless cancelled). Docs: limits, REST.
Questions people ask#
Is there a market=corners filter?#
No. Corners are identified by event units, not by a market-type enum. Market types stay moneyline / spread / total / team_total.
Do Free and Hobby include corners?#
Yes, the main corner lines, as long as soccer is one of your sports. Free and Hobby are main-markets-only, so alternate corner lines start at Builder.
Is this educational content for adults?#
Yes (18+).