Krok Odds

Racing — Jockey & trainer connections

The jockey & trainer connections half of the Racing reference — every route with its parameters, credit cost and a worked example.

3 of 23 endpoints · all categories · get a free API key

GET/api/v1/racing/connectionsFree tier

Jockey/trainer profile lookup by name — exchange form win-strike-rate, detailed per-track stats, and career/current-season profile, merged.

`meta.matched` (not `count`) is the true 'has data' signal. Slug resolution tries multiple candidate spellings (connectionSlugCandidates); dedupes by resolved slug. A name that matches NO jockey/trainer record in any of the three sources is a 400 with `error`, `unmatched:[...]` and a `detail` hint — horse names used to come back as a row listing the horse as its own jockey AND trainer with null strike rates. Accepted names can still come back with null strike rates when the upstream form tables have nothing for them.

Query parameters
NameTypeRequiredDefaultDescription
namesstring (comma-separated)Yes–One or more jockey/trainer names to look up (max 50).
typestring enumNobothOne of jockey | trainer | both.
Example request
curl \
  -H "X-API-Key: YOUR_KEY" \
  "https://krokodds.com.au/api/v1/racing/connections?names=value"
Example response
{
  "success": true,
  "data": {
    "jockeys": [
      {
        "name": "James McDonald",
        "slug": "james-mcdonald",
        "matched_slug": "james-mcdonald",
        "win_strike_rate": 24.6,
        "runs": 512,
        "wins": 126,
        "track_stats": [
          {
            "venue": "Randwick",
            "total_starts": 88,
            "wins": 24,
            "places": 41,
            "win_rate": 27.3,
            "place_rate": 46.6
          }
        ],
        "profile": {
          "code": "j4821",
          "career_wins": 1834,
          "career_starts": 8422,
          "win_percent": 21.8,
          "place_percent": 47.2,
          "recent_win_percent": 26.1,
          "current_wins": 92,
          "current_starts": 344,
          "current_seconds": 58,
          "current_thirds": 44,
          "current_vic_metro_starts": 12,
          "current_vic_metro_wins": 3,
          "current_vic_country_starts": 0,
          "current_vic_country_wins": 0,
          "current_sa_metro_starts": 0,
          "current_sa_metro_wins": 0,
          "current_sa_country_starts": 0,
          "current_sa_country_wins": 0,
          "victorian_ranking": null,
          "location": "Sydney, NSW",
          "apprentice": false,
          "weight_average": 57.2
        }
      }
    ],
    "trainers": []
  },
  "meta": {
    "count": 1,
    "matched": 1,
    "empty": false,
    "tier": "free",
    "type": "jockey",
    "names": [
      "James McDonald"
    ],
    "timestamp": "2026-09-03T04:00:00.000Z",
    "rate_limit": {
      "limit": 50,
      "remaining": 942,
      "reset": "2026-10-01"
    }
  }
}
GET/api/v1/racing/connections/combinationsFree tier

Win-strike-rate stats for jockey/trainer/horse combinations, computed from the last 90 days of the historical results store.

Computed in-process over up to 5000 the historical results store rows from the last 90 days (the primary store the historical results store, secondary fallback) — not a precomputed table. Sorted by wins desc then runs desc.

Query parameters
NameTypeRequiredDefaultDescription
typestring enumNojockey_trainerOne of jockey_trainer | jockey_horse | trainer_horse — which combo pair to aggregate.
namesstring (comma-separated)No–Filter combos where either side's name contains one of these (case-insensitive); max 50 entries.
limitintegerNo50Max rows returned; capped at 50 (free) / 200 (api).
Example request
curl \
  -H "X-API-Key: YOUR_KEY" \
  "https://krokodds.com.au/api/v1/racing/connections/combinations?type=jockey_trainer"
