FlowEstate sends webhooks when leads, projects, or units change. Subscribers register a target URL and an event type; FlowEstate fans out signedDocumentation Index
Fetch the complete documentation index at: https://developers.flowestate.app/llms.txt
Use this file to discover all available pages before exploring further.
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:| Header | Description |
|---|---|
Content-Type | Always application/json. |
User-Agent | FlowEstate-Webhook/1.0 |
X-FlowEstate-Event | Event type, e.g. lead.created. |
X-FlowEstate-Delivery | UUID of this delivery attempt. Use it for idempotent processing. |
X-FlowEstate-Signature | sha256=<hex> HMAC-SHA256 of the exact raw body using the endpoint secret. |
X-FlowEstate-Source | Origin of the event: ui, api, or system. Use this to break loops — see below. |
Body
data is event-specific:
lead.*events carrydata.lead.project.*events carrydata.project.unit.*events carrydata.unitanddata.project.lead.note_addedcarriesdata.leadIdanddata.note.lead.communication_loggedcarriesdata.leadIdanddata.communication.
Verifying the signature
Always verify the signature before trusting a payload. Anyone who knows your URL can hit it; only FlowEstate has the secret.POST /webhooks/subscriptions and is shown only once. If you lose it, delete the subscription and create a new one.
Acknowledging
Return any2xx 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:
Retry policy
Failed deliveries (network error, timeout, or HTTP≥ 400) are retried with this backoff:
| Attempt | Delay before retry |
|---|---|
| 1 | — (initial) |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
| 6 | 12 hours |
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 withX-FlowEstate-Source: api. If your receiver also writes back into FlowEstate, drop events with source api to avoid an infinite loop.
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).