# In-play prices

> Events under way with inPlay on raw, one event, standard and dutching: what each value returns, what an in-play price carries and how a call is priced.

## The values, route by route

Since 2 November 2026, `inPlay` serves prices on events that are under way. Without it, a call answers as it did before.

- GET /v2/odds/raw and GET /v2/odds/event/{id}: `exclude`, the default, leaves the events in play out. `include` serves pre-match and in-play events together, and `only` serves the events in play alone.
- GET /v2/odds/{type} for `standard` and `dutching`: `exclude`, the default, or `only`.
- Any other value is 400 `bad_request`, `include` on a matched board among them.
- `2up`, `each-way`, `extra-place` and `bog` stay pre-match: `inPlay` on them is 400 `bad_request`, the answer to any parameter a route doesn't read.

Football match odds in play, on standard:

```
curl --compressed -s -H "Authorization: Bearer $ODDSRELAY_KEY" \
  "https://api.oddsrelay.io/v2/odds/standard?region=uk&sports=soccer&markets=h2h&inPlay=only"
```

## When an event is in play

An event is in play once its venues show it in play, whatever its `commence_time` says. On raw, under `include` or `only`, each event carries `in_play`, `true` while it is in play. On `standard` and `dutching`, each event under `only` carries `in_play: true`.

An event keeps its `id` across kick-off, and its place in the `include` order. `include` serves it once.

## One event across kick-off

GET /v2/odds/event/{id} answers 404 `unknown_event` for an event its `inPlay` value leaves out: under the default, an event that has gone in play. Send `inPlay=include` to follow one event before and after kick-off.

One event, before or after kick-off:

```
curl --compressed -s -H "Authorization: Bearer $ODDSRELAY_KEY" \
  "https://api.oddsrelay.io/v2/odds/event/$EVENT_ID?region=uk&inPlay=include"
```

## What an in-play price carries

An in-play price is served only while it was read in the last 10 seconds. In-play lays come from Betfair, Smarkets and Matchbook.

The reply holds prices and nothing about the match itself: no score, clock or result. Horse racing is never in play. You poll for in-play prices as for any other call.

## The big bookmakers in play

Of the big UK bookmakers, Sky Bet, Ladbrokes, Coral and Betfred carry football and tennis in play, and Paddy Power carries tennis. bet365 and William Hill have no in-play prices. [Coverage](https://oddsrelay.io/coverage) lists each bookmaker's sports.

## What in-play costs

An in-play call is priced as the same call without `inPlay` is, and `quote=true` prices it first, free. On raw, one price covers the whole walk, so a walk of the events in play pays that whole price, however few they are.

To follow the events in play on raw, walk again with `updatedSince` set to the start of your previous walk: one no more than 120 s back pays 10% of the price. When nothing is in play, the reply holds no events, and a reply with no events is free.

An in-play reply changes each time one of its prices moves. Name only the sports, bookmakers, exchanges and markets you use ([Polling for fewer tokens](https://oddsrelay.io/docs/guides/polling-cheaply)), and send each ETag back ([Polling with ETags](https://oddsrelay.io/docs/guides/conditional-requests)).

Price football in play on raw, then follow it:

```
# 1. The price of a walk of football in play, free
curl --compressed -s -H "Authorization: Bearer $ODDSRELAY_KEY" \
  "https://api.oddsrelay.io/v2/odds/raw?region=uk&sports=soccer&inPlay=only&quote=true"
# {"cost": …, "remaining": …, "rate_card": "…"}

# 2. The next walk: SINCE is when your previous walk started, as YYYY-MM-DDTHH:MM:SSZ
curl --compressed -s -H "Authorization: Bearer $ODDSRELAY_KEY" \
  "https://api.oddsrelay.io/v2/odds/raw?region=uk&sports=soccer&inPlay=only&updatedSince=$SINCE"
```

Source: https://oddsrelay.io/docs/guides/in-play · the API contract: https://api.oddsrelay.io/v2/openapi.json
