Skip to main content
Webhooks tell your backend when something changes in your BundleUp workspace, so you don’t have to poll. The most common use is keeping your own database in sync with connections: a user connected an account, a token was refreshed, a connection was deleted. Use webhooks to:
  • Save a new connection even if the user closed the tab before reaching your callback (connection.created).
  • Stop syncing data for a connection that was deleted (connection.deleted).
  • Track when tokens are refreshed (connection.refreshed).
  • Audit integration changes made in the dashboard (integration.*).
All nine events are listed in the event catalogue.

How delivery works

When an event happens, BundleUp sends one signed POST to every webhook in the workspace that subscribes to that event. Your endpoint verifies the signature, answers 2xx straight away, and does the real work afterwards. Because a failed delivery isn’t resent, a periodic reconciliation against the Platform API catches anything you missed. Delivery details:

Setting up a webhook

You need the admin or owner role.
  1. Open Settings → Webhooks in the dashboard and create a webhook.
  2. Enter a name (3 to 50 characters) and your endpoint’s Webhook URL. It must be publicly reachable; use HTTPS.
  3. Choose the events to receive.
  4. Copy the signing secret and store it with your server’s secrets. You need it to verify signatures.
You can also manage webhooks with the Platform API: GET, POST /v1/webhooks and GET, PATCH, DELETE /v1/webhooks/{id}. See the Platform API reference.

Request format

Headers: Body:

Writing a reliable endpoint

  1. Verify the signature before trusting anything in the body. See Verifying signatures.
  2. Respond within 3 seconds. Return 200 as soon as the signature checks out, then process the event asynchronously (a job queue is ideal). Slow endpoints time out and the event is lost.
  3. Be idempotent. Handle the same event twice without side effects. Key your processing on action plus data.id plus the relevant timestamp.
  4. Treat webhooks as hints, not the source of truth. Since deliveries aren’t retried, run a periodic job that lists connections with GET /v1/connections (filter with external_id or integration_identifier) and reconciles them with your database.
  5. Monitor your endpoint. Alert on errors and slow responses in your own logs, since BundleUp doesn’t report failed deliveries.

Testing locally

Your local machine isn’t reachable from the internet, so expose it with a tunnel (for example ngrok http 3000 or cloudflared tunnel) and register the tunnel URL as a webhook in your development workspace. Then connect an account to trigger connection.created.