Skip to content

Set up the system webhook

The system webhook is an Iterable webhook that reports what happens to each JustAI message: sends, skipped sends, bounces, opens, clicks, and unsubscribes. You create it in Iterable with the endpoint that JustAI gives you. JustAI then writes its own authentication header into the webhook. When you finish, the connection’s System webhook step reads Webhook #<id>.

Create a new webhook for JustAI. Don’t add JustAI’s endpoint to a webhook that another system uses. When JustAI sets its header, it also sets the webhook’s endpoint and replaces any custom headers on that webhook.

In JustAI, open the connection in Settings > Integrations and expand the System webhook step. Then follow these steps in order.

  1. In the System webhook step, select the System webhooks link.

    Iterable’s system webhooks page opens.

  2. In Iterable, select Create webhook.

  3. In JustAI, copy the endpoint under Paste this endpoint: and paste it into the webhook’s endpoint in Iterable.

  4. Set Status to Enabled.

  5. Leave Authentication set to None.

    JustAI adds its own header in a later step. Keep this setting at None after that, too.

  6. Turn on the events for each channel you send through JustAI.

    See Events to enable.

  7. Select Save Webhook.

JustAI reads these events. In Iterable’s webhook form, turn them on for every channel you send through JustAI.

Channel Events
Email Triggered send, Send skip, Bounce, Open, Click, Unsubscribe
SMS Send, Send skip, Bounce, Click
Push Send, Send skip, Bounce, Open
Web push Send, if you send web push

Iterable reports sends from blast campaigns and triggered campaigns separately. JustAI sends through triggered campaigns, so for email, select Triggered send. Blast send alone does not report JustAI’s emails.

Check the events before you save. JustAI doesn’t check which events you turned on, so the System webhook step can read Webhook #<id> even when an event is missing.

  1. Back in JustAI, select Verify.

    The step summary changes to Webhook #<id> — needs the JustAI secret key. If it still reads “Webhook not set up yet.”, go to If JustAI can’t find the webhook.

    Holding the pointer over Verify also shows “JustAI can see webhook #<id>.” or “No webhook found yet.”

  2. Select Set header.

    JustAI writes its authentication header into the webhook in Iterable. The step summary changes to Webhook #<id> and shows a check mark.

The button reads Set header when JustAI needs to write its header, and Update header when everything already matches. Select whichever one appears.

  • The System webhook step shows a check mark and reads Webhook #<id>. The number matches the webhook’s ID in Iterable.
  • In Iterable, the webhook’s Status is Enabled and its Authentication is None.
  • If the content data feed is also done, the Sending profiles step unlocks and shows Add profile.
  • After your first live journey send, open the journey’s analytics. The email step shows Sent, Delivered, Opened, and Clicked. Test emails from a sending profile do not appear in journey analytics.

If the step shows a different summary, use this table.

Step summary Meaning What to do
“Save an API key first.” The connection has no saved API key. Save the key. See Add your Iterable project.
“Loading webhooks…” JustAI is reading your project’s system webhooks. Wait for the list to load.
“Webhook not set up yet.” JustAI found no webhook with a JustAI endpoint in the project. Create the webhook in Iterable, then select Verify.
Webhook #<id> — needs the JustAI secret key JustAI found the webhook but has not written its header. Select Set header.
Webhook #<id> is disabled in Iterable — enable it to receive events The webhook’s status in Iterable is not Enabled. Enable the webhook in Iterable, then select Verify.
“Webhooks haven’t loaded yet. Refresh to try again.” JustAI could not load the list. Refresh the page.
Webhook #<id> The step is done. None.
  • Sends, opens, and clicks appear in each journey’s analytics. Iterable engagement does not appear under Events.
  • Iterable does not report deliveries. JustAI counts a send as delivered unless Iterable reports a bounce.
  • A click on an email also counts as an open.
  • JustAI counts Iterable unsubscribes in analytics, and Iterable applies its subscription preferences to the email it sends. Confirm how these decisions are synchronized to JustAI and your system of record, and verify both systems with a test unsubscribe before launch.

If Verify shows “No webhook found yet.” or the step reads “Webhook not set up yet.”, work through these checks.

  1. Check that you created the webhook in the same Iterable project as the connection’s API key.

    JustAI sees only the webhooks in that project.

  2. Open the webhook in Iterable and compare its endpoint with the one under Paste this endpoint: in JustAI.

    If they differ, paste the endpoint from JustAI again.

  3. Check that you selected Save Webhook in Iterable.

  4. In JustAI, select Verify again.

    The step reads Webhook #<id> — needs the JustAI secret key.

  5. Select Set header.

    The step summary changes to Webhook #<id>.

If Set header shows “Unable to configure Iterable webhook:” followed by an error from Iterable, check that the connection’s API key is a server-side key with full access. See Rotate the API key to replace it.

  • Don’t edit or remove the header that JustAI added in Iterable. JustAI refuses webhook calls without it, so engagement stops arriving, and the setup screen still shows Webhook #<id>.
  • Keep Authentication set to None in Iterable.
  • If you change the webhook in Iterable, for example its endpoint or headers, open the connection, select Verify, then select Set header or Update header, whichever appears.
  • If you disable the webhook in Iterable, JustAI stops receiving events. Enable it again in Iterable, then select Verify to refresh the step. JustAI needs no other change.
  • If sends or opens stop appearing in journey analytics, open the connection and select Update header.