Signed with HMAC-SHA256
Each delivery carries a signature computed from the body and your endpoint secret, so your receiver can verify the request really came from us before acting on it.
Twenty-six events, from a contact being created to a support promise being breached, delivered to your endpoint as signed HTTP POSTs with automatic retries. No polling loop, no cron job asking whether anything changed.
Subscribe an endpoint to the events it cares about rather than receiving everything and filtering on your side.
Anybody can POST a JSON body. Signing it, retrying it and letting you see what happened is the part that makes it usable in production.
Each delivery carries a signature computed from the body and your endpoint secret, so your receiver can verify the request really came from us before acting on it.
A failed delivery is retried on a backoff rather than dropped, so a deploy window or a brief outage on your side does not silently lose the event that mattered.
See what was sent, when, what your endpoint answered and how long it took. Debugging an integration stops being an argument about whether the event fired.
Each endpoint subscribes to the events it wants. A fulfilment service that only cares about invoice.paid does not have to receive and discard every contact update.
Up to twenty endpoints, so a warehouse system, an internal Slack relay and a data warehouse can each get their own feed with their own secret.
A test event lets you verify the endpoint, the signature check and your handler before a real deal.won depends on all three working.
support.ticket.breached fires when a reply-time promise is missed, which is the one event most teams want in an on-call channel rather than in a dashboard nobody has open.
Contacts, pipeline stages, messages, outreach steps and replies, deals, tasks, invoices, transactions, subscriptions and support tickets all emit events.
The webhook tells you something happened; the public REST API lets you read or change the record it happened to. Together they replace polling entirely.
A webhook is CRM Solid making an HTTP POST to a URL you control the moment something happens, rather than your code asking us every few minutes whether anything has. Twenty-six events are available, each delivery is signed, failures are retried, and the log shows exactly what your endpoint answered.
The practical difference is latency and cost. A polling job that runs every five minutes is both five minutes late and mostly wasted requests. A webhook arrives in under a second and only when there is something to say.
Each endpoint has its own secret. We compute an HMAC-SHA256 of the request body with that secret and send it as a signature header; your receiver recomputes it and compares. A request without a matching signature should be rejected.
Compare in constant time rather than with a normal string equality, and treat the secret like a password: it is the only thing standing between your endpoint and anybody who guesses the URL.
A non-2xx response or a timeout marks the delivery failed, and it is retried on a backoff. That covers the ordinary cases: a deploy, a restart, a momentary database lock.
Because retries exist, your handler has to be idempotent. Design it so that receiving the same event twice produces the same result as receiving it once, usually by keying on the event id. This is true of every webhook system, and it is the mistake that most often shows up as duplicate records.
Outbound webhooks are a Business feature at $99 a month, with up to twenty endpoints. The public REST API, which pairs with them, is available from Pro. If you would rather not write a receiver at all, the Zapier and n8n integrations consume the same events.
Webhooks are included on Business. The REST API starts on Pro.
Free forever plan · GDPR-ready · No credit card required
We value your privacy
We use cookies to improve our site, analyze traffic, and personalize ads. You can accept all, reject non-essential, or customize your choices. Read our Cookie Policy.