Turtle +EVTurtle +EV
Data API · REST + point-in-time

Sports edge data,
graded in the open.

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

one pick · fully tracedlive
J. Crawford · Total Bases · UNDER 1.5
raw_prob0.71
calibrated0.70
served0.70
gradedWIN +0.86u
ev=+30.2%fair_value=−233clv=2.5→1.5player_id=crawfjp01
what you get

Four layers. The last three are the moat.

edge

Derived edge

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

Graded, with a calibration trail

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.

identity

Resolved identity, with the hit rate on the label

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.

point-in-time

Point-in-time correct

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.

the feed

Reads like a data dictionary, on purpose.

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.

coverageLive and graded coverage varies by sport, season, market, and engine state. Current modeled and historical availability is exposed through the API itself, with field readiness and coverage caveats documented in /schema.
endpoints/picks · /history · /results · /sharp · /status · /odds · /odds/markets · /edges · /projections · /prediction-markets · /divergence · /books · /leagues · /events · /markets · /filters · /schema · /health · /openapi.json
identityCanonical player / team / opponent / fixture IDs across 6 sports, resolved from maintained sources so you join on an ID. The measured hit rate per sport ships in /schema, and unresolved returns null, never a guess
clvClosing-line value from real tracked line movement (first-seen open vs last-before-start close), never a synthetic opening line. Forward-accumulating: the tracking window is recent, so older picks carry null
prediction marketsKalshi order-book prices (bid, ask, mid, volume, open interest) and Polymarket game moneylines for sports, settled games excluded. Coverage is uneven by venue and sport and is disclosed per response; filter on venue, sport and game_datetime
divergenceKalshi and Polymarket vs the no-vig sportsbook consensus on the same game moneyline (mlb, nfl, ncaaf), ranked by gap, with book count, quote age and honesty flags. Exchanges and prediction markets are excluded from the consensus they are compared against
sharp moneySharp-money signals include side, conviction, no-vig fair vs best odds, available line movement on supported player-prop markets, and realized units. Game-level markets can have null line movement, and kelly_fraction remains null where the source does not emit it.
no-vig oddsFair value across dozens of books with coherence flags and a stale flag on every grid; best-book odds only for entitled clients after a rights review
fieldssport, player_name, canonical_player_id, team, opponent, canonical_fixture_id, stat_type, line, pick, book, raw_prob, calibrated_prob, probability, ev, fair_value, payout, result, units, beat_close, clv
deliveryREST / JSON · deny-by-default keys · envelope + provenance · versioned /v1
historyas-of snapshots · dispute-grade reconciliation
integration

One header. Every number, traceable.

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
  }]
}
packages

Commercial access, matched to the use case.

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.

Evaluation

Internal evaluation and integration testing.

Contactmanual onboarding
  • picks:read scope
  • Per-key rate limit
  • Per-key daily quota
  • Internal evaluation
Contact us

Research

Internal research and product analysis.

Contactcustom
  • picks:read scope
  • Negotiated limits
  • Versioned /v1 access
  • Internal use
Contact us
most integrated

Production

Production research integrations.

Contactcustom
  • Negotiated rate limits
  • Negotiated daily quota
  • Priority support options
  • Internal use
Contact us

Enterprise

Higher-volume and end-user use cases.

Customtalk to us
  • Negotiated limits
  • End-user display rights + attribution
  • Raw-odds entitlement review*
  • SLA + DPA options
Contact us

* raw-odds entitlement is granted separately after a source-by-source rights review.

the honesty surface

We publish the losses too.

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.

WIN / LOSS
graded outcomes retained
VOID / PUSH
terminal outcomes represented
PIT
as-served history snapshots
CLV
real tracked line movement when available

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.

questions

What buyers ask first.

What is the Turtle +EV Data API?

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.

Which sports and markets does the data cover?

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.

Do you provide graded results and closing-line value (CLV)?

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.

Can I join your data to my own datasets?

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.

Is this a no-vig / fair-odds data feed?

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.

How is the sports data API priced?

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.

Build on data you can defend.

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