---
title: "Returns a sample of Stake's public bet feed: recent sportsbook bets with real stake amounts and their legs, joined to the same market and outcome ids as the Stake v2 board."
method: GET
path: "/api/v2/stake/bets"
tags: ["Stake (v2)"]
---

# Returns a sample of Stake's public bet feed: recent sportsbook bets with real stake amounts and their legs, joined to the same market and outcome ids as the Stake v2 board.

`GET /api/v2/stake/bets`

## Request

- Base URL: `https://api.owlsinsight.com`
- URL: `https://api.owlsinsight.com/api/v2/stake/bets`
- Auth: HTTP bearer

Returns a sample of Stake's public bet feed: recent sportsbook bets with real stake amounts and their legs, joined to the same market and outcome ids as the Stake v2 board.

A sample, not a ledger. The source caps each query at 50 rows and gives no cursor, so completeness can never be asserted; above roughly 200 bets a minute the cap binds and the window is undersampled. Do not derive total handle from it.

Every meta key is present on every response shape. On no-data and partial-miss, timestamp, ageSeconds, hash and the bet times are null (there is no data to date) and now is the response clock; never read freshness from a null timestamp.

Every response carries meta.sampling, and sampling.complete is always false. sourceLimit is always present. On an empty response the measured fields windowSeconds and observedNewPerMinute are null; the configured fields pollIntervalMs, configuredWindowMs and configuredMaxEntries are still reported when the feed has run within the last day, and are null only when even that is unknown. observedNewPerMinute is also null on a healthy response until a rate has been measured, which is normal right after a restart.

Legs join to the Stake v2 board on outcome.id and market.id, never on fixture.id, which is a UUID in a different id space. For a fixture-level join use fixture.slug: its numeric prefix appears to be the board fixture id ("46853667-sporting-galatasaray-istanbul" matched board fixture 46853667). Verify that against your own data rather than assuming it.

Each leg carries fixture.tournament { id, name, slug, category } so a wager can be attributed to a competition without matching it to a board first. Observed on every leg sampled. There is no sport field and no tournament-to-sport lookup: category is a grouping (UEFA Champions League gives "International Clubs"), not a sport.

The feed is not filtered by sport, so bets on any sport Stake books can appear, including sports the per-sport board endpoint does not carry (cricket and handball both occur). There is no sport path segment. Any one response is a bounded rolling window of a few minutes, so a low-volume sport may be absent from it.

data[].amount and currency are null when the bettor hid their stake; payout, payoutMultiplier, potentialMultiplier and each leg's odds are nullable too. Skip those rows rather than coercing them to zero.

data[].createdAt and updatedAt pass through in the source's RFC 1123 format; the meta timestamps are ISO 8601.

Bettor identity is never included.

## Response `200`

OK

- StakeBetsResponse
  - `count` number, double
  - `data` StakeBet[]
    - `active` boolean
    - `amount` number, double, nullable: Stake on the whole slip, in `currency`. null when the bettor hid it.
    - `cashoutMultiplier` number, double, nullable
    - `createdAt` string: RFC-1123, passed through from upstream (e.g. 'Tue, 01 Sep 2026 16:10:32 GMT').
    - `currency` string, nullable: The bettor's own currency, fiat or crypto (usdt, inr, sol, ngn, ...). NOT converted.
    - `feed` string
    - `id` string
    - `outcomes` StakeBetLeg[]: More than one leg means a parlay, so `amount` cannot be attributed to one market.
      - `fixture` object
        - `id` string
        - `name` string
        - `startTime` string, nullable
      - `id` string
      - `market` object
        - `id` string
        - `name` string
      - `odds` number, double, nullable: Decimal odds AT PLACEMENT for this leg.
      - `outcome` object: outcome.id and market.id share a namespace with `getStakeV2()`, so a leg joins directly to a board outcome. `fixture.id` does NOT join: the board uses a different identifier for the same fixture. Join on outcome or market id, never fixture id.
        - `id` string
        - `name` string
      - `status` string
    - `payout` number, double, nullable
    - `payoutMultiplier` number, double, nullable
    - `potentialMultiplier` number, double, nullable
    - `status` string
    - `updatedAt` string
  - `meta` StakeBetsMeta
    - `ageSeconds` number, double, nullable: Seconds since `timestamp`. null whenever `timestamp` is null; never derive freshness from a null timestamp.
    - `cached` boolean
    - `hash` string, nullable: null on no-data and partial-miss.
    - `newestBetTime` string, nullable
    - `now` string: Response clock, ISO, present on every shape.
    - `oldestBetTime` string, nullable: ISO-8601, unlike the RFC-1123 `createdAt` inside `data[]`. null on empty shapes.
    - `sampling` StakeBetsSampling: Capture-rate facts. `complete` is always false: upstream caps each query at 50 rows with no cursor and the feed turns over faster than that, so the window is a SAMPLE. Total handle is NOT derivable from it.
      - `complete` boolean
      - `configuredMaxEntries` number, double, nullable
      - `configuredWindowMs` number, double, nullable
      - `observedNewPerMinute` number, double, nullable: Measured: null on empty shapes, and on a healthy response until a rate has been measured (normal right after a restart).
      - `pollIntervalMs` number, double, nullable: Worker poll interval. Reported on empty shapes too while the feed has run in the last day; null only when even that is unknown.
      - `sourceLimit` number, double
      - `windowSeconds` number, double, nullable: Measured: null on no-data and partial-miss.
    - `source` string
    - `status` string
    - `timestamp` string, nullable: ISO time of the worker write this response serves. null on no-data and partial-miss: there is no data to date.
  - `success` boolean

---

[API](https://skmtc.dev/owlsinsight/apis/owls-insight-api.md) · [All operations](https://skmtc.dev/owlsinsight/apis/owls-insight-api/llms.txt) · [OpenAPI document](https://skmtc.dev/owlsinsight/apis/owls-insight-api/revisions/76c1ea016ff1?raw)
