Skip to main content

Webhooks

Webhooks deliver real-time notifications when data changes in your Journeybee workspace. Use them to sync leads into your CRM, trigger a Zap, notify an ops channel, or drive any downstream workflow.
Webhooks today run through the connector subscription API (below). A more developer-oriented flow — including raw-signature HMAC, retries, and a UI for managing endpoints — is planned for a later release.

Quick start

Subscribe your endpoint to an event:
Response:
Your endpoint will now receive a POST for every matching event.

Supported events

Subscription API

Create a subscription

Body: The integration_id identifies which integration row the subscription hangs off. For Zapier-style self-serve subscriptions, use the public Journeybee connector integration ID. Ask support if you’re unsure which integration to use.

Delete a subscription

Send DELETE with the hookUrl body field set to the subscription id returned at create time:

Event delivery

Every subscribed event generates a single POST to your URL with:
  • Content-Type: application/json — the request body is a JSON payload described below.
  • Authorization: Bearer <token> — a JWT signed with your integration’s UUID as the secret. Verify this before processing the payload.

Example payload — leads.create

Other events follow the same pattern — the entity key matches the resource (deal, partner, contact, etc.).

Verifying requests

The Authorization header contains a JWT signed with HS256 using your integration UUID as the shared secret. Decode and verify it to confirm the request is genuine.

Node.js (jsonwebtoken)

Token claims

Always verify the JWT before acting on a payload. The integration UUID is the shared secret — do not commit it to source control and do not expose it in client-side code.

Delivery semantics

  • At-most-once: the worker sends one POST per event. There are no automatic retries on 5xx responses today, so your endpoint must return 2xx quickly and queue work asynchronously.
  • Timeouts: slow endpoints (>5s) may be dropped. Return a 2xx as soon as you’ve persisted the event, then process it out of band.
  • Ordering: events are not guaranteed to arrive in order. Use the updated_at field on the payload to reconcile.
  • Duplicates: duplicates are rare but possible. Key your idempotency off the entity uuid plus event_id.
Retries, signed timestamps, and a delivery log are on the roadmap (Platform phase 15). If you need guaranteed delivery today, poll the relevant list endpoints on an interval and reconcile against your local state.

Troubleshooting

  • Receiving 401s? Double-check that you’re verifying with the integration UUID (not your API key) and using HS256.
  • Not receiving events? Confirm the subscription exists by listing your current subscriptions:
  • Want to test delivery? Use a tool like webhook.site as the url and trigger an event (create a test lead, update a partner) from the app.