Skip to main content
FlowEstate sends webhooks when leads, projects, or units change. Subscribers register a target URL and an event type; FlowEstate fans out signed POST requests with a JSON body. To manage subscriptions programmatically (create, list, delete), see the Webhooks API reference. This page covers what your receiver needs to do once a subscription is in place.

Headers

Every delivery includes:

Body

data is event-specific:
  • lead.* events carry data.lead.
  • project.* events carry data.project.
  • unit.* events carry data.unit and data.project.
  • lead.note_added carries data.leadId and data.note.
  • lead.communication_logged carries data.leadId and data.communication.
For the full list of events see Enums.

Verifying the signature

Always verify the signature before trusting a payload. Anyone who knows your URL can hit it; only FlowEstate has the secret.
Sign the raw bytes of the request body. Re-serializing the parsed JSON will produce a different signature because key order, whitespace, and number formatting may differ.
The secret comes from the response of POST /webhooks/subscriptions and is shown only once. If you lose it, delete the subscription and create a new one.

Acknowledging

Return any 2xx HTTP status to acknowledge receipt. FlowEstate doesn’t read the response body — empty 200 is fine. If your handler does heavy work (calling other APIs, writing to a slow database), acknowledge first, process later:
The delivery timeout is a few seconds — slow handlers cause spurious retries.

Retry policy

Failed deliveries (network error, timeout, or HTTP ≥ 400) are retried with this backoff: After five failed attempts the delivery is marked failed and won’t be retried again. The X-FlowEstate-Delivery header stays the same across retries — use it as your idempotency key when processing.

Preventing loops

When you write to FlowEstate via this REST API, the resulting webhook fans out with X-FlowEstate-Source: api. If your receiver also writes back into FlowEstate, drop events with source api to avoid an infinite loop.
The other source values:
  • ui — change made by a user clicking in the FlowEstate dashboard.
  • system — change made by an internal worker (assignments, automations).
  • api — change made through this REST API (your own writes, partner platforms).