Example response
{
  "success": true,
  "data": [
    {
      "primary": "j mcdonald",
      "secondary": "c waller",
      "runs": 41,
      "wins": 11,
      "win_strike_rate": 26.83
    },
    {
      "primary": "j mcdonald",
      "secondary": "j cummings",
      "runs": 22,
      "wins": 5,
      "win_strike_rate": 22.73
    }
  ],
  "meta": {
    "count": 2,
    "empty": false,
    "tier": "free",
    "type": "jockey_trainer",
    "names": null,
    "window": "90 days",
    "timestamp": "2026-09-03T04:00:00.000Z",
    "rate_limit": {
      "limit": 50,
      "remaining": 942,
      "reset": "2026-10-01"
    }
  }
}
GET/api/v1/racing/connections/season-statsFree tier

Per-season (Aug–Jul AU racing season) jockey/trainer stats broken down by venue and race type, from the flat results store.

503 'Season stats require the primary store' if the data backend isn't the primary store for 'racing' — this endpoint has NO secondary fallback. Queries the flat results store with .ilike on jockey/trainer column.

Query parameters
NameTypeRequiredDefaultDescription
namestringYes–Jockey or trainer name (case-insensitive).
typestring enumNojockeyOne of jockey | trainer.
seasonstringNocurrent seasonSeason label e.g. '2025/26', or a single year (interpreted as Aug prevYear–Jul year).
Example request
curl \
  -H "X-API-Key: YOUR_KEY" \
  "https://krokodds.com.au/api/v1/racing/connections/season-stats?name=value"
Example response
{
  "success": true,
  "data": {
    "name": "James McDonald",
    "type": "jockey",
    "season": "2025/26",
    "overall": {
      "starts": 344,
      "wins": 92,
      "places": 194,
      "win_rate": 26.74,
      "place_rate": 56.4
    },
    "by_venue": [
      {
        "venue": "randwick",
        "starts": 88,
        "wins": 24,
        "places": 48,
        "win_rate": 27.27,
        "place_rate": 54.55
      },
      {
        "venue": "rosehill-gardens",
        "starts": 61,
        "wins": 15,
        "places": 33,
        "win_rate": 24.59,
        "place_rate": 54.1
      }
    ],
    "by_type": [
      {
        "race_type": "T",
        "starts": 344,
        "wins": 92,
        "places": 194,
        "win_rate": 26.74,
        "place_rate": 56.4
      }
    ]
  },
  "meta": {
    "tier": "free",
    "name": "James McDonald",
    "type": "jockey",
    "season": "2025/26",
    "timestamp": "2026-09-03T04:00:00.000Z",
    "rate_limit": {
      "limit": 50,
      "remaining": 942,
      "reset": "2026-10-01"
    }
  }
}

Other categories

Gameday8 endpoints

Per-event head-to-head odds, alternate lines, best prices across books, player props, live state and AI-generated summaries.

Opportunities7 endpoints

Krok's built-in scanners — arbitrage, positive EV, middles, low-holds, player props and same-game multi (SGM) picks, already devigged against a blended sharp baseline.

Odds Feed16 endpoints

Raw per-bookmaker prices as scraped, before any analysis layer. `/scraped-odds/*` paths are aliases of the equivalent `/odds-feed/*` route.

Sports8 endpoints

Sport reference data, team form guides, league standings, injury reports and weather-impact analysis.

Tips & Predictions4 endpoints

AI-generated betting tips with confidence scores and historical accuracy tracking.

Insights1 endpoint

Ranked leaderboards built on top of the stat feeds — per-sport player leaders for a chosen stat, season and view.

Tennis5 endpoints

ATP/WTA rankings, upcoming fixtures, match results, Elo ratings and surface-specific stats.

Historical7 endpoints

Deep archives — player and team game logs, shot charts, AFL/NRL historical data. Paid API plan only.

Reference7 endpoints

Static lookup data for building your own UI — players, venues, headshots, team logos and sport/league metadata.

Other Sports22 endpoints

Cricket, cycling, esports, Formula 1, golf, MMA, boxing, NFL and soccer coverage beyond the AU staples.

Infrastructure15 endpoints

Account and billing endpoints, bulk export, SSE streaming, webhook management and API health.

Additional Data19 endpoints

Odds history, steam-move detection, player prop stats/results, injuries, weather and other supporting feeds.

Prediction Markets3 endpoints

Polymarket and Kalshi sentiment plus a universal prediction-market catalogue and resolutions feed.