SkipOdds

API reference

Base URL https://skipodds.com · authenticate with x-api-key header or ?api_key= · all responses JSON, cached ~60s · demo key: skipodds-demo-2026 (100 req/day)

The skipodds object in every response is the SkipOdds Index — the de-vigged consensus probability per outcome.

GET /v1/fixtures

Upcoming and live fixtures with the SkipOdds consensus.

Params: competition (default fifa-world-cup-2026) · limit (1–50, default 25)

{
  "source": "SkipOdds",
  "competition": "fifa-world-cup-2026",
  "fixtures": [{
    "id": "…", "home_team": "France", "away_team": "Morocco",
    "match_date": "2026-07-09T19:00:00Z", "status": "scheduled", "stage": "quarterfinal",
    "skipodds": {
      "home": 0.5612, "draw": 0.2304, "away": 0.2084,
      "fair_odds": { "home": 1.78, "draw": 4.34, "away": 4.8 },
      "books_surveyed": 9, "margin_removed": 0.052
    }
  }]
}

GET /v1/fixtures/:id

A single fixture with its consensus.

GET /v1/fixtures/:id/movement

De-vigged consensus at the earliest and latest capture inside the window, plus the signed delta in percentage points.

Params: hours — default 24; capped at 72 on Demo/Starter/Pro, 336 (14 days) on Scale

{
  "from": { "home": 0.52, "draw": 0.24, "away": 0.24 },
  "to":   { "home": 0.561, "draw": 0.23, "away": 0.209 },
  "delta_pct": { "home": 4.1, "draw": -1.0, "away": -3.1 },
  "span_hours": 22.5
}

GET /v1/outrights

Tournament-winner probabilities, normalised across the still-alive field (eliminated teams' stale prices are excluded).

Tennis (beta)

Same SkipOdds Index, applied to professional tennis — 2-way match-winner markets, no draw. Powers SmashLob.

GET /v1/tennis/fixtures

Upcoming and live matches. limit (1–50, default 25).

{
  "sport": "tennis",
  "fixtures": [{
    "id": "…", "tour": "atp", "tournament": "…",
    "p1": "Player One", "p2": "Player Two",
    "start_time": "2026-08-31T15:00:00Z", "status": "scheduled",
    "skipodds": {
      "p1": 0.64, "p2": 0.36,
      "fair_odds": { "p1": 1.56, "p2": 2.78 },
      "books_surveyed": 12, "margin_removed": 0.048
    }
  }]
}

GET /v1/tennis/fixtures/:id

One match with the current consensus.

GET /v1/tennis/fixtures/:id/movement

hours (default 24; up to 72, or 336 on Scale) — how the de-vigged consensus moved.

Errors

401 missing/invalid key · 429 daily quota exceeded · 404 unknown fixture · every error body is { "error": "…" }

Attribution

Demo and Starter tiers must credit SkipOdds with a link to https://skipodds.com wherever the numbers render.

Terms

Data is informational only and carries no warranty of accuracy or fitness for wagering. You may display SkipOdds values in your product; bulk re-sale of raw responses is not permitted. We may throttle or revoke keys that abuse the service.