curl --request POST \
--url https://api.debbiecollect.com/v1/{tenantId}/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "ERP sync",
"url": "https://example.com/debbie/webhooks",
"events": [
"cases.create",
"cases.update",
"updates.create"
],
"email": "integrations@example.com"
}
'import requests
url = "https://api.debbiecollect.com/v1/{tenantId}/webhooks"
payload = {
"name": "ERP sync",
"url": "https://example.com/debbie/webhooks",
"events": ["cases.create", "cases.update", "updates.create"],
"email": "integrations@example.com"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'ERP sync',
url: 'https://example.com/debbie/webhooks',
events: ['cases.create', 'cases.update', 'updates.create'],
email: 'integrations@example.com'
})
};
fetch('https://api.debbiecollect.com/v1/{tenantId}/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.debbiecollect.com/v1/{tenantId}/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' => 'ERP sync',
'url' => 'https://example.com/debbie/webhooks',
'events' => [
'cases.create',
'cases.update',
'updates.create'
],
'email' => 'integrations@example.com'
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.debbiecollect.com/v1/{tenantId}/webhooks"
payload := strings.NewReader("{\n \"name\": \"ERP sync\",\n \"url\": \"https://example.com/debbie/webhooks\",\n \"events\": [\n \"cases.create\",\n \"cases.update\",\n \"updates.create\"\n ],\n \"email\": \"integrations@example.com\"\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))
}HttpResponse<String> response = Unirest.post("https://api.debbiecollect.com/v1/{tenantId}/webhooks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"ERP sync\",\n \"url\": \"https://example.com/debbie/webhooks\",\n \"events\": [\n \"cases.create\",\n \"cases.update\",\n \"updates.create\"\n ],\n \"email\": \"integrations@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.debbiecollect.com/v1/{tenantId}/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\": \"ERP sync\",\n \"url\": \"https://example.com/debbie/webhooks\",\n \"events\": [\n \"cases.create\",\n \"cases.update\",\n \"updates.create\"\n ],\n \"email\": \"integrations@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"id": "b963f219-255e-47b7-a3f2-0fe6180514a1",
"name": "ERP sync",
"url": "https://example.com/debbie/webhooks",
"events": [
"cases.create",
"cases.update"
],
"creditorId": null,
"verificationToken": "5f2e6a55-6f7d-4d0e-8f1c-2f5a2f8d7c11",
"email": "integrations@example.com",
"headers": {
"X-Custom": "value"
},
"deepFlattenBody": false,
"pull": false,
"enabled": true,
"createdAt": "2026-08-29T11:21:10.100Z",
"createdBy": {
"id": "b1a2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d",
"type": "KEY"
},
"bodyMappers": null
}Create webhook
Creates a webhook that POSTs the events it is subscribed to. The response carries the verification token sent with every delivery — store it, it is not shown again.
Required scope: write:webhooks
curl --request POST \
--url https://api.debbiecollect.com/v1/{tenantId}/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "ERP sync",
"url": "https://example.com/debbie/webhooks",
"events": [
"cases.create",
"cases.update",
"updates.create"
],
"email": "integrations@example.com"
}
'import requests
url = "https://api.debbiecollect.com/v1/{tenantId}/webhooks"
payload = {
"name": "ERP sync",
"url": "https://example.com/debbie/webhooks",
"events": ["cases.create", "cases.update", "updates.create"],
"email": "integrations@example.com"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'ERP sync',
url: 'https://example.com/debbie/webhooks',
events: ['cases.create', 'cases.update', 'updates.create'],
email: 'integrations@example.com'
})
};
fetch('https://api.debbiecollect.com/v1/{tenantId}/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.debbiecollect.com/v1/{tenantId}/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' => 'ERP sync',
'url' => 'https://example.com/debbie/webhooks',
'events' => [
'cases.create',
'cases.update',
'updates.create'
],
'email' => 'integrations@example.com'
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.debbiecollect.com/v1/{tenantId}/webhooks"
payload := strings.NewReader("{\n \"name\": \"ERP sync\",\n \"url\": \"https://example.com/debbie/webhooks\",\n \"events\": [\n \"cases.create\",\n \"cases.update\",\n \"updates.create\"\n ],\n \"email\": \"integrations@example.com\"\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))
}HttpResponse<String> response = Unirest.post("https://api.debbiecollect.com/v1/{tenantId}/webhooks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"ERP sync\",\n \"url\": \"https://example.com/debbie/webhooks\",\n \"events\": [\n \"cases.create\",\n \"cases.update\",\n \"updates.create\"\n ],\n \"email\": \"integrations@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.debbiecollect.com/v1/{tenantId}/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\": \"ERP sync\",\n \"url\": \"https://example.com/debbie/webhooks\",\n \"events\": [\n \"cases.create\",\n \"cases.update\",\n \"updates.create\"\n ],\n \"email\": \"integrations@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"id": "b963f219-255e-47b7-a3f2-0fe6180514a1",
"name": "ERP sync",
"url": "https://example.com/debbie/webhooks",
"events": [
"cases.create",
"cases.update"
],
"creditorId": null,
"verificationToken": "5f2e6a55-6f7d-4d0e-8f1c-2f5a2f8d7c11",
"email": "integrations@example.com",
"headers": {
"X-Custom": "value"
},
"deepFlattenBody": false,
"pull": false,
"enabled": true,
"createdAt": "2026-08-29T11:21:10.100Z",
"createdBy": {
"id": "b1a2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d",
"type": "KEY"
},
"bodyMappers": null
}Authorizations
Authentication can be done by using a bearer token in the Authorization header. This is done using the following format Authorization: Bearer {token}.
Path Parameters
Id of the tenant
Body
Name of the webhook. Shown in the portal and on every delivery.
Public HTTP(S) address every delivery is POSTed to. Addresses on a private network are rejected.
Events to subscribe to, for example cases.create. Every event in the Webhooks reference can be subscribed to.
1Address notified when deliveries keep failing.
Extra headers sent with every delivery, for example an authorization header the receiver expects.
Show child attributes
Show child attributes
Flatten nested objects in the body into single level keys joined by "_", for receivers that cannot read nested JSON. Defaults to false.
Hold deliveries for the webhook items endpoints instead of POSTing them. Defaults to false.
Scope the webhook to one creditor, so it only receives events for that creditor. Omit it for a tenant wide webhook.
Response
Successful operation
Id of the webhook
Name of the webhook
Address every delivery is POSTed to
Events the webhook is subscribed to
Id of the creditor the webhook is scoped to. null is a tenant wide webhook that receives events for every creditor.
Sent as the X-Verification-Token header on every delivery. Compare it with this value and reject requests that do not match.
Address notified when deliveries keep failing. null when no address was given.
Extra headers sent with every delivery
Show child attributes
Show child attributes
Per event field maps that reshape the body before it is sent. null when the body is sent as it is.
Whether nested objects in the body are flattened into single level keys joined by "_"
Whether deliveries wait to be pulled through the webhook items endpoints instead of being POSTed
Whether the webhook is receiving events
When the webhook was created
Who created the webhook
Show child attributes
Show child attributes