---
title: "Changes to already-published dataset files"
method: GET
path: "/v1/bulk/restatements"
tags: ["Bulk data"]
---

# Changes to already-published dataset files

`GET /v1/bulk/restatements`

## Request

- Base URL: `https://api.puntersedge.online`
- URL: `https://api.puntersedge.online/v1/bulk/restatements`
- Auth: API key in header `X-API-Key`

Cost: 0 credits. Every time a dataset file changed AFTER it was first published, newest
first: which file, when, why, and how many rows were removed, changed and added.

A day's file is regenerated for three nights after the day, and a closed month's bundle on
the first three nights of the next month. When a regeneration produces different bytes
(the csv digest changes), the change is recorded here and in the file's own sidecar. The
reason is `orphan_merge` when the archive folded a duplicate race record onto the race
that was run, and `regeneration` for anything else — usually late results or late closing
lines. A mirror that re-checks files by ETag sees the same changes; this list says why.

The current month's bundle grows every night as days are added and is not listed until the
month has closed.

## Query parameters

- `since` string, nullable: ISO date or date-time (UTC); only restatements published at or after it.
- `dataset` string, nullable: Restrict to one dataset name.
- `limit` integer: At most 200.

## Headers

- `X-API-Key` string
- `X-RapidAPI-Proxy-Secret` string

## Response `200`

Successful Response

- RestatementsOut
  - `restatements` RestatementOut[], required
    - `id` integer, required
    - `dataset` string, required
    - `period` string, required
    - `period_kind` string, required: day or month.
    - `at` string, required: When the changed file was published (UTC).
    - `reason` string, required: orphan_merge: the archive folded a duplicate race record onto the race that was run, which moved or removed rows in this period. regeneration: any other change, most often late results or late closing lines inside the three-night settle window.
    - `rows_removed` integer, nullable: Rows in the earlier file and not in this one.
    - `rows_changed` integer, nullable: Rows present in both whose values changed. Null where the dataset has no row key or the file was too large to diff; rows_removed and rows_added are then the net row delta.
    - `rows_added` integer, nullable: Rows in this file and not in the earlier one.
    - `sha256_before` string, nullable: csv sha256 of the file replaced.
    - `sha256_after` string, nullable: csv sha256 of the file that replaced it.
    - `detail` object: Row counts before and after, the diff method, and for orphan_merge the merges counted.
  - `count` integer, required
  - `notes` string[]

## Other responses

- `401`: Missing or invalid API key. Send `X-API-Key`. See https://puntersedge.online/developers/errors
- `402`: Monthly credit allowance exhausted for this plan. Upgrade at https://puntersedge.online/api/pricing
- `403`: Bulk dataset files are available on Business, Platform, Scale and Enterprise plans only.
- `422`: Validation Error
- `429`: Rate limit exceeded for this plan. Honour the `Retry-After` header (seconds) before retrying. See https://puntersedge.online/developers/rate-limits
- `500`: Unexpected server error. Safe to retry with backoff.

---

[API](https://skmtc.dev/puntersedge/apis/puntersedge-odds-api.md) · [All operations](https://skmtc.dev/puntersedge/apis/puntersedge-odds-api/llms.txt) · [OpenAPI document](https://skmtc.dev/puntersedge/apis/puntersedge-odds-api/revisions/f35b6aab1946?raw)
