---
title: "What changed since your last poll"
method: GET
path: "/api/v1/changes"
tags: ["Props"]
---

# What changed since your last poll

`GET /api/v1/changes`

## Request

- Base URL: `https://api.flashodds.live`
- URL: `https://api.flashodds.live/api/v1/changes`
- Auth: HTTP bearer

An append-only feed of prop lifecycle transitions: created, line_changed, odds_changed, suspended, reactivated, removed, closed. Poll it with the cursor from your previous response to get exactly the rows you have not seen, instead of re-scanning the whole board and diffing it yourself. Ordered by a monotonic id, so a cursor is a precise watermark: no gaps, no repeats, and safe to replay.

## Query parameters

- `sport` 'nba' | 'basketball' | 'mlb' | 'nfl' | 'nhl' | 'ncaab' | 'ncaaf' | 'soccer' | 'tennis' | 'ufc' | 'cs2' | 'valorant' | 'dota2' | 'esports' | 'cod'
- `since` integer, nullable: Epoch ms. Returns changes observed after this instant. Prefer `cursor` for exact resumption.
- `cursor` string: Opaque watermark from a previous response. Resumes exactly where you stopped, with no gap or repeat.
- `limit` integer: Rows per page, capped by your plan (entitlements.changesPageLimit in GET /contract.json). Follow pagination.nextCursor for more.
- `changeType` 'created' | 'line_changed' | 'odds_changed' | 'suspended' | 'reactivated' | 'removed' | 'closed'
- `eventId` string
- `playerId` string: Canonical fp_player_ id. Returns changes for every spelling of that player's name within its sport. Any other value, including the source playerId carried on board rows, is rejected with 400 invalid_player_id.

## Response `200`

Changes since the cursor

- ChangesResponse
  - `count` integer, required
  - `changes` PropChange[], required
    - `changeId` string, required
    - `changeType` 'created' | 'line_changed' | 'odds_changed' | 'suspended' | 'reactivated' | 'removed' | 'closed', required
    - `changedAt` integer, required
    - `propId` string, required
    - `eventId` string, required
    - `sport` string, required
    - `player` string, required
    - `stat` string, required
    - `before` object, nullable, required
      - `line` number, nullable, required
      - `overOdds` number, nullable, required
      - `underOdds` number, nullable, required
    - `after` object, nullable, required
      - `line` number, nullable, required
      - `overOdds` number, nullable, required
      - `underOdds` number, nullable, required
  - `pagination` object, required
    - `nextCursor` string, nullable, required
    - `hasMore` boolean, required

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key
- `403`: Not permitted on your tier
- `429`: Rate limit or daily quota exceeded

---

[API](https://skmtc.dev/flashodds/apis/flash-props-api.md) · [All operations](https://skmtc.dev/flashodds/apis/flash-props-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flashodds/apis/flash-props-api/revisions/044161ffbfd8?raw)
