Value betting API
Answer: treat PinnFeed as the sharp reference. For each market, read outcome fair (or fairProb), compare to the soft-book decimal you observed, and compute EV = soft / fair − 1. Positive EV suggests value relative to Pinnacle's no-vig price — a statistical concept, not a tip. Full guide: value betting with no-vig fair odds.
Minimal checker#
import os, requests
KEY = os.environ["PINNFEED_KEY"]
# Example inputs you supply from a soft book / your model
event_id, market_key, side, soft = 1640301122, "s;0;m", "home", 2.30
r = requests.get(
f"https://pinnfeed.io/v1/events/{event_id}",
headers={"x-api-key": KEY},
timeout=10,
)
r.raise_for_status()
ev = r.json()["event"] # /v1/events/{id} returns {"event": {...}}
m = next(x for x in ev["markets"] if x["key"] == market_key)
fair = next(o["fair"] for o in m["outcomes"] if o["name"] == side)
ev_pct = soft / fair - 1
print(f"{ev['home']} v {ev['away']} {side}: soft {soft} vs fair {fair:.3f} → EV {ev_pct:+.2%}")
You can also pull a board with /v1/odds?sport=soccer&main=true and join on event id. Live soft-vs-sharp monitors usually stream Pinnacle on Builder and poll soft books separately.
Related#
Trial CTA#
Pricing. 3-day trial on paid plans; card required, charged after day 3 unless cancelled.
Questions people ask#
Does PinnFeed return soft-book prices?#
No. PinnFeed is Pinnacle only. Soft prices come from another source; PinnFeed supplies the reference fair.
Does +EV guarantee profit?#
No. It is a long-run statistical framing. Short samples mislead. Educational content for adults (18+).
Which plan do I need?#
Free/Hobby can power a delayed or REST-only checker. In-play value that must see Pinnacle ticks as they happen needs Builder.