Add Entities
Add companies or people to a watchlist by LinkedIn identity or company domain.
Adds members to a watchlist. Identify each entity by its linkedin_url or linkedin_handle (preferred). For company watchlists, a domain (e.g. stripe.com) is also accepted as a fallback when no LinkedIn identifier is available. Providing a domain on a people watchlist returns 422.
The call is partial-success: entities that were added appear in data, and any per-entity failures appear in errors. A 200 response means the request was accepted, always inspect errors for any that were not added. Re-adding members that are already present is safe and returns 200 with an empty data array. If no entities could be added because every one failed, the response is 422 with data: [] and errors populated.
Add entities
Path parameters
| Parameter | Type | Description |
|---|---|---|
| kind | string | Watchlist kind: company or profile (matches the list type). |
| watchlist_id | integer | Identifier of the watchlist. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| entities | array | Yes | 1 to 100 entities to add. |
| entities[].linkedin_url | string | One of | Full LinkedIn URL. Preferred identifier. |
| entities[].linkedin_handle | string | One of | LinkedIn handle. Preferred identifier. |
| entities[].domain | string | One of | Company domain (e.g. stripe.com). Company watchlists only, accepted as a fallback when no LinkedIn identifier is available. Not accepted on people watchlists. |
Example request
curl -X POST "https://api.getsillage.com/api/v2/watchlists/company/128/entities" \
-H "Authorization: Bearer $SILLAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "entities": [
{ "linkedin_url": "https://www.linkedin.com/company/openai" },
{ "linkedin_handle": "anthropic" }
] }'const response = await fetch(
'https://api.getsillage.com/api/v2/watchlists/company/128/entities',
{
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
entities: [
{ linkedin_url: 'https://www.linkedin.com/company/openai' },
{ linkedin_handle: 'anthropic' },
],
}),
},
)
const result = await response.json()import { request } from 'node:https'
const body = JSON.stringify({
entities: [
{ linkedin_url: 'https://www.linkedin.com/company/openai' },
{ linkedin_handle: 'anthropic' },
],
})
const req = request(
new URL('https://api.getsillage.com/api/v2/watchlists/company/128/entities'),
{
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(body),
},
},
(res) => {
let data = ''
res.on('data', (chunk) => {
data += chunk
})
res.on('end', () => {
console.log(JSON.parse(data))
})
},
)
req.write(body)
req.end()import os
import requests
response = requests.post(
"https://api.getsillage.com/api/v2/watchlists/company/128/entities",
json={
"entities": [
{"linkedin_url": "https://www.linkedin.com/company/openai"},
{"linkedin_handle": "anthropic"},
]
},
headers={"Authorization": f"Bearer {os.environ['SILLAGE_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
result = response.json()Example response
Each entity's id is the canonical company/profile id, pass it to Remove entity. The shape follows the list kind: company lists return name, people lists return first_name / last_name.
The response always includes both data (added members) and errors (per-entity failures). A 200 means the request was accepted. Inspect errors to identify any entities that could not be added.
{
"data": [
{
"id": 901,
"name": "OpenAI",
"linkedin_handle": "openai",
"linkedin_url": "https://www.linkedin.com/company/openai"
},
{
"id": 902,
"name": "Stripe",
"linkedin_handle": null,
"linkedin_url": null
}
],
"errors": [
{
"input": { "domain": "acme.com" },
"code": "multiple_domain_matches",
"message": "The domain matched more than one company. Provide a LinkedIn URL or handle to identify the exact company."
}
]
}Per-entity error codes
When an entity cannot be added, its failure is reported in errors rather than failing the whole request.
| Code | Meaning |
|---|---|
multiple_domain_matches | The domain matched more than one company. Use a LinkedIn URL or handle instead. |
apollo_failed | The company could not be found or created from the domain provided. |
resolution_failed | An unexpected error occurred while resolving the entity. |
Status codes
| Status | Description |
|---|---|
| 200 | Request accepted. data contains newly-added members (empty if all were already present). Check errors for any per-entity failures. |
| 401 | The API key is missing or invalid. |
| 404 | The watchlist does not exist in your workspace. |
| 422 | Every entity failed to be added (see errors), the body is invalid, or a domain was provided on a people watchlist. Re-adding already-present members returns 200, not 422. |
| 429 | Too many requests. |