---
title: "Register changes since a cursor"
method: GET
path: "/changes"
tags: ["Change Feed"]
---

# Register changes since a cursor

`GET /changes`

## Request

- Base URL: `https://api.companystack.co.uk`
- URL: `https://api.companystack.co.uk/changes`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`

Events recorded from the monthly snapshot import, so an event can lag the change on the register by up to about five weeks. Store `next_cursor` and pass it back to receive only newer events; a cursor is returned even when the page is empty. Each call scans at most 20,000 events, so with narrow filters a page can be empty while `has_more` is true — keep paging. Without `cursor`, the feed starts at `since` (default: 7 days ago).

## Query parameters

- `cursor` string
- `since` string, date-time
- `types` string
- `companies` string
- `watchlist` boolean
- `sic` string
- `postcode` string
- `limit` integer

## Response `200`

A page of change events

- ChangesPage
  - `data` ChangeEvent[], required
    - `id` string
    - `company_number` string
    - `change_type` string: added, updated, dissolved, removed_from_snapshot or missing_from_snapshot
    - `source` string
    - `occurred_at` string, date-time
    - `company` object, nullable
      - `company_name` string
      - `company_status` string
      - `postcode` string, nullable
      - `post_town` string, nullable
      - `incorporation_date` string, date, nullable
      - `sic_codes` SicCode[]
        - `code` string, required
        - `description` string
  - `next_cursor` string, required: Pass back as `cursor` to receive only newer events
  - `has_more` boolean, required
  - `scanned` object
    - `from_position` integer
    - `to_position` integer

## Other responses

- `400`: Validation error
- `401`: API key missing, malformed or revoked
- `403`: The key's plan does not include this endpoint (`code: plan_upgrade_required`, with `upgrade_url`), the key may not call it, or the key is beyond the plan's key limit after a downgrade (`code: key_limit_exceeded`: the newest keys are paused until keys are deleted or the plan upgraded)
- `429`: Per-minute or per-day limit reached (`code: rate_limited`, `window: minute|day`). Wait `Retry-After` seconds; when both windows are full the day is reported. A refused request does not count against either limit. A bulk lookup (`POST /company/bulk`) counts each company number in it as one request, so one that is more than you have left is refused whole, and the body adds `requested` and `fits`.

---

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