Skip to main content
A webhook sends a signed HTTPS request to an address on your own system (an endpoint) whenever something happens: a call ends, a contact opts out, consent changes. Your system can then update your CRM, alert your team or start its own process. Open Settings, choose the Developer tab, and find the Webhooks card. The same tab holds your API keys.
Webhooks send data out of RuleInside. To have your other systems send contacts and events into RuleInside, use an inbound connection.

Who can do what

  • Everyone on your team can see the endpoints and the recent deliveries.
  • Only the owner can add or remove an endpoint, because an endpoint decides where your customer data is sent.
If your workspace is not linked to a store yet, the card asks you to connect your store first.

Your endpoints

Each endpoint on the list shows:
  • its address;
  • a grey badge with its format: normalized for every endpoint you add on this page (an endpoint our team set up for you may show raw);
  • the events it receives: one badge per event, All events, or, for a raw endpoint, every completed call;
  • Added and the date, followed by your description if you gave one;
  • Remove (owner only).
With no endpoints you see “No endpoints yet. Add one to start receiving events.” If you see “We could not load your endpoints”, the list could not be loaded at that moment. It does not mean you have none, and an endpoint that was already receiving events is still running. Reload in a moment.

Add an endpoint

The Add a webhook endpoint dialog

Add a webhook endpoint: the address, an optional description and the events.

Click Add endpoint (owner only) and fill in: Click Add endpoint in the dialog (available once a URL is typed). It reads “Adding…” while it works. The address is checked before it is saved:

Copy your signing secret

When the endpoint is added, the Your signing secret dialog shows its signing secret. Click Copy, store the secret in your system, then click Done.
The signing secret is shown only once and cannot be retrieved later. If you close the dialog without copying it, remove the endpoint and add it again to get a new secret.

The events

There is no event for a finished campaign at the moment.

What each message looks like

Each message is an HTTPS POST with a JSON body:

Check the signature

Every message carries an X-RuleInside-Signature header with a time (t) and a signature (v0). The signature is an HMAC-SHA256, made with your signing secret, of the time, a dot (.), and the exact body of the message, as received. To check that a message really came from RuleInside and was not changed on the way, your system:
  1. reads t and v0 from the header;
  2. computes the HMAC-SHA256 of t, a dot and the raw body, using your signing secret;
  3. accepts the message only if the result matches v0.
Compute the signature on the body exactly as it arrived, before your system parses or reformats it.

Deliveries and retries

  • A delivery succeeds when your endpoint answers with any 2xx code within 15 seconds. Anything else counts as a failure.
  • A failed delivery is retried, with a longer wait each time. In practice the first retries come about 15 minutes apart, and the longest wait between two attempts is about two hours.
  • After 8 attempts the delivery is marked dead: it is not retried any more, and you get a notification. A dead delivery is not sent again automatically, even after you fix your endpoint.
  • Delivery is “at least once”: rarely, the same event arrives twice. Ignore an id your system has already processed.
  • Finished deliveries (delivered or dead) are removed from the list after 30 days.

Recent deliveries

Recent deliveries lists the latest 50 deliveries across all your endpoints, newest first. Each row shows the endpoint address, the time, how many attempts were made (“N of M attempts”), an error type if there was one, and a status: The error type tells you why an attempt failed. Your endpoint’s own reply is not shown, only the type: With no deliveries you see “No deliveries yet.” If you see “We could not load recent deliveries”, the list could not be loaded at that moment. It does not mean nothing was delivered.

Remove an endpoint

Click Remove (owner only) and confirm with Remove endpoint (“Remove this endpoint?”). You see “Endpoint removed.”, or “That endpoint was already removed, or no longer exists.”
Removing an endpoint cannot be undone. No new events are sent to it from that moment, and its signing secret stops working and cannot be recovered. If you add the same address again later, it gets a new signing secret.
Messages that were still waiting to be sent to the endpoint when you removed it are not sent. Events that happen after the removal are not sent to it either.

Change the signing secret

There is no button to replace a signing secret in place. A new secret would take effect immediately, and every event would fail your signature check until you updated your system. To change it:
1

Remove the endpoint

Events that happen while the endpoint is removed are not sent to it.
2

Add the same address again

Choose the same events, and copy the new signing secret.
3

Update your system

Put the new secret into your system. Messages that were waiting when you removed the endpoint are not sent, so events from that moment until you add it again do not reach your system.

Common questions

Tick only call.completed. Leaving every event unticked means all events, including ones we add later.
Look at the error type. auth_rejected usually means your signature check or your own login is refusing us; unreachable means your server was down or could not be reached. Fix the endpoint: new events then arrive as normal, but dead deliveries are not sent again.
That can happen rarely. Each event has a stable id: ignore an id your system has already processed.
Remove the endpoint and add it again, then update your system with the new secret. See Change the signing secret.
It cannot be shown again. Remove the endpoint, add it again and copy the new secret.
No. The address must be public and use https://. Addresses that point to a private or internal network are refused.