---
title: "List the job changes a watchlist has detected"
method: GET
path: "/api/v1/watchlists/{signalId}/changes"
tags: ["Watchlists"]
---

# List the job changes a watchlist has detected

`GET /api/v1/watchlists/{signalId}/changes`

## Request

- Base URL: `https://api.rodz.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.rodz.io/api/v1/watchlists/{signalId}/changes`
- Auth: HTTP bearer

Read the job changes a watchlist has already detected — to backfill a CRM from history, to reconcile against what your webhook received, or to work out why a watched person produced no lead.

**Input:** `signalId` (path), plus optional `confirmedOnly` (default true — only real job moves, the same set delivered to your webhook; set false to also see candidate changes that were checked and dismissed, such as a headline edit or a reworded title), `limit` (1-500, default 100) and `offset`.

**Output:** `total` and `changes` — each with `id`, `detectedAt`, `changeType` (`company`, `title`, or `both`), `previousTitle` / `previousCompany`, `newTitle` / `newCompany`, and `leadId` (matching `contact.lead_id` in the webhook payload, or null when the change was not confirmed).

Changes are newest-first. A dismissed change with `leadId: null` is the answer to 'this person changed job, why did I get nothing' — the profile edit was judged not to be a real move.

## Path parameters

- `signalId` string, required: Id of the watchlist signal, as returned by the create endpoint.

## Query parameters

- `confirmedOnly` boolean: True (default) returns only changes confirmed as real job moves — the same set delivered to your webhook. False also returns candidate changes that were checked and dismissed (a headline edit, a reworded title), which is useful when auditing why someone produced no lead.
- `limit` integer
- `offset` integer

## Response `200`

Successful Response

- object
  - `total` integer, required
  - `changes` object[], required
    - `id` string, required
    - `detectedAt` string, required
    - `changeType` string, nullable: What changed: "company", "title", or "both".
    - `previousTitle` string, nullable
    - `previousCompany` string, nullable
    - `newTitle` string, nullable
    - `newCompany` string, nullable
    - `leadId` string, nullable: Id of the lead this change produced, matching `contact.lead_id` in the webhook payload. Null when the change was detected but not confirmed as a real job change.

## Other responses

- `400`: The signal exists but watches the other kind of subject
- `404`: No watchlist signal with this id on your account
- `422`: Validation Error
- `429`: Rate limit exceeded. Retry after the number of seconds in the `Retry-After` response header.

---

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