# List domain changes

`GET https://api.unique.domains/v1/domains/changes`

The catalog's change feed, newest first.

Name events of catalog names: price, status, expiry, lifecycle, registrar, transfer, lock, renewal, nameserver, parking and auction events. With `since`, oldest first from that time, for polling.

- Access: A member key (Founder or Investor) or a paid RapidAPI subscription to this API.
- Billing: One call.
- Plan: Investor plan. A Founder key answers 403 `plan_required`.
- Formats: JSON, CSV (`.csv`)
- API: One-Word Domains API

## Request

| Field | Type | Needs | Where | Description |
| --- | --- | --- | --- | --- |
| `types` | string | Optional | Query | Comma list of change types (default all): price_drop, price_increase, status_change, expiry_window, lifecycle_move, registrar_change, transfer, lock_removed, renewal_observed, nameserver_change, parking_change, auction_ending, auction_jump. |
| `ending` | string | Optional | Query | Comma list of endings without the dot. |
| `since` | string | Optional | Query | Events observed at or after this time, oldest first. |
| `limit` | integer | Optional | Query | Rows a page: 20 by default, at most 20 without a key and 100 with a paid subscription; a larger value is clamped. |
| `cursor` | string | Optional | Query | The `meta.cursor` of the previous page; the last page answers `null`. |
| `fields` | string | Optional | Query | Comma-separated top-level keys to keep; an unknown key answers 400 `unsupported_field`. |

## Sample request

```bash
curl -X GET "https://api.unique.domains/v1/domains/changes?types=price_drop&ending=com%2Cio" \
  -H "Authorization: Bearer YOUR_MEMBER_KEY"
```

## Response

| Field | Type | Description |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |
| `type` | string |  |
| `observedAt` | string |  |
| `subject` | object |  |
| `before` | object \| null |  |
| `after` | object \| null |  |
| `expiresAt` | string \| null |  |

## Errors

| Code | Status | What it means |
| --- | --- | --- |
| [`validation_failed`](https://unique.domains/api/problems/validation_failed) | 400 | A value is not valid |
| [`cursor_invalid`](https://unique.domains/api/problems/cursor_invalid) | 400 | The cursor is not valid |
| [`keyed_only`](https://unique.domains/api/problems/keyed_only) | 403 | A paid subscription is required |
| [`rate_limited`](https://unique.domains/api/problems/rate_limited) | 429 | Too many requests |
| [`internal`](https://unique.domains/api/problems/internal) | 500 | Unexpected error |

## Example answer

200, application/json

```json
{
  "data": [
    {
      "id": "5b1f7c3e-2d48-4a9b-8e60-f1c2d3a4b5e6",
      "name": "harbor.co",
      "type": "price_drop",
      "observedAt": "2026-11-05T03:12:00.000Z",
      "subject": {
        "kind": "name",
        "key": "harbor.co"
      },
      "before": {
        "price": 116
      },
      "after": {
        "price": 27.5
      },
      "expiresAt": null
    }
  ],
  "meta": {
    "asOf": "2026-11-05T08:00:00Z",
    "cursor": null,
    "limit": 20
  },
  "links": {
    "self": "https://api.unique.domains/v1/domains/changes?types=price_drop&ending=com%2Cio",
    "next": null,
    "register": null,
    "product": null,
    "dataset": null
  }
}
```

API status: https://uniquedomains.instatus.com

Full reference: https://unique.domains/api
