API v3 is live and in beta: expect possible malfunctions and breaking changes in the coming days. If you find a bug, please report it to your Sillage contact.

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

POST/api/v3/lists/{kind}/{list_id}/members

Access modes

Use a workspace API key. The workspace is inferred from the key.

Authorization: Bearer sk_live_...

Path parameters

ParameterTypeDescription
kindstringcompany or profile. It matches the kind of the list.
list_idintegerID of the list.

Body parameters

ParameterTypeDescription
membersarrayRequired. 1 to 100 members to add.
members[].linkedin_urlstringLinkedIn URL of the company or person, with or without https://.
members[].linkedin_handlestringLinkedIn handle.
members[].domainstringCompany domain, for example stripe.com. Company lists only, and only when you have no LinkedIn URL or handle.
members[].companyobjectChampion 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

FieldTypeDescription
data.addedarray of objectThe members that were added, each with the input you sent and the fields described in List members.
data.already_in_listarray of objectThe members that were already on the list, in the same shape as added.
data.rejectedarray of objectThe members that could not be added. Empty when every member was added or already on the list.
data.rejected[].inputobjectThe member you sent that failed.
data.rejected[].codestringWhy it failed. See the table below.
data.rejected[].messagestringWhat went wrong, in words, and how to fix it when you can.

Rejection codes

CodeMeaning
multiple_domain_matchesThe domain matched more than one company. Use a LinkedIn URL or handle instead.
domain_not_resolvedThe company could not be identified from this domain.
resolution_failedSomething unexpected went wrong while identifying the member.
wrong_entity_typeThe member is a company on a list of people, or a person on a list of companies.
invalid_identifierThe 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

StatusMeaning
401The API key is missing or invalid.
404The list does not exist.
409The list is a smart list. Smart lists are managed in the app; their members can't be added through the API.
422The 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").
429Rate limit exceeded.
500An 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.

On this page