Get a lead
Retrieve a lead's data by its ID.
Returns one lead of your workspace: their profile, their current company, their work history, where they stand in the pipeline and who owns them.
A lead without a linked profile still answers 200 OK, with the profile fields set to null. Likewise company is null when the current company cannot be resolved, and experiences is an empty array when no work history is known. None of these cases is an error.
Route
Access modes
Use a workspace API key. The workspace is inferred from the key.
Authorization: Bearer sk_live_...Path parameters
| Parameter | Type | Description |
|---|---|---|
| lead_id | integer | ID of the lead: the lead.id of a signal, or the id of a lead returned by Query leads. Use the value the API returned to you; do not guess it or reuse one from another workspace. |
Example request
curl "https://api.getsillage.com/api/v3/leads/123" \
-H "Authorization: Bearer $SILLAGE_API_KEY"Success response
Status: 200 OK
{
"data": {
"id": 123,
"full_name": "Jane Doe",
"first_name": "Jane",
"last_name": "Doe",
"linkedin_url": "https://www.linkedin.com/in/janedoe",
"linkedin_handle": "janedoe",
"linkedin_headline": "VP Sales at Acme",
"avatar_url": "https://example.com/avatar.png",
"email": "jane.doe@acme.com",
"phone": "+33 1 23 45 67 89",
"position": "VP Sales",
"location": {
"city": "Paris",
"region": "Île-de-France",
"country": "France",
"country_code": "FR"
},
"company": {
"id": 789,
"name": "Acme",
"domain": "acme.com",
"linkedin_url": "https://www.linkedin.com/company/acme",
"linkedin_handle": "acme",
"logo_url": "https://example.com/acme-logo.png",
"activity_summary": "Acme builds enterprise sales software.",
"employee_range": "201-500",
"location": {
"city": "Paris",
"region": "Île-de-France",
"country": "France",
"country_code": "FR"
},
"in_key_account_list": true
},
"experiences": [
{
"position": "VP Sales",
"company_name": "Acme",
"company_linkedin_url": "https://www.linkedin.com/company/acme",
"location": "Paris, France",
"start_date": "2022-03-01",
"end_date": null,
"is_current": true
},
{
"position": "Sales Director",
"company_name": "Globex",
"company_linkedin_url": "https://www.linkedin.com/company/globex",
"location": "Lyon, France",
"start_date": "2018-06-01",
"end_date": "2022-02-01",
"is_current": false
}
],
"status": "meeting_booked",
"owner": {
"email": "sam@acme.com",
"first_name": "Sam",
"last_name": "Martin"
},
"crm_records": [
{
"provider": "salesforce",
"contact_id": "003xx000004TMMaBC",
"account_id": "001xx000008ABCdEF"
}
],
"created_at": "2026-09-14T09:12:44.000Z"
}
}Response fields
| Field | Type | Description |
|---|---|---|
| data.id | integer | ID of the lead. |
| data.full_name | string or null | Lead's full name. |
| data.first_name | string or null | Lead's first name. |
| data.last_name | string or null | Lead's last name. |
| data.linkedin_url | string or null | LinkedIn profile URL. |
| data.linkedin_handle | string or null | LinkedIn profile handle. |
| data.linkedin_headline | string or null | LinkedIn headline. |
| data.avatar_url | string or null | Profile picture URL. |
| data.email | string or null | Lead's email address, when known. |
| data.phone | string or null | Lead's phone number, when known. |
| data.position | string or null | Job title. |
| data.location | object or null | Lead's location. null when no location could be resolved. See Location. |
| data.company | object or null | The lead's current company, or null when the lead has no current company. |
| data.company.id | integer | ID of the company in the workspace, usable with Get a company. |
| data.company.name | string or null | Company name. |
| data.company.domain | string or null | Primary domain. |
| data.company.linkedin_url | string or null | LinkedIn company page URL. |
| data.company.linkedin_handle | string or null | LinkedIn company handle. |
| data.company.logo_url | string or null | Logo of the company. |
| data.company.activity_summary | string or null | Short summary of what the company does. |
| data.company.employee_range | string or null | Employee headcount range, one of the persona headcounts values: 1-10, 11-50, 51-200, 201-500, 501-1,000, 1,001-5,000, 5,001-10,000 or 10,001+. null when unknown. |
| data.company.location | object or null | The company's headquarters. See Location. |
| data.company.in_key_account_list | boolean | true when this company is on one of your customer or prospect lists. |
| data.experiences | array | The lead's work history, in the order of their LinkedIn profile and including the current position. An empty array when no work history is known. |
| data.experiences[].position | string or null | Job title held in that position. null when unknown, never an empty string. |
| data.experiences[].company_name | string or null | Name of the employer. null when unknown, never an empty string. |
| data.experiences[].company_linkedin_url | string or null | The employer's LinkedIn page, when known. |
| data.experiences[].location | string or null | The job's location as written on LinkedIn (free text). null when unknown, never an empty string. |
| data.experiences[].start_date | string or null | When the position started, as a date without a time (YYYY-MM-DD). The source may only carry a month or a year, so treat it as approximate. |
| data.experiences[].end_date | string or null | When the position ended, as a date without a time (YYYY-MM-DD). null for the current position or when unknown. |
| data.experiences[].is_current | boolean | true for the lead's current position. |
| data.status | string or null | Where the lead stands in your pipeline: see Pipeline status. null when no status is set. |
| data.owner | object or null | The workspace member assigned to the lead, or null when unassigned. |
| data.owner.email | string | The member's email address. |
| data.owner.first_name | string or null | The member's first name. |
| data.owner.last_name | string or null | The member's last name. |
| data.crm_records | array | The CRM records Sillage has matched the lead to, one item per CRM. Empty when the lead is not matched to a contact in any of your CRMs. |
| data.crm_records[].provider | string | The CRM, salesforce or hubspot. More CRMs may be added, so ignore values you do not handle. |
| data.crm_records[].contact_id | string or null | The lead's Contact ID in this CRM. |
| data.crm_records[].account_id | string or null | The ID of the Account associated with the contact in this CRM. null when the contact has no associated account. |
| data.created_at | string or null | When the lead was added to the workspace, as an ISO 8601 timestamp. |
Use crm_records to match the lead to your CRM record, for example to route it to the right owner.
Location
Every location in this API has the same shape: { "city", "region", "country", "country_code" }. Any part is null when it is not known, and the whole location is null when nothing could be resolved. country_code is the ISO country code, for example FR. This is a valid response, not an error.
Errors
| Status | Meaning |
|---|---|
| 401 | The API key is missing or invalid. |
| 404 | The lead does not exist. |
| 422 | The lead_id is not a valid ID, or a query parameter is sent: this route takes none, and errors names the parameter. |
| 429 | Rate limit exceeded. |
| 500 | An unexpected server error occurred. |
Error responses use RFC 9457 problem documents with Content-Type: application/problem+json. type is always about:blank; code tells one problem from another, detail says what went wrong this time, and errors names the field at fault.