Get lead
Retrieve a lead's data by its lead_id.
Retrieves the data for one lead, identified by the lead_id returned by the Signals API.
A lead without a linked profile still returns 200 OK, with the profile fields set to null. Likewise, when the lead's current company cannot be resolved, company is null. Neither case is an error.
experiences is null when no work history is available for the lead (for example, no linked profile, or a profile not yet enriched), and an array otherwise — again, null is not an error.
Route
Path parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | The lead_id from a signal payload. Must be greater than or equal to 1. Always use the lead_id value returned to you by the API — don't guess it or reuse one from another workspace. |
Example request
curl "https://api.getsillage.com/api/v2/leads/123" \
-H "Authorization: Bearer sk_live_..."Success response
Status: 200 OK
{
"data": {
"id": 123,
"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",
"position": "VP Sales",
"location": "Paris, France",
"geo": {
"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",
"activity_summary": "Acme builds enterprise sales software.",
"employee_range": "201-500",
"location": "Paris, France"
},
"experiences": [
{
"title": "VP Sales",
"company_name": "Acme",
"company_linkedin_url": "https://www.linkedin.com/company/acme",
"location": "Paris, France",
"start_date": "2022-03-01T00:00:00.000Z",
"end_date": null,
"is_current": true
},
{
"title": "Sales Director",
"company_name": "Globex",
"company_linkedin_url": "https://www.linkedin.com/company/globex",
"location": "Lyon, France",
"start_date": "2018-06-01T00:00:00.000Z",
"end_date": "2022-02-01T00:00:00.000Z",
"is_current": false
}
]
}
}Response headers
| Header | Description |
|---|---|
| X-Request-Id | Request UUID for debugging and support. |
| X-Response-Time | Server response time. |
Response fields
| Field | Type | Description |
|---|---|---|
| data.id | integer | The lead id, as returned by the signals endpoints. |
| 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 handle. |
| data.linkedin_headline | string or null | LinkedIn headline. |
| data.avatar_url | string or null | Profile picture URL. |
| data.position | string or null | Job title. |
| data.location | string or null | Lead's location. |
| data.geo | object or null | Lead's location in a structured form, or null when no structured location is resolved. |
| data.geo.city | string or null | City. |
| data.geo.region | string or null | Region. |
| data.geo.country | string or null | Country. |
| data.geo.country_code | string or null | ISO country code, for example FR. |
| data.company | object or null | The lead's current company, or null when it cannot be resolved. |
| data.company.id | integer | Company id, usable with Get company. Always use the company.id value returned to you by this response — don't guess it or reuse one from another workspace. |
| 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 handle. |
| data.company.activity_summary | string or null | Short summary of what the company does. |
| data.company.employee_range | string or null | Employee headcount range, for example 201-500. |
| data.company.location | string or null | Company location. |
| data.experiences | array or null | The lead's work history, most recent position first, or null when no work history is available. |
| data.experiences[].title | string or null | Job title held during that position. |
| data.experiences[].company_name | string or null | Name of the company for that position. |
| data.experiences[].company_linkedin_url | string or null | LinkedIn company page URL for that position. |
| data.experiences[].location | string or null | Location for that position. |
| data.experiences[].start_date | string or null | Start date, ISO 8601. The underlying data may only carry a month or year, so treat this as approximate. |
| data.experiences[].end_date | string or null | End date, ISO 8601, or null for an ongoing position. |
| data.experiences[].is_current | boolean | true if this is one of the lead's current positions. |
All profile and lead fields are null when the lead has no linked profile. company is null when the lead's current company cannot be resolved. Neither case is an error.
location is the display string as found on the lead's LinkedIn profile. geo is the same location broken down into structured fields, and may be null on its own when no structured location could be resolved — this is a valid 200 OK state, not an error.
This endpoint does not expose email addresses or phone numbers.
Errors
| Status | Meaning |
|---|---|
| 400 | Invalid id path parameter. |
| 401 | The API key is missing or invalid. |
| 404 | The lead was not found or does not belong to this workspace. |
| 429 | Rate limit exceeded. |
| 500 | An unexpected server error occurred. |
Error responses use RFC 9457 problem documents with Content-Type: application/problem+json:
{
"type": "https://docs.getsillage.com/errors/not-found",
"title": "Not Found",
"status": 404,
"detail": "Lead not found.",
"instance": "/api/v2/leads/123"
}