Change a webhook endpoint
curl --request PATCH \
--url https://intentleads.si/api/v1/webhooks/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"events": [
"visitors"
],
"enabled": true
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({events: ['visitors'], enabled: true})
};
fetch('https://intentleads.si/api/v1/webhooks/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://intentleads.si/api/v1/webhooks/{id}"
payload = {
"events": ["visitors"],
"enabled": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"endpoint": {
"id": "5b1d0a7e-3c2f-4e0b-9a51-2f6c8d7e9a10",
"url": "https://app.example.com/hooks/intent-leads",
"description": "CRM sync",
"events": [
"visitors"
],
"receives": [
"visitors"
],
"enabled": true,
"status": "ok",
"failed_attempts": 0,
"failing_since": null,
"next_retry_at": null,
"last_attempt_at": "2026-11-12T09:15:02.118Z",
"last_status": 200,
"last_error": null,
"last_success_at": "2026-11-12T09:15:02.118Z",
"waiting": {
"removals": 0
},
"legacy": false,
"created_at": "2026-11-11T14:00:00.000Z",
"updated_at": "2026-11-11T14:00:00.000Z"
}
}
Change a webhook endpoint
Send any of url, events, description, enabled, rotate_secret. Events you add start from now (nothing older is replayed). A new URL keeps the endpoint’s place, so nothing is skipped or sent twice. With rotate_secret, the new secret comes back here.
Admin key required. Standard keys get 403 admin_key_required.
PATCH
/
api
/
v1
/
webhooks
/
{id}
Change a webhook endpoint
curl --request PATCH \
--url https://intentleads.si/api/v1/webhooks/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"events": [
"visitors"
],
"enabled": true
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({events: ['visitors'], enabled: true})
};
fetch('https://intentleads.si/api/v1/webhooks/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://intentleads.si/api/v1/webhooks/{id}"
payload = {
"events": ["visitors"],
"enabled": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"endpoint": {
"id": "5b1d0a7e-3c2f-4e0b-9a51-2f6c8d7e9a10",
"url": "https://app.example.com/hooks/intent-leads",
"description": "CRM sync",
"events": [
"visitors"
],
"receives": [
"visitors"
],
"enabled": true,
"status": "ok",
"failed_attempts": 0,
"failing_since": null,
"next_retry_at": null,
"last_attempt_at": "2026-11-12T09:15:02.118Z",
"last_status": 200,
"last_error": null,
"last_success_at": "2026-11-12T09:15:02.118Z",
"waiting": {
"removals": 0
},
"legacy": false,
"created_at": "2026-11-11T14:00:00.000Z",
"updated_at": "2026-11-11T14:00:00.000Z"
}
}
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.
Body
application/json