Monitor CRM Lists with a Signal Agent
curl --request POST \
--url https://api.lemlist.com/api/watchlist/crm-lists \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"watchListId": "wl_Example000000001",
"crmListIds": [
"clt_Example000000001"
]
}
'import requests
url = "https://api.lemlist.com/api/watchlist/crm-lists"
payload = {
"watchListId": "wl_Example000000001",
"crmListIds": ["clt_Example000000001"]
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({watchListId: 'wl_Example000000001', crmListIds: ['clt_Example000000001']})
};
fetch('https://api.lemlist.com/api/watchlist/crm-lists', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://api.lemlist.com/api/watchlist/crm-lists")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"watchListId\": \"wl_Example000000001\",\n \"crmListIds\": [\n \"clt_Example000000001\"\n ]\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lemlist.com/api/watchlist/crm-lists",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'watchListId' => 'wl_Example000000001',
'crmListIds' => [
'clt_Example000000001'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"_id": "<string>",
"name": "<string>",
"type": "companyIsHiring",
"status": "active",
"entity": "contact",
"segmentType": "all",
"signalProcessingType": "manual",
"signalOpportunityTemplate": {
"ownerType": "contact_owner",
"ownerId": "<string>",
"type": "email",
"priority": 0,
"data": {
"title": "<string>",
"subject": "<string>",
"emailTemplateId": "<string>",
"message": "<string>"
}
},
"filters": [
{
"filterId": "title",
"in": [
"<string>"
],
"out": [
"<string>"
]
}
],
"emoji": "<string>"
}
}{
"error": "No entity of these CRM lists can be monitored: the lists must be your team's and hold the signal's entity, with a domain on each company or a LinkedIn URL on each contact",
"code": "WATCH_LIST_API_NO_MONITORABLE_ENTITIES"
}Unauthorized{
"error": "Watch list not found",
"code": "WATCH_LIST_NOT_FOUND"
}{
"error": "This watch list already monitors exactly these CRM lists; changes to their content are picked up automatically",
"code": "WATCH_LIST_API_CRM_LISTS_ALREADY_MONITORED"
}{
"error": "This agent has reached its monitoring limit. Stop monitoring some entities before adding more.",
"code": "WATCH_LIST_MONITOR_MAX_EXCEEDED",
"details": {
"monitorMax": 10000
}
}Internal server errorSignal Agents
Monitor CRM Lists with a Signal Agent
Monitors the companies or contacts of one or several CRM lists with a Signal Agent.
POST
/
watchlist
/
crm-lists
Monitor CRM Lists with a Signal Agent
curl --request POST \
--url https://api.lemlist.com/api/watchlist/crm-lists \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"watchListId": "wl_Example000000001",
"crmListIds": [
"clt_Example000000001"
]
}
'import requests
url = "https://api.lemlist.com/api/watchlist/crm-lists"
payload = {
"watchListId": "wl_Example000000001",
"crmListIds": ["clt_Example000000001"]
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({watchListId: 'wl_Example000000001', crmListIds: ['clt_Example000000001']})
};
fetch('https://api.lemlist.com/api/watchlist/crm-lists', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://api.lemlist.com/api/watchlist/crm-lists")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"watchListId\": \"wl_Example000000001\",\n \"crmListIds\": [\n \"clt_Example000000001\"\n ]\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lemlist.com/api/watchlist/crm-lists",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'watchListId' => 'wl_Example000000001',
'crmListIds' => [
'clt_Example000000001'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"_id": "<string>",
"name": "<string>",
"type": "companyIsHiring",
"status": "active",
"entity": "contact",
"segmentType": "all",
"signalProcessingType": "manual",
"signalOpportunityTemplate": {
"ownerType": "contact_owner",
"ownerId": "<string>",
"type": "email",
"priority": 0,
"data": {
"title": "<string>",
"subject": "<string>",
"emailTemplateId": "<string>",
"message": "<string>"
}
},
"filters": [
{
"filterId": "title",
"in": [
"<string>"
],
"out": [
"<string>"
]
}
],
"emoji": "<string>"
}
}{
"error": "No entity of these CRM lists can be monitored: the lists must be your team's and hold the signal's entity, with a domain on each company or a LinkedIn URL on each contact",
"code": "WATCH_LIST_API_NO_MONITORABLE_ENTITIES"
}Unauthorized{
"error": "Watch list not found",
"code": "WATCH_LIST_NOT_FOUND"
}{
"error": "This watch list already monitors exactly these CRM lists; changes to their content are picked up automatically",
"code": "WATCH_LIST_API_CRM_LISTS_ALREADY_MONITORED"
}{
"error": "This agent has reached its monitoring limit. Stop monitoring some entities before adding more.",
"code": "WATCH_LIST_MONITOR_MAX_EXCEEDED",
"details": {
"monitorMax": 10000
}
}Internal server errorThe lists you send replace the ones the agent monitored: send the full set every time. Only companies with a domain and contacts with a LinkedIn URL are monitored, and every list must hold the entity the signal monitors (company lists for a company signal, contact lists for a contact signal).To start from a CSV: import it into a company or contact list, create a draft with Create Signal Agent (
activate: false), call this endpoint, then activate the draft with Update Signal Agent (activate: true).An active agent monitors the new entities right away; a paused one stays paused until you reactivate it. Sending exactly the lists it already monitors returns 409: companies or contacts added to or removed from those lists are picked up automatically.Authorizations
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Body
application/json
Response
Success
A Signal Agent (watch list) configuration.
Show child attributes
Show child attributes
Was this page helpful?