Add members
Add companies or people to a list.
Adds companies or people to a list. Identify each one by its LinkedIn URL or handle; on company lists, a domain also works when you have nothing else. The call succeeds member by member: the members that could not be added come back in rejected, and the others are still added.
On a customer or prospect list that is monitored, an added account is monitored, and charged, right away.
Smart lists are managed in the app; their members can't be added or removed through the API.
Route
Access modes
Use a workspace API key. The workspace is inferred from the key.
Authorization: Bearer sk_live_...Path parameters
| Parameter | Type | Description |
|---|---|---|
| kind | string | company or profile. It matches the kind of the list. |
| list_id | integer | ID of the list. |
Body parameters
| Parameter | Type | Description |
|---|---|---|
| members | array | Required. 1 to 100 members to add. |
| members[].linkedin_url | string | LinkedIn URL of the company or person, with or without https://. |
| members[].linkedin_handle | string | LinkedIn handle. |
| members[].domain | string | Company domain, for example stripe.com. Company lists only, and only when you have no LinkedIn URL or handle. |
| members[].company | object | Champion lists only. The company where you currently know the person, with a name or a domain. When their profile shows a different company, Sillage reports a job change. |
Each member needs a linkedin_url, a linkedin_handle or a domain.
Example request
curl -X POST "https://api.getsillage.com/api/v3/lists/company/12/members" \
-H "Authorization: Bearer $SILLAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"members": [
{
"linkedin_url": "linkedin.com/company/acme"
},
{
"domain": "globex.com"
}
]
}'Success response
Status: 200 OK
The call always answers 200, even when no member could be added. data reports each outcome in its own array, and every member you sent is in exactly one of them: added holds the members that were added, already_in_list holds the members that were already on the list, and rejected holds the members that could not be added. added and already_in_list describe each member as List members does, with the input you sent first. They do not carry monitoring: read it with List members.
{
"data": {
"added": [
{
"input": {
"linkedin_url": "https://www.linkedin.com/company/acme"
},
"id": 301,
"name": "Acme",
"domain": "acme.com",
"linkedin_handle": "acme",
"linkedin_url": "https://www.linkedin.com/company/acme",
"logo_url": "https://media.licdn.com/dms/image/acme-logo.png",
"signal_buckets": ["essential"]
}
],
"already_in_list": [
{
"input": {
"domain": "initech.com"
},
"id": 302,
"name": "Initech",
"domain": "initech.com",
"linkedin_handle": "initech",
"linkedin_url": "https://www.linkedin.com/company/initech",
"logo_url": null,
"signal_buckets": null
}
],
"rejected": [
{
"input": {
"domain": "globex.com"
},
"code": "domain_not_resolved",
"message": "The company could not be identified from this domain."
}
]
}
}Response fields
| Field | Type | Description |
|---|---|---|
| data.added | array of object | The members that were added, each with the input you sent and the fields described in List members. |
| data.already_in_list | array of object | The members that were already on the list, in the same shape as added. |
| data.rejected | array of object | The members that could not be added. Empty when every member was added or already on the list. |
| data.rejected[].input | object | The member you sent that failed. |
| data.rejected[].code | string | Why it failed. See the table below. |
| data.rejected[].message | string | What went wrong, in words, and how to fix it when you can. |
Rejection codes
| Code | Meaning |
|---|---|
multiple_domain_matches | The domain matched more than one company. Use a LinkedIn URL or handle instead. |
domain_not_resolved | The company could not be identified from this domain. |
resolution_failed | Something unexpected went wrong while identifying the member. |
wrong_entity_type | The member is a company on a list of people, or a person on a list of companies. |
invalid_identifier | The value is not a usable LinkedIn URL, handle or domain. For a malformed domain the message is "This is not a valid domain" (with no dot: "This is not a valid domain: it has no extension such as .com"). |
New codes may be added; ignore codes you don't know.
Errors
| Status | Meaning |
|---|---|
| 401 | The API key is missing or invalid. |
| 404 | The list does not exist. |
| 409 | The list is a smart list. Smart lists are managed in the app; their members can't be added through the API. |
| 422 | The body is not valid, or company is sent on a list that is not a champion list (errors names each member that sends it, as members[0].company: "only allowed on champion lists"). |
| 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.