curl --request POST \
--url https://api.folk.app/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "My app integration",
"targetUrl": "https://my-app.com/webhook",
"subscribedEvents": [
{
"eventType": "person.created",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'My app integration',
targetUrl: 'https://my-app.com/webhook',
subscribedEvents: [
{
eventType: 'person.created',
filter: {groupId: 'grp_bc984b3f-0386-434d-82d7-a91eb6badd71'}
}
]
})
};
fetch('https://api.folk.app/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.folk.app/v1/webhooks"
payload = {
"name": "My app integration",
"targetUrl": "https://my-app.com/webhook",
"subscribedEvents": [
{
"eventType": "person.created",
"filter": { "groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71" }
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)require 'uri'
require 'net/http'
url = URI("https://api.folk.app/v1/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My app integration\",\n \"targetUrl\": \"https://my-app.com/webhook\",\n \"subscribedEvents\": [\n {\n \"eventType\": \"person.created\",\n \"filter\": {\n \"groupId\": \"grp_bc984b3f-0386-434d-82d7-a91eb6badd71\"\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_bodypackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.folk.app/v1/webhooks"
payload := strings.NewReader("{\n \"name\": \"My app integration\",\n \"targetUrl\": \"https://my-app.com/webhook\",\n \"subscribedEvents\": [\n {\n \"eventType\": \"person.created\",\n \"filter\": {\n \"groupId\": \"grp_bc984b3f-0386-434d-82d7-a91eb6badd71\"\n }\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.folk.app/v1/webhooks",
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([
'name' => 'My app integration',
'targetUrl' => 'https://my-app.com/webhook',
'subscribedEvents' => [
[
'eventType' => 'person.created',
'filter' => [
'groupId' => 'grp_bc984b3f-0386-434d-82d7-a91eb6badd71'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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": "wbk_8c18c158-d49e-4ad4-90d4-2b197688bac7",
"name": "My app integration",
"targetUrl": "https://my-app.com/webhook",
"subscribedEvents": [
{
"eventType": "person.created",
"filter": {}
}
],
"signingSecret": "whsec_QWFSUzl1QUVoQW1kdWtpTnJRTUFpbXNlZmxLTg==",
"status": "active",
"createdAt": "2025-07-17T09:00:00.000Z"
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "The request was invalid.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#bad-request",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "No valid API key provided.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unauthorized",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "The API key doesn’t have permissions to perform the request.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#forbidden",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "The requested resource was not found.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#not-found",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
"message": "A request with the same Idempotency-Key is still being processed. Retry once it has completed.",
"documentationUrl": "https://developer.folk.app/api-reference/idempotency#errors",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "Invalid query parameters",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unprocessable-entity",
"details": {
"issues": [
{
"code": "too_small",
"minimum": 1,
"type": "number",
"inclusive": true,
"exact": false,
"message": "Number must be greater than or equal to 1",
"path": [
"limit"
]
}
]
},
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "You have exceeded your rate limit.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#rate-limiting",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z",
"details": {
"policy": "burst",
"limit": 20,
"remaining": 0,
"windowSeconds": 2,
"retryAfter": "2025-10-01T12:00:02.000Z",
"policies": [
{
"policy": "default",
"limit": 600,
"remaining": 412,
"windowSeconds": 60,
"retryAfter": "2025-10-01T12:01:00.000Z"
},
{
"policy": "burst",
"limit": 20,
"remaining": 0,
"windowSeconds": 2,
"retryAfter": "2025-10-01T12:00:02.000Z"
}
]
}
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "An internal server error occurred.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#internal-server-error",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The service is currently unavailable.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#service-unavailable",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}Create a webhook
Creates a new webhook listening to workspace events.
curl --request POST \
--url https://api.folk.app/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "My app integration",
"targetUrl": "https://my-app.com/webhook",
"subscribedEvents": [
{
"eventType": "person.created",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'My app integration',
targetUrl: 'https://my-app.com/webhook',
subscribedEvents: [
{
eventType: 'person.created',
filter: {groupId: 'grp_bc984b3f-0386-434d-82d7-a91eb6badd71'}
}
]
})
};
fetch('https://api.folk.app/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.folk.app/v1/webhooks"
payload = {
"name": "My app integration",
"targetUrl": "https://my-app.com/webhook",
"subscribedEvents": [
{
"eventType": "person.created",
"filter": { "groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71" }
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)require 'uri'
require 'net/http'
url = URI("https://api.folk.app/v1/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My app integration\",\n \"targetUrl\": \"https://my-app.com/webhook\",\n \"subscribedEvents\": [\n {\n \"eventType\": \"person.created\",\n \"filter\": {\n \"groupId\": \"grp_bc984b3f-0386-434d-82d7-a91eb6badd71\"\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_bodypackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.folk.app/v1/webhooks"
payload := strings.NewReader("{\n \"name\": \"My app integration\",\n \"targetUrl\": \"https://my-app.com/webhook\",\n \"subscribedEvents\": [\n {\n \"eventType\": \"person.created\",\n \"filter\": {\n \"groupId\": \"grp_bc984b3f-0386-434d-82d7-a91eb6badd71\"\n }\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.folk.app/v1/webhooks",
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([
'name' => 'My app integration',
'targetUrl' => 'https://my-app.com/webhook',
'subscribedEvents' => [
[
'eventType' => 'person.created',
'filter' => [
'groupId' => 'grp_bc984b3f-0386-434d-82d7-a91eb6badd71'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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": "wbk_8c18c158-d49e-4ad4-90d4-2b197688bac7",
"name": "My app integration",
"targetUrl": "https://my-app.com/webhook",
"subscribedEvents": [
{
"eventType": "person.created",
"filter": {}
}
],
"signingSecret": "whsec_QWFSUzl1QUVoQW1kdWtpTnJRTUFpbXNlZmxLTg==",
"status": "active",
"createdAt": "2025-07-17T09:00:00.000Z"
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "The request was invalid.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#bad-request",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "No valid API key provided.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unauthorized",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "The API key doesn’t have permissions to perform the request.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#forbidden",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "The requested resource was not found.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#not-found",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
"message": "A request with the same Idempotency-Key is still being processed. Retry once it has completed.",
"documentationUrl": "https://developer.folk.app/api-reference/idempotency#errors",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "Invalid query parameters",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unprocessable-entity",
"details": {
"issues": [
{
"code": "too_small",
"minimum": 1,
"type": "number",
"inclusive": true,
"exact": false,
"message": "Number must be greater than or equal to 1",
"path": [
"limit"
]
}
]
},
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "You have exceeded your rate limit.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#rate-limiting",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z",
"details": {
"policy": "burst",
"limit": 20,
"remaining": 0,
"windowSeconds": 2,
"retryAfter": "2025-10-01T12:00:02.000Z",
"policies": [
{
"policy": "default",
"limit": 600,
"remaining": 412,
"windowSeconds": 60,
"retryAfter": "2025-10-01T12:01:00.000Z"
},
{
"policy": "burst",
"limit": 20,
"remaining": 0,
"windowSeconds": 2,
"retryAfter": "2025-10-01T12:00:02.000Z"
}
]
}
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "An internal server error occurred.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#internal-server-error",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The service is currently unavailable.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#service-unavailable",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}Available events
You can find the list of available events in the webhook events and payloads guide.Filters
You can add filters to events in order to narrow down the notifications you receive. Filters allow you to achieve advanced workflow capabilities, such as:- Only receive notifications when a person is added to a specific group.
- Only receive notifications when a company is moved to a specific pipeline status.
- Only receive notifications when a deal from a specific group is updated.
Person events
person.created
person.created
// Notify only if the person is created in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "person.created",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
person.updated
person.updated
- The group the person is in
- The updated attribute
- The updated attribute and the value of the attribute
// Notify only if the person is updated while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "person.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
// Notify only if the person's first name is updated
{
"eventType": "person.updated",
"filter": {
"path": ["firstName"]
}
}
// Notify only if the person's first name is updated to "John"
{
"eventType": "person.updated",
"filter": {
"path": ["firstName"],
"value": "John"
}
}
// Notify only if the person's custom field "Status" is updated
{
"eventType": "person.updated",
"filter": {
"path": ["customFieldValues", "grp_bc984b3f-0386-434d-82d7-a91eb6badd71", "Status"]
}
}
// Notify only if the person's custom field "Status"
// is updated to "In Progress"
{
"eventType": "person.updated",
"filter": {
"path": ["customFieldValues", "grp_bc984b3f-0386-434d-82d7-a91eb6badd71", "Status"],
"value": "In Progress"
}
}
// Notify only if the person's custom field "Status"
// is updated to "In Progress" while in a group with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "person.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"path": ["customFieldValues", "grp_bc984b3f-0386-434d-82d7-a91eb6badd71", "Status"],
"value": "In Progress"
}
}
firstNamelastNamebirthdayjobTitledescription- You cannot provide a value for this attributeaddressesemailsphonesurlscustomFieldValues
person.deleted
person.deleted
// Notify only if the person is deleted while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "person.deleted",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
person.groups_updated
person.groups_updated
// Notify only if the person is added to or removed from the group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "person.groups_updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
person.workspace_interaction_metadata_updated
person.workspace_interaction_metadata_updated
// Notify only if the person's workspace interaction metadata
// is updated while in a group with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "person.workspace_interaction_metadata_updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
Company events
company.created
company.created
// Notify only if the company is created in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "company.created",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
company.updated
company.updated
- The group the company is in
- The updated attribute
- The updated attribute and the value of the attribute
// Notify only if the company is updated while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "company.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
// Notify only if the company's name is updated
{
"eventType": "company.updated",
"filter": {
"path": ["name"]
}
}
// Notify only if the company's name is updated to "ACME Inc."
{
"eventType": "company.updated",
"filter": {
"path": ["name"],
"value": "ACME Inc."
}
}
// Notify only if the company's custom field "Status" is updated
{
"eventType": "company.updated",
"filter": {
"path": ["customFieldValues", "grp_bc984b3f-0386-434d-82d7-a91eb6badd71", "Status"]
}
}
// Notify only if the company's custom field "Status"
// is updated to "In Progress"
{
"eventType": "company.updated",
"filter": {
"path": ["customFieldValues", "grp_bc984b3f-0386-434d-82d7-a91eb6badd71", "Status"],
"value": "In Progress"
}
}
// Notify only if the company's custom field "Status"
// is updated to "In Progress" while in a group with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "company.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"path": ["customFieldValues", "grp_bc984b3f-0386-434d-82d7-a91eb6badd71", "Status"],
"value": "In Progress"
}
}
namedescription- You cannot provide a value for this attributeaddressesemailsphonesurlsfundingRaisedlastFundingDatefoundationYearemployeeRangeindustrycustomFieldValues
company.deleted
company.deleted
// Notify only if the company is deleted while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "company.deleted",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
company.groups_updated
company.groups_updated
// Notify only if the company is added to or removed from the group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "company.groups_updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
Deal events
object.created
object.created
- The group the deal is in
- The group the deal is in and the object type
// Notify only if the deal is created while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "object.created",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
}
}
// Notify only if the deal is created while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71 and the object type is "Deals"
{
"eventType": "object.created",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"objectType": "Deals"
}
}
object.updated
object.updated
- The group the deal is in
- The group the deal is in and the object type
- Group, object type and the updated attribute
- Group, object type, the updated attribute and the value of the attribute
// Notify only if the deal is updated while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "object.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
}
}
// Notify only if the deal is updated while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71 and the object type is "Deals"
{
"eventType": "object.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"objectType": "Deals"
}
}
// Notify only if the deal is updated while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
// and the object type is "Deals" and the updated attribute is "name"
{
"eventType": "object.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"objectType": "Deals",
"path": ["name"]
}
}
// Notify only if the deal is updated while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
// and the object type is "Deals" and the updated attribute is "name"
// and the value of the attribute is "New Deal"
{
"eventType": "object.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"objectType": "Deals",
"path": ["name"],
"value": "New Deal"
}
}
// Notify only if the deal is updated while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
// and the object type is "Deals"
// and the custom field attribute is "Status"
{
"eventType": "object.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"objectType": "Deals",
"path": ["customFieldValues", "Status"]
}
}
// Notify only if the deal is updated while in a group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
// and the object type is "Deals"
// and the custom field attribute is "Status"
// and the value of the attribute is "In Progress"
{
"eventType": "object.updated",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"objectType": "Deals",
"path": ["customFieldValues", "Status"],
"value": "In Progress"
}
}
namecustomFieldValues
object.deleted
object.deleted
- The group the deal is in
- The group the deal is in and the object type
// Notify only if the deal is deleted from the group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71
{
"eventType": "object.deleted",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
}
}
// Notify only if the deal is deleted from the group
// with the ID grp_bc984b3f-0386-434d-82d7-a91eb6badd71 and the object type is "Deals"
{
"eventType": "object.deleted",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71",
"objectType": "Deals"
}
}
Note events
note.created
note.created
note.updated
note.updated
note.deleted
note.deleted
Reminder events
reminder.created
reminder.created
reminder.updated
reminder.updated
reminder.deleted
reminder.deleted
reminder.triggered
reminder.triggered
Authorizations
API key for authentication
Headers
A unique key, such as a UUID, that makes retrying this request safe: a retry with the same key and body returns the original response without running the operation again. Keys are kept for 24 hours after the request completes.
255"8e03978e-40d5-43e8-bc93-6894a57f9324"
Body
A friendly name for the webhook.
255"My app integration"
The URL of the webhook. It must be a publicly accessible URL using the HTTP or HTTPS protocol.
2048"https://my-app.com/webhook"
The events the webhook is subscribed to, with optional filters.
1 - 20 elementsShow child attributes
Show child attributes
[
{
"eventType": "person.created",
"filter": {
"groupId": "grp_bc984b3f-0386-434d-82d7-a91eb6badd71"
}
}
]
Response
The created webhook.
A webhook with a visible signing secret.
Show child attributes
Show child attributes
{
"id": "wbk_8c18c158-d49e-4ad4-90d4-2b197688bac7",
"name": "My app integration",
"targetUrl": "https://my-app.com/webhook",
"subscribedEvents": [
{
"eventType": "person.created",
"filter": {}
}
],
"signingSecret": "whsec_QWFSUzl1QUVoQW1kdWtpTnJRTUFpbXNlZmxLTg==",
"status": "active",
"createdAt": "2025-07-17T09:00:00.000Z"
}
["This field is deprecated"]