- Home
- /
- Help Center
- /
- ReactIn APIs
- /
- Update leads via API
Update leads via API
Need to change a lead's data after it was added? The Update Lead API lets you patch an existing lead in place, email, name, company, or custom variables, without creating a duplicate.
Already added a lead and need to change its data later, fix a typo, attach a fresh custom variable, or push an updated email from your CRM? The Update Lead API lets you patch an existing lead in place, without creating a duplicate.
β What you'll need before you start
Before using this API, make sure you have:
-
Your Organization ID, List ID, and API Key
-
The lead's
idyou want to update, or thelinkedinUrlyou imported it with
π π Not sure how to get your API credentials? Follow this guide
π‘ You get a lead's
idfrom the Get Leads endpoint (theidfield on each lead), or from the response of the Add Lead call.
π API Endpoint
Send a PATCH request to this endpoint to update a lead:
PATCH https://app.reactin.io/api/[organizationId]/lists/[listId]/leads
π Authentication & Headers
| Header | Value | Description |
|---|---|---|
| Authorization | YOUR_API_KEY | Your secret API key from ReactIn |
| Content-Type | application/json | Required for all requests |
π Keep your API key private and only use it from secure backend code, never from the browser.
π§Ύ What to include in your request (Body)
Identify the lead with either leadId or linkedinUrl. Every other field is optional, send just the ones you want to change. This is a true partial update: fields you omit are left untouched.
| Field | Required | Description |
|---|---|---|
leadId | Yes* | The id of the lead you want to update (*or linkedinUrl) |
email | Optional | New email |
firstName | Optional | New first name |
lastName | Optional | New last name |
linkedinUrl | Yes* | With leadId: the new LinkedIn profile URL. Without leadId: the LinkedIn URL of the lead to update (*required if no leadId) |
companyName | Optional | New company name |
customVariable1-5 | Optional | Any custom variable to add or overwrite |
π Update by LinkedIn URL: when
leadIdis omitted, ReactIn looks the lead up in the list by itslinkedinUrl(www.and trailing slash don't matter). Handy to fix a variable you got wrong on import: resend the samelinkedinUrlwith the corrected fields. If several leads of the list match that URL, the call fails with409, useleadIdinstead.
β οΈ Updating a lead resets its enrichment status, so ReactIn will try to auto-enrich it again with the new data. It also fires the
LEAD_UPDATEDwebhook if you have one connected.
π§ͺ Example (JavaScript)
await fetch("https://app.reactin.io/api/[organizationId]/lists/[listId]/leads", {
method: "PATCH",
headers: {
'Content-Type': 'application/json',
'Authorization': 'YOUR_API_KEY'
},
body: JSON.stringify({
leadId: 'lead_a1b2c3',
email: 'john.doe@newcompany.com',
companyName: 'New Company',
customVariable1: 'Renewed'
})
});
Or, without the leadId:
await fetch("https://app.reactin.io/api/[organizationId]/lists/[listId]/leads", {
method: "PATCH",
headers: {
'Content-Type': 'application/json',
'Authorization': 'YOUR_API_KEY'
},
body: JSON.stringify({
linkedinUrl: 'https://www.linkedin.com/in/johndoe/',
customVariable1: 'Corrected icebreaker'
})
});
π§Ύ Response format
{
"success": true,
"id": "lead_a1b2c3"
}
π« Common Errors
| Code | Description |
|---|---|
| 400 | Bad request, neither leadId nor linkedinUrl is provided |
| 401 | Unauthorized, invalid or missing API key |
| 404 | Not found, the list or the lead doesn't exist in your organization |
| 409 | Conflict, several leads of the list match this linkedinUrl, use leadId |
| 429 | Too many requests, rate limit exceeded |
| 500 | Internal server error, try again later |
π‘ Best Practices
-
π Fetch the lead's
idfrom the Get Leads endpoint before updating -
βοΈ Only send the fields you actually want to change
-
π Keep your API key private, use a backend server or proxy
-
π Add retry logic for occasional network or server errors
π‘ Pro tip: Because updates re-trigger enrichment, batching several changes into a single PATCH is cheaper than sending one request per field.