# Update a potential candidate

Update a curated set of lead fields. Scope: sourcing:write.

Updates a curated subset of a potential candidate's fields. **Scope:** `sourcing:write`. Requires employer-write authority in one of the lead's organizations (admins bypass). Send only the fields you want to change.

## Path parameters

| Parameter | Type | Description |
| --- | --- | --- |
| `id` | string | The potential-candidate id. |

## Request body

| Field | Type | Description |
| --- | --- | --- |
| `fullName` | string | Lead's full name. |
| `status` | string | Lead status. |
| `email` | string \| null | CV email (validated). |
| `contactEmail` | string \| null | Account/contact email (validated). |
| `phone` | string \| null | Phone (validated). |
| `summary` | string \| null | Free-text summary. |
| `skills` | string[] | Skill tags. |

## Example request

```bash
curl -X PATCH https://app.talent-ray.com/api/v1/sourcing/pc_1 \
  -H "Authorization: Bearer tr_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "parsed", "skills": ["python", "sql", "airflow"] }'
```

## Response

`200 OK` — the updated potential candidate (same shape as [Get a potential candidate](/docs/api/pipeline/sourcing-get/)).

## Status codes

| Status | Meaning |
| --- | --- |
| `200` | Updated. |
| `400` | `bad_request` — invalid or empty body. |
| `401` | No valid API key. |
| `403` | `insufficient_scope` (missing `sourcing:write`) or `forbidden` (no write authority in the lead's org). |
| `404` | Not found, or not visible to the key. |
| `429` | Rate limit exceeded. |