# Webhooks

***

### Managing Webhooks

{% hint style="warning" %}
**Note:** Webhook triggers can be configured directly from the Channel360 frontend without using the API.
{% endhint %}

{% content-ref url="/pages/rw2bt83dh9k1qR6ffKiw" %}
[Webhooks](/channel360-guide/webhooks.md)
{% endcontent-ref %}

### Webhook Triggers

Webhook triggers define which events will result in a webhook request being sent to your endpoint.\
For example, when a user reads a message, a webhook request is sent containing details about that event

### Webhook Target

The webhook target defines the endpoint where Channel360 will send webhook event payloads.

#### appUserId

Webhook payloads include an `appUserId`, which uniquely identifies a user within the organisation.

The `appUserId` is created automatically when a user first interacts with your channel (for example, when they send a message). It can be used to correlate webhook events and to send notifications to that user.

| Trigger                       | Description                                                                                    |
| ----------------------------- | ---------------------------------------------------------------------------------------------- |
| notification:delivery:channel | Triggered when a notification is successfully delivered to a customer channel.                 |
| notification:delivery:failure | Triggered when a notification fails to be delivered to a customer channel / the user’s device. |
| notification:delivery:user    | Triggered when a notification is successfully delivered to the user’s device.                  |
| conversation:read             | Triggered when a user has read the conversation.                                               |
| message:appUser               | Triggered for inbound messages (from clients).                                                 |
| message:appMaker              | Triggered for outbound messages, which are the messages the user sends in a conversation.      |
| message:delivery:failure      | Triggered for failed outbound messages from the `/reply` endpoint.                             |
| flow:submission               | Triggered for whatsapp flow submissions.                                                       |

## Create Webhook

<mark style="color:yellow;">`POST`</mark> `https://www.channel360.co.za/v1.1/org/{{orgId}}/webhooks`

```json
{
    "target": "{{targetURL}}",
    "triggers": [
        "notification:delivery:channel",
        "notification:delivery:user",
        "notification:delivery:failure",
        "conversation:read",
        "message:appMaker",
        "message:appUser"
    ]
}
```

## Get Webhooks

<mark style="color:green;">`GET`</mark> `https://www.channel360.co.za/v1.1/org/{{orgId}}/webhooks`

```json
    {
        "organization": "{{yourOrgId}}",
        "target": "{{targetURL}}",
        "triggers": [
            "message:appUser",
            "message:appMaker",
            "notification:delivery:user",
            "message:delivery:failure",
            "conversation:read",
            "notification:delivery:channel",
            "notification:delivery:failure"
        ],
        "createdAt": "2025-11-04T14:59:01.000Z",
        "updatedAt": "2025-11-04T14:59:01.000Z",
        "version": 0,
        "id": "690a14b4f56fcf6220b5a1af"
    }
```

## Delete Webhook

<mark style="color:orange;">`DELETE`</mark> `https://www.channel360.co.za/v1.1/org/{{orgId}}/webhooks/{{webhook-id}}`

### Path Parameters

| Field      | Type                                                                         | Description                      |
| ---------- | ---------------------------------------------------------------------------- | -------------------------------- |
| orgId      | string <sup><mark style="color:red;">required<mark style="color:red;"></sup> | Your Organization ID             |
| webhook-id | string <sup><mark style="color:red;">required<mark style="color:red;"></sup> | Unique identifier of the webhook |

## Retry Policy

A webhook call will be attempted up to 5 times over a 15 minute window. The attempts will happen at an exponentially increasing interval if the target responds with anything but a success (2XX) or a [non-recoverable error](https://docs.smooch.io/rest/#non-recoverable-errors). If no response is received within 20 seconds, the call will be considered a failure and will also be reattempted.

#### Non-recoverable Errors <a href="#non-recoverable-errors" id="non-recoverable-errors"></a>

The following status codes are deemed to be non-recoverable and Channel Mobile will not reattempt a call when receiving a response with them:

* 400: The target exists, but can’t process the payload.
* 401: The target is behind authentication or doesn’t recognize the webhook secret.
* 403: Channel Mobile should not be calling the target.
* 404: The target doesn’t exist.
* 406: The target exists, and rejected the webhook intentionally.


---

# Agent Instructions: 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:

```
GET https://docs.channel360.co.za/api-usage/using-the-channel360-v1.1-api/webhooks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
