Keep the sequence

Build line charts, replay a slate, or audit exactly when an alert should have fired.

  1. 1Take a projection ID
  2. 2Read every recorded version
  3. 3Chart or audit the moves
GET/api/v1/projections/{id}/history
Read every version of an offer
# Use an ID returned by /projections
PROJECTION_ID="pp_16258896"
curl "https://prizepicksapi.com/api/v1/projections/${PROJECTION_ID}/history?limit=100" \
  -H "Authorization: Bearer $PRIZEPICKS_API_KEY"
Response200 OK
{
  "data": [
    { "id": "18342", "line": 14.5, "status": "active", "observed_at": "2026-10-28T01:26:44Z" },
    { "id": "21907", "line": 13.5, "status": "active", "observed_at": "2026-10-28T02:41:12Z" }
  ],
  "meta": { "recording_mode": "changes_only", "next_cursor": null }
}

Key facts

Changes only

A new history row is written whenever a projection changes. Unchanged polls refresh last_seen_at, so the history stays compact and every row means something.

Ordered and paged

Rows come back in ascending sequence. Continue with meta.next_cursor to read long histories page by page.

Full context

Each row includes the line, both selections, status, observed_at and the upstream update time, so tier and availability changes are captured too.

Implementation guide