curl --request POST \
--url https://api.lemlist.com/api/leads/{leadId}/enrich \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.lemlist.com/api/leads/{leadId}/enrich"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.lemlist.com/api/leads/{leadId}/enrich', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://api.lemlist.com/api/leads/{leadId}/enrich")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lemlist.com/api/leads/{leadId}/enrich",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}Enrich Lead
Enriches an existing lead in lemlist with additional data.
curl --request POST \
--url https://api.lemlist.com/api/leads/{leadId}/enrich \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.lemlist.com/api/leads/{leadId}/enrich"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.lemlist.com/api/leads/{leadId}/enrich', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://api.lemlist.com/api/leads/{leadId}/enrich")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lemlist.com/api/leads/{leadId}/enrich",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}409 ALREADY_ENRICHED answers when none of the requested workflows can add anything: the contact already has the data, a recent enrichment on the same inputs found nothing, verifyEmail is requested but the contact has no email, or the value was rejected as a CRM duplicate. force=true bypasses only the “already has the data” case. A lead already being enriched answers 409 until that enrichment is over, and force=true does not bypass it either.
When the enrichment cannot be started, the answer carries a code and a message: see Request errors.
Authorizations
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Path Parameters
Unique lead ID
Query Parameters
Find the lead's email. On when set to true.
Verify the deliverability of the lead's email. On when set to true.
Enrich the lead's LinkedIn profile. On when set to true.
Find the lead's phone number. On when set to true.
URL that receives the enrichmentDone or enrichmentError event of this enrichment, on top of your team's webhooks. See the webhooks of the Enrichment object.
Re-run an enrichment that would otherwise be skipped. Bypasses skips caused by data already present on the contact: existing email, existing phone, LinkedIn enrichment already done for the same linkedinUrl / linkedinUrlSalesNav, or email already having a deliverability status.
Does not bypass:
- Enrichment currently in progress — if another enrichment is already running for this contact, the request is still skipped (no parallel enrichments, no double billing).
- Previously returned not-found — for
findEmailandfindPhone, if a prior enrichment with the same inputs (linkedinUrl,linkedinUrlSalesNav, first / last name, company name / domain / LinkedIn URL) already returned not-found, the request is still skipped. Changing any of those inputs on the lead lifts the block without needingforce.
Response
Success
Enrichment ID
Was this page helpful?