Receive events from your organization
An organization can have ebitex call its own systems when something happens: a form is submitted, a
page is published, a record is changed, an individual enters an audience, an asset is replaced. You
register an endpoint in Hub under Webhooks, tick the events it should hear about, and ebitex
sends a signed POST to it for each one. Use this to keep another system in step, or as the trigger
for a tool such as Zapier or n8n.
This is separate from the Webhook handler on a form and the Webhook action on a Content workflow. Those are set up on the form or the workflow and send their own events. Both kinds are signed the same way, so one verification routine covers them all: see Webhooks.
What is sent
Section titled “What is sent”Every call carries the same envelope:
{ "id": "whd_3f6c1d0e8a9b4c57a1e2d9b07c4f5a68", "type": "data.record.updated", "createdAt": "2026-10-18T14:03:22.482Z", "organizationId": "8f14e45f-ceea-467a-9f1c-1b2d3e4f5a6b", "test": false, "sequence": 40213, "data": { "partitionId": "3d2c9a52-2f1d-4f33-9a6e-8f1b7c0b2a11", "recordId": "9a1e6b44-0c8d-4d7e-b1f0-5c2a7e3d9f10", "key": "stable-record-key", "modelKey": "note", "version": 7 }}| Member | Meaning |
|---|---|
id |
The delivery id. It stays the same across every retry and every replay of the same event, so it is what you deduplicate on. |
type |
What happened, one of the event types below. |
createdAt |
When the event was created. |
organizationId |
Which organization it came from. |
test |
true for a test event sent from Hub, false for a real one. |
sequence |
A number that rises with every event in your organization. Use it if you need an order. |
data |
The event’s own members, listed below. |
Events carry ids and a few summary fields, never content or personal data. A form submission event does not contain the answers, and a record event does not contain the record’s document. Use the ids to read the full object back through the relevant API with your own key.
Each call has two headers, X-Ebitex-Signature and X-Ebitex-Delivery. Check the signature before you
trust the body, using the recipe and worked example in Webhooks. The delivery id in
the header is the same as id in the body, so you can deduplicate before parsing.
Event types
Section titled “Event types”| Type | Sent when | data members |
|---|---|---|
form.submission.created |
A form is submitted and completed. A step saved but not completed sends nothing. | formId, submissionId, saved (false when the form does not keep submissions, so there is nothing to read back) |
content.entry.published |
A page or Component is published to a delivery environment. | kind (component or node), entryId, versionNumber, environmentId, deliveryEnvironmentId |
content.entry.unpublished |
A page or Component is taken offline from a delivery environment. | kind, entryId, environmentId, deliveryEnvironmentId |
data.record.created |
A record is created. | partitionId, recordId, key, modelKey, version |
data.record.updated |
A record is changed, or restored to an earlier version. | partitionId, recordId, key, modelKey, version (the new version) |
data.record.deleted |
A record is deleted. | partitionId, recordId, key, modelKey, version (its last version) |
audience.individual.entered |
A recognised individual enters an audience that keeps its members. | audienceId, individualId, audienceKey |
audience.individual.exited |
A recognised individual leaves an audience that keeps its members. | audienceId, individualId, audienceKey |
asset.created |
An asset is uploaded. | assetId, kind (image, video or document) |
asset.replaced |
A file is replaced on an existing asset. | assetId, kind, locale (null for the default rendition) |
asset.deleted |
An asset is deleted, including a removal by ebitex. | assetId, kind |
A few of these are narrower than they sound. An audience whose rule reads the visitor’s request, such as their locale, has no stored members and sends no entry or exit events. Moving records between folders changes no record and sends nothing. Promoting or importing content moves it between environments without publishing it, so it sends nothing either.
When you tick events in Hub, the endpoint can also be limited to one source, where every event you ticked has the same kind of source: one form, one delivery environment, one partition or one audience. Leave it empty to hear about all of them.
Delivery
Section titled “Delivery”A call counts as delivered when your endpoint answers with a 2xx status within 10 seconds. Anything
else is a failure and is retried, after about 1 minute, 5 minutes, 30 minutes, 2 hours, 8 hours and 24
hours, for seven attempts over about a day and a half. A little random delay is added to each wait.
Redirects are not followed, so an endpoint that answers 3xx counts as failing. An answer of 410 Gone
ends the delivery at once and is not retried.
Delivery is at least once, and events are not ordered. Expect to see the same id more than once, and
expect two events to arrive in either order. Keep a short record of the ids you have handled and skip one you
have seen; use sequence when order matters to you.
If an endpoint fails 50 times in a row over more than a day, ebitex pauses it and tells the organization’s owners in Hub. Nothing is deleted. Fix the endpoint, then resume it from Hub, optionally replaying what it missed.
Every attempt is in the endpoint’s delivery log in Hub for 30 days, with the status your endpoint
answered, how long it took, the first part of its answer and the exact payload. Any delivery can be
replayed from the log. A replay sends the same event with the same id, a fresh timestamp and a fresh
signature.
Testing
Section titled “Testing”Send test event in Hub sends one signed webhook.test event straight away, with test set to true,
and shows you your endpoint’s answer. A test is sent once, is never retried, and does not count toward your
plan.
Addresses and secrets
Section titled “Addresses and secrets”The address must start with https:// and be reachable from the internet. An address that resolves to a
private network, a loopback or a link-local address is refused when you save it, and checked again before
every call, so an address that changes later is refused then.
Each endpoint has its own signing secret. It is shown once, when you create the endpoint or rotate the secret, and cannot be shown again. Rotating makes a new secret take over immediately and the old one stop working, so update your endpoint straight away: a call signed in between can fail your check.
Limits
Section titled “Limits”Your plan sets how many endpoints you can have and how many deliveries are created in a calendar month. Past the monthly number, events are recorded in the log as not sent, and nothing you already have is deleted. When an organization’s subscription has lapsed, calls wait and are sent once it is renewed.