---
title: "List a signal's leads"
method: GET
path: "/api/v1/signals/{signal_id}/leads"
tags: ["Signals"]
---

# List a signal's leads

`GET /api/v1/signals/{signal_id}/leads`

## 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/signals/{signal_id}/leads`
- Auth: HTTP bearer

Read the leads a signal has delivered — the prospects and companies it found, with their enriched contact and company details — without running a webhook receiver. Use it to review what a signal produced yesterday, to back-fill a CRM after an outage, or to let an AI assistant answer "show me my new leads".

**Input:** `signalId` in the path; optional `since` (ISO-8601 timestamp: only leads produced at or after it), `limit` (1-100, default 25) and `offset` (default 0) to page through the results.

**Output:** `signalId`, `total` (matching leads across all pages), `limit`, `offset`, `hasMore`, and `leads` — newest first, each in exactly the shape the signal's webhook delivers (nested `signal` / `contact` / `company`, snake_case, see `outputFields` in `GET /api/v1/signal-types`). For an Account Watchlist, the leads of every enabled source are returned under the watchlist's own id. A company-level lead (a funding round, a deal, a job posting delivered without persona targeting) has `contact` set to the empty string `""`, not an object, so it carries no `contact.lead_id`.

Reading leads is free: a lead is charged once, when it is produced. Leads that did not pass your filters, and watchlist changes still waiting for your review, are not returned.

## Path parameters

- `signal_id` string, required

## Query parameters

- `since` string, date-time, nullable: Only leads produced at or after this ISO-8601 timestamp.
- `limit` integer: Leads per page, 1 to 100; default 25.
- `offset` integer: Leads to skip (pagination).

## Response `200`

Successful Response

- object: A page of the leads a signal has delivered, newest first.
  - `signalId` string, required: The signal's id.
  - `total` integer, required: Leads matching the request, across all pages.
  - `limit` integer, required: Page size used for this response.
  - `offset` integer, required: Leads skipped before this page.
  - `hasMore` boolean, required: True when another page follows.
  - `leads` object[], required: The leads, newest first. Each one is the exact object the signal's webhook delivers: nested `signal`, `contact` and `company` objects with snake_case fields (`contact` is the empty string `""` for a company-level lead, for example a funding round delivered without persona targeting). The fields per signal type are listed in `outputFields` of `GET /api/v1/signal-types`.

## Other responses

- `404`: No 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)
