---
title: "Poll an async people-search request"
method: GET
path: "/api/v1/enrichment/people-search/{request_id}"
tags: ["Enrichment"]
---

# Poll an async people-search request

`GET /api/v1/enrichment/people-search/{request_id}`

## 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/enrichment/people-search/{request_id}`
- Auth: HTTP bearer

Check the status and retrieve results of an async people-search request—use when your webhook receiver was temporarily unavailable or you prefer polling over webhooks.

**Input:** `requestId` (the ID from your initial async POST response).

**Output:** job status (pending/completed/failed); when complete, search results in your configured format (batch: full page of results; per-result: page metadata only, with individual results already streamed to your webhook one-by-one); `webhookDeliveredCount` and `webhookFailedCount` show successful and failed webhook POSTs so you can detect partial failures and decide whether to refetch.

## Path parameters

- `request_id` string, required

## Response `200`

Job state. Inspect `status` to know whether to consume `result` (completed) or `error` (failed) or wait (pending).

- object: Async job state — returned by GET /enrichment/people-search/{requestId}.
  - `requestId` string, required
  - `status` string, required: One of: pending, completed, failed
  - `result` object, nullable: Full search response body when status=completed — the same shape the synchronous POST returns, so one generated type serves both. `null` while status=pending or status=failed. For `per_result` jobs this carries the first page's metadata (totalPages, aiValidationStatus, etc.) but an empty `results` array — the actual rows were streamed to your webhook one by one.
    - `results` object[], nullable: Matching profiles (up to 25 per page)
      - `linkedinUrl` string, nullable: Profile URL
      - `firstName` string, nullable: First name
      - `lastName` string, nullable: Last name
      - `location` string, nullable: Location string
      - `openProfile` boolean, nullable: True if the profile is an Open Profile (messageable without connection)
      - `premium` boolean, nullable: True if the member has a premium account
      - `currentPositions` object[], nullable: Current positions held by the person
        - `companyName` string, nullable: Company name
        - `title` string, nullable: Job title at the company
        - `companyLinkedinUrl` string, nullable: Company LinkedIn page URL
        - `startedOnYear` integer, nullable: Year the person started this position
        - `startedOnMonth` integer, nullable: Month (1-12) the person started this position
      - `qualificationStatus` string, nullable: AI qualification verdict, one of: QUALIFIED, DISQUALIFIED
      - `qualificationReason` string, nullable: Human-readable explanation for the qualification verdict
    - `count` integer, nullable: Number of results on this page
    - `page` integer, nullable: Current page number (1-based)
    - `totalPages` integer, nullable: Total number of pages available
    - `total` integer, nullable: Total number of matching profiles
    - `hasMore` boolean, nullable: True if more pages are available
    - `aiValidationStatus` string, nullable: AI qualification pass status, one of: ok (normal), unavailable (AI call failed; every result is defaulted to QUALIFIED)
    - `metadata` object[], nullable: Caller-supplied metadata echoed back for this request
      - `rowId` string, nullable: Caller-supplied row identifier echoed back for this request
      - `campaign` string, nullable: Caller-supplied campaign identifier echoed back for this request
  - `error` string, nullable: Set only when status=failed. Short, human-readable reason the lookup could not complete.
  - `webhookDeliveredCount` integer, nullable: Number of webhook POSTs that landed (2xx response). For `batch` jobs this is 0 or 1; for `per_result` jobs it counts successful per-item deliveries. `null` when no webhook was configured.
  - `webhookFailedCount` integer, nullable: Number of webhook POSTs that errored (non-2xx, timeout, or connection refused). Use to detect partial delivery and decide whether to refetch via this GET endpoint. `null` when no webhook was configured.

## Other responses

- `404`: No request found for this ID under your account. Either the request ID is wrong, results have aged out (1 h TTL), or the ID belongs to a different 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)
