September 8, 2026
This is a preview — we don’t expect breaking changes, but the shape may evolve based on feedback.
Multi-Type and Batched Webhook Subscriptions
POST /v3/WebhookSubscriptions now supports two independent additions: subscribing to a set of resource types under one subscription, and receiving notifications in batches instead of one delivery per change. Each can be used on its own — we recommend combining them when subscribing to multiple types, since a multi-type subscription without batching means one delivery per change across every subscribed type.
Subscribing to multiple types
Pass an array of WebhookTypes instead of WebhookType to create a multi-type subscription:
POST /v3/WebhookSubscriptions
{
"TargetUrl": "https://your-app.example.com/webhooks/karbon",
"WebhookTypes": ["Contact", "Work"]
}
A multi-type subscription can mix any of the selected types. Existing single-type subscriptions (WebhookType: "Contact", "Work", etc.) are unaffected — there’s still only one multi-type subscription per API application.
Retrieve, replace, or remove a Multi subscription with:
GET https://api.karbonhq.com/v3/WebhookSubscriptions/Multi
PATCH https://api.karbonhq.com/v3/WebhookSubscriptions/Multi
{
"WebhookTypes": ["Contact", "Work", "Note"]
}
PATCH replaces the full set of subscribed types and returns a 204. Patching a multi-type subscription that doesn’t exist yet returns a 404 — create it first with a POST carrying WebhookTypes.
DELETE https://api.karbonhq.com/v3/WebhookSubscriptions/Multi
Batched delivery
Set BatchSize and BatchMaxDelaySeconds on create to receive notifications in batches rather than one per change — independently of whether the subscription is single-type or multi-type:
{
"TargetUrl": "https://your-app.example.com/webhooks/karbon",
"WebhookType": "Work",
"BatchSize": 10,
"BatchMaxDelaySeconds": 0
}
With BatchSize: 10, Karbon accumulates up to 10 notifications and delivers them together in a single POST, wrapped in a batch envelope — instead of the usual single notification object — once the batch is full or the delay window elapses:
{
"BatchId": "70575b82-9a31-4576-a4e7-61e20c42189d",
"Count": 3,
"Events": [
{ "ResourcePermaKey": "3GBF6TnYRc7C", "ResourceType": "WorkItem", "ActionType": "Inserted", "Timestamp": "2026-09-02T03:49:42Z" },
{ "ResourcePermaKey": "tmNwbV28XGs", "ResourceType": "WorkItem", "ActionType": "Inserted", "Timestamp": "2026-09-02T03:49:42Z" },
{ "ResourcePermaKey": "tmNwbV28XGs", "ResourceType": "WorkItem", "ActionType": "Updated", "Timestamp": "2026-09-02T03:49:42Z" }
]
}
BatchSize is a hard cap (max 100): once a batch reaches it, later events start a new batch rather than being appended. Omitting BatchSize, or setting it to 1, keeps the existing payload format — a single notification object per POST.
BatchMaxDelaySeconds adds an additional delay on top of the existing 60-second dispatch window before a batch is sent — 0 means no extra delay beyond that window. If your records change often and you want an additional 5 minutes before receiving a notification, you can use "BatchMaxDelaySeconds": 300
We recommend pairing batching with a multi-type subscription — otherwise a multi-type subscription still delivers one notification per change across every subscribed type:
{
"TargetUrl": "https://your-app.example.com/webhooks/karbon",
"WebhookTypes": ["Contact", "Work"],
"BatchSize": 10,
"BatchMaxDelaySeconds": 0
}