---
title: "List the people a watchlist is watching"
method: GET
path: "/api/v1/watchlists/{signalId}/profiles"
tags: ["Watchlists"]
---

# List the people a watchlist is watching

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

## 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}/profiles`
- Auth: HTTP bearer

See exactly who a Job Change Watchlist is watching, and what role each person was last seen in — so you can confirm the list you sent is the list being checked before you wait a week for changes that were never going to come.

**Input:** `signalId` (path — the watchlist signal's id), plus optional `status` (`active`, `archived`, or `error`; omit for all), `search` (case-insensitive match on name, email, employer, or profile URL), `limit` (1-500, default 100) and `offset`.

**Output:** `total` (entries matching the filter, ignoring pagination) and `profiles` — each with `id` (pass it to DELETE), `linkedinUrl`, `firstName` / `lastName` / `email`, `currentTitle` and `currentCompany` (the baseline the next check compares against), `status`, and `lastCheckedAt` (null until the first check runs).

Two states are worth acting on: `error` means the profile could not be read repeatedly and is producing nothing, and a `currentCompany` that is still null long after `lastCheckedAt` was set means we could not read that person's employer, so an employer change cannot be detected for them.

## Path parameters

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

## Query parameters

- `status` 'active' | 'archived' | 'error', nullable: Filter by entry state. Omit to get every entry.
- `search` string, nullable: Case-insensitive match on name, email, employer, or profile URL.
- `limit` integer
- `offset` integer

## Response `200`

Successful Response

- object
  - `total` integer, required: Entries matching the filter, ignoring pagination.
  - `profiles` object[], required
    - `id` string, required: Id of this entry — pass it to DELETE to stop watching.
    - `linkedinUrl` string, required
    - `firstName` string, nullable
    - `lastName` string, nullable
    - `email` string, nullable
    - `currentTitle` string, nullable: Title as of the last check — the baseline the next check compares against.
    - `currentCompany` string, nullable: Employer as of the last check.
    - `status` string, required: `active` (being checked), `archived` (removed from the list, kept for history), or `error` (the profile could not be read repeatedly).
    - `lastCheckedAt` string, nullable: When this person was last checked. Null until the first check runs.

## 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)
