curl --request POST \
--url https://intentleads.si/api/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://app.example.com/hooks/intent-leads",
"events": [
"visitors"
],
"description": "Visitors to the CRM"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://app.example.com/hooks/intent-leads',
events: ['visitors'],
description: 'Visitors to the CRM'
})
};
fetch('https://intentleads.si/api/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://intentleads.si/api/v1/webhooks"
payload = {
"url": "https://app.example.com/hooks/intent-leads",
"events": ["visitors"],
"description": "Visitors to the CRM"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Add a webhook endpoint
Webhook endpoints receive events as they happen, signed: removals (people you exported who asked to be removed) and visitors (people identified on your websites). Use one endpoint for everything ("events": "*") or one per event. Webhooks never buy anyone. See the webhooks guide for payloads, signatures and retries.
events defaults to "*". Every request is signed; get the secret from GET /api/v1/webhooks/{id}/secret if you want to check signatures (optional, recommended). Up to 16 endpoints.
Admin key required. Standard keys get 403 admin_key_required.
curl --request POST \
--url https://intentleads.si/api/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://app.example.com/hooks/intent-leads",
"events": [
"visitors"
],
"description": "Visitors to the CRM"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://app.example.com/hooks/intent-leads',
events: ['visitors'],
description: 'Visitors to the CRM'
})
};
fetch('https://intentleads.si/api/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://intentleads.si/api/v1/webhooks"
payload = {
"url": "https://app.example.com/hooks/intent-leads",
"events": ["visitors"],
"description": "Visitors to the CRM"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Authorizations
Headers
Only with an organization key: the workspace to act in (its id; ?workspace=<id> works too). Lanes, leads, exports, lists, websites and webhooks live in workspaces. Without it, an organization key acts in its only workspace, or gets 400 workspace_required (with the list of workspaces) when it has several. Workspace keys don't need it. On keys, team and activity it switches from the organization's own to that workspace's.