A REST API for no-vig fair value, expected value, and calibrated probability. Provenance and grading fields are explicit, unresolved identity returns null rather than a guess, and measured player, team, opponent, and fixture coverage is published in the schema. Built for quant and product teams. Not another odds screen.
downstream of settlement · no official-league-rights claim · honest coverage
No-vig fair value, expected value, and calibrated probability with an explicit provenance trail. The live board carries the raw-to-calibrated-to-final chain; historical graded rows retain the final model probability, while older raw and calibrated fields can be null rather than backfilled.
Graded result rows carry WIN / LOSS / VOID / PUSH outcomes, realized units, and the final model probability used for grading. That gives you a calibration audit trail without pretending older provenance fields exist where they do not.
Canonical player, team, opponent, and fixture IDs resolved across six sports, so you join on an ID instead of guessing at names. We publish the measured hit rate per sport in /schema rather than letting you discover it, and we return null instead of a guess (a soccer player is only stamped with a team when that row’s own matchup confirms it). Tennis carries no team because tennis has no teams.
As-served point-in-time snapshots plus closing-line value computed from real tracked line movement. Backtest the board as it stood, not a post-hoc rewrite, and never a synthetic opening line. The tracking window accumulates forward, so older picks can carry null CLV rather than a fabricated open.
We sell a narrow, real edge, not broad commodity odds. Four sports, UNDER-focused by design, from a few dozen picks in the morning to a few hundred at slate peak. If you need cheap multi-sport raw odds, we'll tell you we're not the right vendor.
Deny-by-default keys, a stable response envelope, per-key rate limits, and explicit provenance fields where the underlying source supports them. Versioned /v1, additive-only, breaking changes ship as /v2 with 90 days' notice.
Full reference at /developers →$ curl -H "Authorization: Bearer $TEV_API_KEY" \
"https://turtleevlabs.com/api/v1/picks?sport=mlb&limit=1"
{
"schema_version": 1,
"generated_at": "2026-07-09T19:47:07Z",
"count": 1,
"data": [{
"player_name": "J. Crawford",
"canonical_player_id": "crawfjp01",
"team": "SEA", "opponent": "LAA",
"stat_type": "Total Bases", "pick": "UNDER",
"raw_prob": 0.71, "calibrated_prob": 0.70,
"probability": 0.70, "cap_applied": false,
"ev": 30.2, "fair_value": -233
}]
}We onboard partners by hand. Tell us your use case and expected volume, and we’ll provision scopes, rate limits, daily quota, and any required rights review.
Internal evaluation and integration testing.
Internal research and product analysis.
Production research integrations.
Higher-volume and end-user use cases.
* raw-odds entitlement is granted separately after a source-by-source rights review.
The graded-results feed keeps wins and losses in the governed result set, with settlement and provenance caveats documented in /schema. That's the difference between a data feed you can audit and a screenshot you have to trust.
Deduplicated book-level graded results are available through /results, with the exact counting basis and caveats documented Historical result depth is available through /results, with deduplication, denominator, and provenance rules documented in /schema. Return fields use recorded prices; they are not realized customer profit or proof of an executed wager.
A commercial REST API for sports edge data: no-vig fair value, expected value, calibrated win probability, and graded WIN/LOSS outcomes for player props, delivered as clean JSON, versioned, with per-pick provenance. It is derived edge data, not a raw odds screen.
Coverage varies by sport, season, market, and engine state. Use the live API discovery endpoints for current availability, and /schema for identity, provenance, grading, and field-readiness caveats. Historical depth and current-board coverage are intentionally documented separately.
Graded result rows carry WIN / LOSS / VOID / PUSH outcomes with realized units and the final model probability used for grading, so you can audit calibration directly. CLV is computed from real tracked line movement (the first line we saw versus the last line before start), never a synthetic opening line. Because it comes from a live tracking window rather than a backfill, CLV accumulates forward: recent picks carry it, older ones carry null instead of a fabricated open.
Yes, that is the point of the identity layer: canonical player, team, opponent, and fixture IDs across six sports, so you join on an ID instead of guessing at names. We publish the measured hit rate per sport in /schema rather than implying it is total, because you will measure it yourself on day one. Two things to know when you do: coverage differs between the pre-game board and graded results (they resolve from different sources), and a null is almost always "not applicable" rather than "missing". Tennis carries no team because tennis has no teams, and game-level markets carry no player because there is no single player in them.
Yes. We publish no-vig fair value across dozens of books with coherence flags, so you can see when a fair price is thin rather than trusting it blindly. Best-book raw odds are available only to entitled clients after a rights review; they are not part of any listed plan.
Commercial access is contact-gated while onboarding remains manual. Rate limits and daily quotas are assigned per API key based on the use case, and end-user display or raw-odds rights require separate review. Contact blake@turtle-ev.com for current terms.
Tell us what you're building. We'll set you up with a key, the right plan, and the docs to ship.
blake@turtle-ev.com