Skip to content
Docs

Webhooks

Outgoing event webhooks with signatures and retries, plus inbound channel ingest.
Developer8 min read

ChatinFlow Team

Official guide

Overview

ChatinFlow ingests provider webhooks (Meta, Telegram, and others) into the messaging pipeline and emits product lifecycle events on private realtime channels for the dashboard.

To push product events into your own stack, add an outgoing webhook: ChatinFlow sends the events you choose to your address and signs every request. Channel provider payloads stay internal; they are not a public contract.

Outgoing webhooks

01

Add an endpoint

Under Settings → Developers, add an https address and pick the events: a contact created, a tag added, a message received, a sale recorded, a booking canceled and more. Copy the signing secret; it is shown once.

02

Verify the signature

Each request carries `X-ChatinFlow-Signature: t=<unix time>,v1=<signature>`. Compute HMAC-SHA256 of `<t>.<raw body>` with the secret, compare it with `v1` in constant time, and refuse timestamps older than five minutes.

signature = hex(hmac_sha256(secret, t + "." + raw_body))
valid = equals(signature, v1) and now - t < 300
03

Answer fast and drop repeats

Reply with any 2xx within 10 seconds. A failed delivery is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. Delivery is at least once: `X-ChatinFlow-Delivery` stays the same across retries, so skip ids you already handled.

04

Stopped endpoints

After 50 failed attempts in a row, or an answer of 410 Gone, the endpoint stops and shows why. Fix it, turn it back on, and resend failed deliveries from the log.

05

Zapier, Make and n8n

Create an endpoint for the event you need and paste the catch-hook address of your Zap or scenario. `GET /api/v1/workspaces/<workspace>/webhooks/events` lists every event with a sample payload for mapping fields.

Inbound channel webhooks

01

Connect the channel first

OAuth or credential connect under Dashboard → Channels registers the webhook path and secrets. You do not manually paste Meta callback URLs for the first-party product.

ChannelsOAuth
02

Idempotent ingest

Provider deliveries are deduped using Idempotency-Key or provider message ids so retries do not double-create conversations.

03

Permission loss

If scopes are revoked, Channels surfaces reauth. Fix permissions before debugging “missing webhooks”.

Hardening

Heads up

Do not expose APP secrets

Webhook verification secrets and OAuth tokens stay server-side (envelope-encrypted). Never embed them in client apps.

Tip

Realtime for the desk

Inbox and automation lifecycle updates for signed-in members use private workspace channels (Echo/Reverb), not public webhook URLs.

Was this guide helpful?

Browse more in the library

All docs

Ready to put this
into practice?

Start building your first automation for free. No credit card required. Just connect your channel and launch in minutes.