Skip to content

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.

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.

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.

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.

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.

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.

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.