The PropEdge API: Every Number on the Site, as Free JSON
Correction (September 2026). An earlier version of this post described two paid tiers ($29 and $79 a month), API keys sent in an
x-api-keyheader, a Square payment form, and per-day request quotas. None of that existed. The API has always been free and public, and this post now describes it as it actually is. If you tried to subscribe and hit a dead page, that is why — there was never anything to buy.
PropEdge is free. That was always the point: we publish every number our model produces rather than hiding it behind credits or a subscription. The API is the same idea for code instead of eyeballs. Everything the site shows is available as JSON, with no account and no key.
No key, no signup
Just request the URL:
cURL:
curl "https://propedge.today/api/edges?sport=NBA"
JavaScript:
const resp = await fetch('https://propedge.today/api/edges?sport=NBA');
const data = await resp.json();
Python:
import requests
data = requests.get("https://propedge.today/api/edges", params={"sport": "NBA"}).json()
Endpoints
Picks
GET /api/edges— current edges. Filter with?sport=.GET /api/best-bets— the highest-conviction picks only.GET /api/late-swaps— edges created or strengthened by late lineup news.
Model output
GET /api/projections— the model's projection for each prop: probability, projected value, sample size.GET /api/player-stats— every prop we have for one player.GET /api/matchup-context— game-level context behind the projections.
Track record
GET /api/paper-stats— the paper-trading record: resolved picks, wins, losses, and ROI measured on the amount actually staked.GET /api/pnl?days=30— profit and loss broken down by sport, direction and stat.GET /api/results-feed— graded picks, for building your own tracker.
Parlay pricing
GET /api/price?legs=0.62:LAL,0.58:BOS— prices an entry of 2–6 legs. Each leg isprobability:team. Returns what PrizePicks pays for that entry size, what PropEdge would pay, the rebate on a loss, and the expected value of each. Legs on the same team are repriced for correlation, and the response says so.
When the data isn't ready
Right after a deploy the model is still building its first projections. During that window some endpoints return 503 with {"error":"Data warming up"}. Retry in a minute or two.
Rate limits
15 requests per minute, per endpoint, per IP address. Past that you get a 429 with a Retry-After: 60 header. That is plenty for a bot polling every few minutes or a daily spreadsheet pull. There are no daily quotas and no tiers.
What people build with it
- Discord and Telegram bots that post new picks from
/api/best-bets. - Spreadsheets that pull
/api/projectionseach morning. - Your own tracker, built on
/api/results-feedand/api/pnl, so you don't have to take our win rate on trust. - Parlay tools on top of
/api/price.
That last one matters to us. We print our calibration gap and our losses on the track record page because a record you can't check is marketing. The API is the same principle: if you want to verify a number, you shouldn't need our permission to fetch it.