Automation & API On the roadmap
Webhooks
There is no way to subscribe to events yet. This page exists so you do not go hunting for something that is not there, and so it is clear what you use instead today.
What does leave the building today
The automation module lets you build a rule from a trigger, conditions and actions. One of those actions is Webhook aanroepen (Call a webhook): you fill in a Webhook-URL and the background worker POSTs a body of four fields, event, entity_type, entity_id and payload. Switch on Wachten op bevestiging (Wait for confirmation) and the step fails unless your endpoint answers 2xx and does not return {ok: false}. Every run is logged, so you can see afterwards what was sent and what came back. A rule only ever fires on the triggers that exist.
- Tasks: created, status changed, assigned
- Clients: added, status changed. Projects: status changed
- Websites: uptime monitoring switched on or off. Domains: status changed
Notifications to a webhook
Alongside Slack, Teams, Google Chat, Discord and Telegram, the notification system has a Webhook channel kind: an ordinary http(s) URL that receives the message as JSON. It is meant to reach people, not to feed your systems: what arrives is a notification, not a record change. Two things to know. A new channel stays silent until you route it somewhere in the matrix, and everything external is a subset of in-app: an event switched off in-app never leaves the app.
How you react to changes today
While subscribing is not possible, two routes work. Polling: fetch the list endpoint you need with an API key and diff it yourself. Or let an AI client do the work over MCP, with the same key and the same scopes. Both run on the ordinary API, so nothing you build now is wasted when webhooks arrive later.
Permissions
Grant these to the role that manages this integration (Settings → Roles). Admin-only by default, and never to the client role.
-
automation.rule.writeCreate and edit automation rules, the Webhook aanroepen (Call a webhook) action included. Admin only by default. -
automation.run.readRead the run log: which rule fired, which steps ran and what a webhook answered. -
notifications.channels.manage_ownConnect your own notification channels, a Webhook kind included. Granted to admin and member by default.
What it deliberately does not do
- There is no endpoint to subscribe to events, and no payload contract you can version.
- The webhook action fires only on the eight existing triggers. There is no trigger on an invoice, a time entry or a leave request, for example.
- Nothing is signed. Your endpoint has to decide for itself whether to trust the call, for instance with a secret in the URL or a network rule.
- Without Wachten op bevestiging (Wait for confirmation) the step only fails on a transport error: the HTTP status is recorded but not judged. There is no automatic retry of a rejected delivery.
- Targets are checked: private, loopback and link-local addresses are refused unless an admin sets SCHAKL_ALLOW_PRIVATE_NOTIFICATION_TARGETS, redirects are not followed, and a hard ten-second timeout applies.
- Inbound, you cannot define anything yourself. There are only fixed callbacks from services schakl. itself knows, such as the payment provider and Google Calendar push.
- Automation is a licensed module (sku automation): without cover it goes read-only after the grace period.
Where to find it Instellingen → Automatisering (Settings → Automation) for a rule with the Webhook aanroepen (Call a webhook) action; Instellingen → Meldingen (Settings → Notifications), section Kanalen (Channels), for a channel of kind Webhook.