statshawk
REST APIPersons

Get_v1_persons_person_id_odds_history

cost 10 unitsany plan
GET
/v1/persons/{person_id}/odds/history
X-API-Key<token>

Raw API key (sk_live_… or sk_test_…). Preferred for REST clients. Keys are read-only; the environment prefix is the only key role. See https://statshawk.ai/docs/getting-started/permissions

In: header

Path Parameters

person_id*string

Minted person id (per_…)

Query Parameters

markets?string

Required unless measure is set. Comma-separated markets

measure?string

Required unless markets is set. Qualified measure id or alias

contest?string

Minted contest id (cst_…). Without this, the window is since or the last 24h

competition?string

Competition slug or comp_… id

books?string

Comma-separated sportsbooks

period?string

Line period

limit?integer

Max price observations to return (default 50, max 100)

Formatint32
Range0 <= value
before?string

Exclusive ISO8601 upper bound on observed_at (window filter; not tie-safe)

cursor?string

Tie-safe older-page cursor from next_cursor (raw|{observed_at}|{id} or bucket|{start}). Prefer this over before when paging.

since?string

Inclusive ISO8601 lower bound on observed_at

interval?string

raw | 15m | 1h | auto (default auto)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/persons/string/odds/history"
{
  "data": {
    "filter_hints": null,
    "interval_applied": null,
    "items": [
      {
        "contest": "cst_0a1b2c3d4e5f6g7h8i9j0k1l2m",
        "market": "h2h",
        "measure": "string",
        "period": "full",
        "sides": [
          {
            "books": {
              "property1": [
                {
                  "implied_prob": 0.1,
                  "observed_at": "2019-08-24T14:15:22Z",
                  "point": 0,
                  "price": 0,
                  "withdrawn": true
                }
              ],
              "property2": [
                {
                  "implied_prob": 0.1,
                  "observed_at": "2019-08-24T14:15:22Z",
                  "point": 0,
                  "price": 0,
                  "withdrawn": true
                }
              ]
            },
            "outcome": {
              "id": "team_0a1b2c3d4e5f6g7h8i9j0k1l2m",
              "kind": "team",
              "name": "string",
              "slot": "home"
            }
          }
        ],
        "subject": {
          "id": "cst_0a1b2c3d4e5f6g7h8i9j0k1l2m",
          "kind": "contest"
        }
      }
    ],
    "limit": 0,
    "next_before": "2019-08-24T14:15:22Z",
    "next_cursor": "string",
    "returned_ticks": 0,
    "truncated": true
  },
  "meta": {
    "cache": "HIT",
    "fetched_at": "2025-10-15T18:30:00Z",
    "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
    "source": "postgres",
    "version": "v1"
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "property1": null,
    "property2": null
  }
}