Free tier is now 500 requests/dayFirst 20 subscribers keep 50% off for life. Code FOUNDING50.FOUNDING50See pricing

Virtual steeplechase API

Get virtual steeplechase data in JSON. The API returns scheduled events, runners with draw numbers and form, win and place odds, and settled results. Races run all day, a few minutes apart.

Start free with 500 requests a day. No credit card.

Game types

Steeple Chase
Jumps horse racing

This is one of the 8 racing game types the API serves. One integration covers all of them. The response shape does not change between game types.

Quick start

Authenticate with the X-API-Key header. List game types with /game-types, then filter events with the game_type_id and status parameters.

curl -H "X-API-Key: YOUR_KEY" \
  "https://virtuals-api.sportlogic.io/api/v1/events?status=scheduled"

Sample event response

GET /api/v1/events/{id} returns the event and every runner with draw number, win and place odds, and form. Odds are decimal.

{
  "success": true,
  "data": {
    "event": {
      "id": 128401,
      "game_type_id": 3,
      "name": "Steeple Chase",
      "status": "scheduled",
      "scheduled_at": "2026-08-15T14:03:00Z"
    },
    "runners": [
      {
        "draw_number": 1,
        "name": "Stone Fence",
        "odds_win": 4.8,
        "odds_place": 1.9,
        "form": [
          3,
          1,
          4,
          2,
          6
        ]
      },
      {
        "draw_number": 2,
        "name": "Green Hill",
        "odds_win": 3.4,
        "odds_place": 1.6,
        "form": [
          1,
          2,
          1,
          3,
          4
        ]
      },
      {
        "draw_number": 3,
        "name": "Last Hurdle",
        "odds_win": 6.5,
        "odds_place": 2.3,
        "form": [
          4,
          6,
          3,
          5,
          2
        ]
      },
      {
        "draw_number": 4,
        "name": "Winter Field",
        "odds_win": 10,
        "odds_place": 3.2,
        "form": [
          8,
          5,
          7,
          6,
          4
        ]
      }
    ]
  }
}

Results and settlement

When the event finishes, GET /api/v1/events/{id}/results returns the finishing order plus win, place, forecast and tricast settlement. You can grade bets straight from this response.

{
  "success": true,
  "data": {
    "event_id": 128401,
    "status": "finished",
    "positions": [
      {
        "finish_position": 1,
        "draw_number": 2,
        "name": "Green Hill",
        "odds_win": 3.4,
        "odds_place": 1.6
      },
      {
        "finish_position": 2,
        "draw_number": 1,
        "name": "Stone Fence",
        "odds_win": 4.8,
        "odds_place": 1.9
      },
      {
        "finish_position": 3,
        "draw_number": 3,
        "name": "Last Hurdle",
        "odds_win": 6.5,
        "odds_place": 2.3
      },
      {
        "finish_position": 4,
        "draw_number": 4,
        "name": "Winter Field",
        "odds_win": 10,
        "odds_place": 3.2
      }
    ],
    "settlement": {
      "win": {
        "draw_number": 2,
        "name": "Green Hill",
        "odds_win": 3.4
      },
      "place": [
        {
          "finish_position": 1,
          "draw_number": 2,
          "name": "Green Hill",
          "odds_place": 1.6
        },
        {
          "finish_position": 2,
          "draw_number": 1,
          "name": "Stone Fence",
          "odds_place": 1.9
        }
      ],
      "forecast": {
        "first": 2,
        "second": 1
      },
      "tricast": {
        "first": 2,
        "second": 1,
        "third": 3
      },
      "place_terms": "1-2 of 4 runners"
    }
  }
}

Cache responses while you build

The free plan includes 500 requests a day. That covers a full day of building if you cache. Store each response by event id and read from the cache instead of calling the API again for the same data. Fetch the schedule on a timer, not on every render. A settled result never changes, so you can cache results forever.

const cache = new Map();

async function getEvent(id) {
  if (!cache.has(id)) {
    const res = await fetch(`${BASE}/events/${id}`, { headers });
    cache.set(id, await res.json());
  }
  return cache.get(id);
}

Frequently asked questions

Is there a free plan?

Yes. The free plan is $0 and includes 500 requests a day. You do not need a credit card. Paid plans start at $59 a month for 15,000 requests a day.

What steeplechase data does the API return?

Scheduled and finished events, runners with draw numbers and form, win and place odds, and results with win, place, forecast and tricast settlement. Every endpoint returns JSON over REST.

How do I authenticate?

Sign in at dashboard.sportlogic.io with Google and copy your key. Send it in the X-API-Key header on every request.

Get a free key

Free tier, no credit card. Get a key and make your first call in minutes.