> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paraform.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Check network membership

> Mirror your agency's talent network in your CRM and pre-flight bulk submits.

Two read endpoints let your CRM mirror talent-network membership without submitting anything. Both need `talent_network:read`, which every agency key carries.

Both endpoints only ever return **your own agency's** candidates. A candidate who is in the talent network through a different agency looks exactly like someone who isn't in the network at all.

## List your members

[`GET /talent-network/candidates`](/agency/api-reference/list-talent-network-candidates) returns every candidate your agency has in the network. It's the same set your team sees on the in-app Talent Network tab, whether they entered by direct submission (`directlySubmittedAt` is set) or through a role submission (`hasRoleSubmission` is `true`).

```bash theme={null}
curl "https://external-api.paraform.com/api/external/v1/talent-network/candidates?status=on_market&daysRemainingMax=7" \
  -H "Authorization: Bearer $PARAFORM_API_KEY"
```

Each row has `candidateUserId`, `name`, `email`, `linkedinUrl`, and a `status`:

* `on_market`: ParaAI is actively considering the candidate. `daysRemaining` counts down the eligibility window and `expiresAt` is when it ends.
* `off_market`: still in your network but not being considered. `daysRemaining` and `expiresAt` are `null`.

### Filters

All filters are optional and combine.

| Parameter | Effect |
| - | - |
| `status` | `on_market` or `off_market`. |
| `daysRemainingMin`, `daysRemainingMax` | Bound the remaining window, inclusive. Send both for a range, or one as a floor or ceiling. |

`?status=on_market&daysRemainingMax=7` is everyone about to fall off the market this week. Only on-market candidates have a `daysRemaining`, so these combinations return `400` instead of an empty page:

* a days bound together with `status=off_market`
* a `daysRemainingMin` greater than `daysRemainingMax`

### Paging

Pass `nextCursor` back as `cursor` until it's absent (`limit` defaults to 50, maximum 100). The walk is stable: it visits every candidate that existed when it started exactly once, even while your team keeps submitting. See [Pagination](/pagination).

A candidate is listed through the agency member who owns them, and only while that member is an approved member of your agency. If the owning recruiter is deactivated or leaves, the candidate leaves this list too.

## Pre-flight a bulk submit

[`POST /talent-network/candidates/lookup`](/agency/api-reference/lookup-talent-network-candidates) answers, for up to 500 identities at once, whether each is already in your network.

```bash theme={null}
curl -X POST "https://external-api.paraform.com/api/external/v1/talent-network/candidates/lookup" \
  -H "Authorization: Bearer $PARAFORM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "identities": [
      { "email": "jane@example.com", "linkedinUrl": "https://www.linkedin.com/in/janedoe" },
      { "email": "sam@example.com" }
    ]
  }'
```

`results` is aligned by index with `identities`. Each result has `inNetwork` and, when it's `true`, `candidateUserId`, `status`, and `daysRemaining`.

* Each identity needs `email`, `linkedinUrl`, or both. When both are given, LinkedIn is matched first and wins, the same rule submission deduplication uses. So `inNetwork: false` means a submit would create new work.
* Values are never rejected. An unparseable URL or unknown email just answers `inNetwork: false`.
* Duplicate identities in one request get the same answer.
* In rare cases a stored handle differs from yours only by letter case, and lookup answers `false` for a candidate a submit would deduplicate. Resubmitting is always safe.

Lookup only reads. It never creates or changes anything and ignores `Idempotency-Key`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.