> For the complete documentation index, see [llms.txt](https://docs.delphi.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.delphi.ai/advanced/actions/webhooks.md).

# Webhooks

A webhook is a way for one app to automatically send information to another the instant something happens. When something occurs with your Digital Mind, like a conversation wrapping up or a new contact arriving, Delphi packages up the full details of that event and delivers them straight to another tool of your choosing, in real time.

People use webhooks to keep everything in sync without lifting a finger: add every new contact to your CRM the second it appears, post to a Slack channel when someone important reaches out, or kick off an automation when a conversation ends. You pick what to listen for, and you pick where the news goes.

#### How to set one up

Setting up a webhook takes just a few minutes. Here is each step.

**1. Give it a name**

This is simply a label for your own reference, so you can recognize it later in your list. For example, "New contacts to HubSpot."

**2. Add your endpoint URL**

This is the web address where Delphi will send the information, and it is the bridge to your other tool. You can paste in a webhook URL from Zapier or Make, or point it at your own app or server. The address has to start with `https://` for security.

**3. Choose the events to listen for**

Events are the specific things that can happen with your Digital Mind. Pick one or more to act as the trigger for this webhook:

| Event                           | Fires when                                                                                     |
| ------------------------------- | ---------------------------------------------------------------------------------------------- |
| **Thread Session Ended**        | A conversation has settled and the full session is ready to fetch.                             |
| **Visitor Message Sent**        | A visitor sent a message in chat. This is the only event that carries the actual message text. |
| **Contact Created**             | A new contact was created from an import, the API, or conversation capture.                    |
| **Contact Updated**             | A contact's profile, tags, or custom properties changed.                                       |
| **Contact Deleted**             | A contact was removed from the owner account.                                                  |
| **Alert Triggered**             | An alert's condition matched a conversation.                                                   |
| **Affiliate Product Mentioned** | An affiliate product was recommended in an assistant message.                                  |
| **Phone Number Captured**       | A linked contact gained a phone number.                                                        |
| **Contact Became Inactive**     | A contact crossed a whole-day inactivity threshold that you set.                               |

**4. Add filters (optional)**

By default, every event of the type you picked is delivered. If you only care about some of them, add a filter so Delphi sends just the ones that match. Each event gets its own filter, with two modes:

* **Simple** is the no-code option. For most events, you can deliver only when the person has certain tags, matching ANY of the tags you list or ALL of them. For Alert Triggered, you instead pick which specific alerts count, like "Founder Pitch" or "Customer Request"
* **Advanced** is for fine-grained control, where you write an expression that spells out exactly what to match. Your Simple choices actually build this expression for you behind the scenes, so you can start Simple and peek at the Advanced version anytime.

Filters are checked the moment you save, so a typo gets caught right away. And if a filter ever fails, Delphi skips that delivery rather than sending you everything, so you never get a surprise flood.

**5. Test against a sample event**

Before you rely on it, click **Test Against a Sample Event**. Delphi sends a realistic example to your endpoint URL so you can confirm the connection works and your other tool receives what you expect. No need to wait for a real conversation to happen.

**6. Save, then watch the delivery log**

Once saved, your webhook is live. Every delivery is recorded in the delivery log, where you can see whether each one was delivered, failed, or skipped by a filter, along with the timing and the exact data that was sent. It is the place to confirm things are flowing, and the first place to look if they are not.

#### Frequently asked questions

* How do I know a webhook really came from Delphi?

  The first webhook you create generates a signing secret, shown only once. Your app uses it to confirm each delivery genuinely came from Delphi and not someone pretending to be us, so save it somewhere safe. You can rotate it later, with a 72-hour overlap so nothing breaks mid-switch.
* What happens if my endpoint is down when an event fires?

  Delphi keeps trying. If your endpoint is briefly down, Delphi retries up to 12 times with growing gaps between attempts, and your endpoint has 60 seconds to respond each time. After 5 failures in a row, it is paused as "unhealthy" until you turn it back on, so a broken tool cannot pile up forever.
* Could I receive the same event more than once?

  Yes, on rare occasions. Delphi promises to deliver at least once, which sometimes means a duplicate. Each delivery carries a unique event id, so your tool can safely ignore one it has already seen. Zapier and most tools handle this for you.
* How long can I see past deliveries?

  Each delivery record, including what was sent and what came back, is kept for 7 days in the delivery log.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.delphi.ai/advanced/actions/webhooks.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
