POST to a URL you control.
Events
Five events are available. The dashboard groups them under Get notified when, and each label is the event string in title case. On Connector changes
On Data model changes
Creating a webhook
Webhooks are configured in the dashboard, under Configure → Webhooks.
The Add Webhook form, carrying the four steps above in order: Destination URL, Webhook Name, Webhook Type, and the events under Get notified when.
1
Enter your destination URL
Add the URL that should receive the notifications. Use Test URL to confirm your endpoint is reachable and accepting requests before you save.
2
Name the webhook
Give it something descriptive, for example
Employee data. The name appears in delivery logs, which makes tracing a specific delivery easier later.3
Choose the environment
Webhooks are environment-specific. A Production webhook never fires for a Development connector, and the reverse is also true — if you are testing and nothing arrives, check this first. See Environments.
4
Select events and create
Tick the events you want. One webhook can subscribe to several, or you can create separate webhooks per event to route them to different handlers. Then press Create webhook.
Webhook Signature
Your URL is public, so anyone can post to it. Check the signature on every request, and only act on the ones that really came from Bindbee. Each request carries anX-Bindbee-Webhook-Signature header. Hash the raw body with your signature key and compare the result to that header. If they don’t match, reject the request.
Your signature key is under Security on the Webhooks page. It is unique to your organization, and you can regenerate it if it ever leaks.
Payload structure
Every payload shares a common envelope. Four objects are always present, and one more appears on failures.webhook
webhook.event to route the payload. Do not infer the event from the shape of data.
connector
origin_id is the identifier you supplied when creating the connector, and it is usually the fastest way to map an incoming webhook back to a customer in your own database without storing Bindbee connector IDs.
categories is an array — a single connector can serve more than one category, for example ["LMS", "HRIS"].
sync
sync_id is stable across every event from the same job, so you can correlate a connector_sync_started with the connector_synced that closes it. It also works as an idempotency key, since a retried delivery carries the same values.
error
Included only on connector_sync_error:
detail is returned as {} when no additional information is available.
data
This is the part that changes between events, so handle it per event rather than writing one parser for all five.
Sample payloads
Connector Sync Started
Connector Sync Started
Connector Synced
Connector Synced
Connector Sync Error
Connector Sync Error
Employee Data Changed
Employee Data Changed
data is a flat array of employee IDs. Fetch them with the ids parameter on Get Employees.Connector Data Modified
Connector Data Modified
data is keyed by model name. Iterate the keys rather than assuming which models are present, since that depends on what changed in the sync.Delivery and retries
When a webhook event is triggered, Bindbee sends a POST request to your configured destination URL. If the request fails due to a request or network-layer issue, Bindbee automatically retries the delivery up to 4 times within 60 seconds. Each delivery attempt has a timeout of 10 seconds. Your server should respond within this window to avoid the request being treated as timed out.Retry behavior
Failures that trigger retries
Retries are triggered only for request or network-layer failures, including:Acknowledge first, process after
A handler that does its work before responding will exceed the 10-second timeout under load, and every timeout spends part of the retry budget. Return200 as soon as you have the payload, then process asynchronously. Deliveries that exhaust all four retries are not redelivered later.
Keeping a cron schedule
Subscribing to webhooks doesn’t mean moving your processing onto them. Subscribe toconnector_sync_error alone, purely as a signal to skip or defer that customer’s run - your cron keeps its schedule, and stops processing a connection whose data hasn’t updated.
Monitoring deliveries
In the dashboard
Delivery logs are on the Webhooks tab under Logs. Logs for one specific webhook are also shown on that webhook’s own page.Through the API
Three endpoints cover the same ground programmatically, which is useful for alerting on delivery failures rather than discovering them by hand. List your webhooks to get their IDs, names, URLs, enabled state, and when each last fired:
Get one delivery by its log ID for the full request and response detail, including the status code your endpoint returned:
Related
Syncing
When syncs run, and how to trigger one on demand.
Environments
Why Production and Development webhooks fire separately.
Reading data
Reading the records an event points at, with
ids and modified_after.Monitor sync status
Catching a connector that stopped, which silence will not tell you.