Skip to main content
Causeloop has two directions of webhook traffic:
  • Inbound — a third-party system posts events to Causeloop. Causeloop verifies the HMAC signature and ingests the payload.
  • Outbound — Causeloop posts events to your endpoint when something happens (sync completed, issue ingested, pattern detected). Your endpoint verifies the signature.

Inbound webhooks

Inbound webhooks let any system push events directly into Causeloop without polling. The endpoint authenticates callers via HMAC-SHA256 — there is no Bearer token. The endpoint fails closed: a missing or invalid signature always returns 401.

Endpoint

This endpoint is public (no Bearer auth). The connector_id identifies which connector’s signing secret to use for verification.

Required headers

Provide one of the two headers. If you use x-hub-signature-256, prefix the digest with sha256=.

How signature verification works

1

Get the signing secret

When you configure an inbound webhook for a connector, Causeloop generates a signing_secret (e.g. whsec_a1b2c3...). Store it securely in your source system.
2

Sign the raw body

Before sending, compute HMAC-SHA256(signing_secret, raw_body) and include the hex digest in the x-causeloop-signature header.
3

Causeloop verifies

Causeloop buffers the raw request bytes (before any JSON parsing), recomputes the HMAC using the stored secret, and compares with a constant-time comparison. A mismatch, missing signature, or missing secret all return 401.
The HMAC is computed over the raw bytes of the request body. Do not parse, pretty-print, or re-serialize the JSON before signing — the byte sequence must be identical to what Causeloop receives.

Signing an outgoing payload (sender side)

Inbound webhook response

202 Accepted — payload received, signature valid, delivery recorded.
401 Unauthorized — missing or invalid signature, or no signing secret configured for this connector.

Registering an inbound webhook

To enable inbound delivery for a connector, create an outbound webhook record that references the connector. Causeloop auto-generates the signing secret:
The response includes signing_secret — copy it now. Causeloop does not show it again (use the rotate endpoint to retrieve a new one).

Outbound webhooks

Outbound webhooks let Causeloop notify your systems when events occur. Causeloop signs every delivery with x-causeloop-signature. You verify the signature on your end before processing.

Create an outbound webhook

Response (201 Created):
The signing_secret is only returned at creation and after rotation. Store it securely immediately.

Webhook event types

Leave event_types empty or omit it to receive all events.

Verifying outbound webhook signatures

Every outbound delivery includes x-causeloop-signature: <hex> computed as HMAC-SHA256(signing_secret, raw_body).
Always use a constant-time comparison (hmac.compare_digest in Python, crypto.timingSafeEqual in Node). Standard string equality is vulnerable to timing attacks.

Rotating the signing secret

Response:
Update your endpoint’s secret immediately — the old secret stops working once the new one is issued.

Viewing delivery history

Each delivery record includes:

Managing webhooks

Required scopes: webhooks:read for GET endpoints, webhooks:admin for POST/PATCH/DELETE.