> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Send interaction

> Send a user message or action to the agent through the custom channel

## Description

Your app sends an interaction to the agent. Jelou validates the HMAC signature, responds immediately with `202` and an `executionId`, and processes the flow asynchronously. Agent replies arrive later on your `webhookUrl`.

## Endpoint

```
POST https://chatbot.jelou.ai/v1/custom-channel/{botId}
```

## Path parameters

<ParamField path="botId" type="string" required>
  Agent identifier with custom channel enabled.
</ParamField>

## Body parameters

<ParamField body="referenceId" type="string" required>
  Stable user identifier in your system. Used as `userId` in outbound deliveries and to check session status.
</ParamField>

<ParamField body="message" type="object" required>
  Message payload forwarded to the agent flow. A typical text example is `{ "type": "TEXT", "text": "Hello" }`.
</ParamField>

## Authentication / signature

Include the required header:

```
X-Jelou-Signature: sha256=<HMAC_HEX>
```

The signature is computed over the exact **raw body** of the request (HMAC-SHA256). Details in [HMAC signature](/en/api/custom-channel/hmac-signature).

Channel `credentials.auth` is **not** required on this endpoint; it only applies to Jelou's outbound calls to your webhook.

## Request example

```bash cURL theme={null}
curl --request POST \
  --url https://chatbot.jelou.ai/v1/custom-channel/BOT_ID \
  --header 'Content-Type: application/json' \
  --header 'X-Jelou-Signature: sha256=HMAC_HEX' \
  --data '{
    "referenceId": "user-123",
    "message": {
      "type": "TEXT",
      "text": "Hello"
    }
  }'
```

## Responses

| Code | Status                | Description                                            |
| ---- | --------------------- | ------------------------------------------------------ |
| 202  | Accepted              | Interaction accepted. The flow runs in the background. |
| 400  | Bad Request           | Missing or empty `referenceId`.                        |
| 401  | Unauthorized          | Invalid, missing, or unresolvable signature.           |
| 500  | Internal Server Error | Internal error (for example, channel not resolved).    |

## Response example

```json theme={null}
{
  "executionId": "EXECUTION_ID"
}
```

<Warning>
  A `202` does not mean the flow finished successfully. Use [check status](/en/api/custom-channel/check-status) and/or wait for delivery on your webhook.
</Warning>
