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

# Re-enable off-market candidates for ParaAI matching

<Info>
  **Required scopes:** `talent_network:write`<br />
  **Rate limit:** `write` tier, 60 requests per minute per key
</Info>

Puts up to 100 off-market candidates back on the ParaAI market in one call — the CRM-side equivalent of the Talent Network tab's "Re-enable" action. It resumes matching for candidates who were toggled off or aged out of their eligibility window; re-enabling a candidate Paraform detected as off-market overrides that detected signal.

Each item references a candidate by `candidateUserId`, or by `email` / `linkedinUrl` (`candidateUserId` wins; otherwise `linkedinUrl` beats `email`, as in `lookup`). An identity reference acts on every membership row your agency holds for that person; `candidateUserIds` lists the rows considered.

`results` is index-aligned with `candidates`; a well-formed request always answers 200, so branch on per-item `ok`. `status` values: `on_market` (matching resumed), `already_on_market` (nothing to do), `locked` (Paraform locked this candidate off market; only a role submission restores eligibility), `not_reenableable` (the candidate is not in ParaAI consideration — never submitted, or previously excluded — so a fresh submit is the way to put them on the market), and `not_found` (no candidate owned by an approved member of your agency matches this reference, indistinguishable from a candidate that does not exist). Statuses are never renamed but new ones may be added — branch on `ok` and treat an unknown `status` as informational.

Unlike `/talent-network/candidates/off-market`, this endpoint never requires the Talent Network management entitlement: candidates fall off-market via automated expiry for every agency, so recovering them must always work. Retries converge on `already_on_market`, so no `Idempotency-Key` is needed.

## Body

<ParamField body="candidates" type="object[]" required>
  Constraints: min items 1, max items 100.

  <Expandable title="candidates properties">
    <ParamField body="candidateUserId" type="string | null">
      Constraints: min length 1.
    </ParamField>

    <ParamField body="email" type="string | null" />

    <ParamField body="linkedinUrl" type="string | null" />
  </Expandable>
</ParamField>

## Response

<ResponseField name="results" type="object[]" required>
  <Expandable title="results properties">
    <ResponseField name="index" type="integer" required>
      Constraints: minimum 0.
    </ResponseField>

    <ResponseField name="candidateUserIds" type="string[]" />

    <ResponseField name="ok" type="boolean" required />

    <ResponseField name="status" type="string" required>
      Allowed values: `on_market`, `already_on_market`, `locked`, `not_reenableable`, `not_found`.
    </ResponseField>

    <ResponseField name="message" type="string" />
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://external-api.paraform.com/api/external/v1/talent-network/candidates/re-enable" \
    -H "Authorization: Bearer $PARAFORM_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
    "candidates": [
      {
        "candidateUserId": "string"
      }
    ]
  }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "results": [
      {
        "index": 0,
        "ok": true,
        "status": "on_market"
      }
    ]
  }
  ```
</ResponseExample>


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