# Send channel message (/en/api-reference/api-ref/signaling/channel-message)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

Sends a channel Signaling message from the server.

- OpenAPI: /openapi/rtm/signaling-rest.en.yaml
- Operation ID: send-channel-message
- Method: POST
- Path: /{appid}/rtm/users/{user_id}/channel_messages
- Endpoint: https://api.agora.io/dev/v2/project/{appid}/rtm/users/{user_id}/channel_messages

## Servers

- https://api.agora.io/dev/v2/project

Sends a channel message from the server. You can send a message to a channel without joining it first.


## Authorization

This endpoint requires authentication.

- `basicAuth`

## Parameters

- `appid` (path, required, string) - The App ID of your Agora project.
- `user_id` (path, required, string) - Signaling user ID to send a channel message. It must not exceed 64 characters in length or be an empty string. Since `user_id` is a URL parameter, the first and last characters must not be a space.

  :::info[Note]
  Since `user_id` is a URL parameter, the first character and the last characters must not be a space.
  :::

## Request body

- `channel_name` (string, required) - Signaling channel name to receive a channel message. It must not exceed 64 characters in length or be an empty string.
- `enable_historical_messaging` (boolean) - Whether to save as a historical message.

- `true`: Save as a historical message.
- `false`: Do not save as a historical message.
  - Default: `false`
- `payload` (string, required) - Content of the channel message. It must not be an empty string or exceed 32 KB in length.

### Request body example

```json
{
  "channel_name": "channelA",
  "enable_historical_messaging": false,
  "payload": "Hello"
}
```

## Request examples

### curl

```bash
curl -X POST 'https://api.agora.io/dev/v2/project/876922cbca0098dff4323566daa89675/rtm/users/userA/channel_messages' \
     -H 'Content-Type: application/json;charset=utf-8' \
     -H 'Authorization: Basic <your_base64_encoded_credentials>' \
     -d '{
       "channel_name": "channelA",
       "enable_historical_messaging": false,
       "payload": "Hello"
     }'
```

### Python

```python
import requests
   import json

   url = 'https://api.agora.io/dev/v2/project/876922cbca0098dff4323566daa89675/rtm/users/userA/channel_messages'

   headers = {
     'Content-Type': 'application/json;charset=utf-8',
     'Authorization': 'Basic <your_base64_encoded_credentials>'
   }

   data = {
     "channel_name": "channelA",
     "enable_historical_messaging": False,
     "payload": "Hello"
   }

   try:
     response = requests.post(url, headers=headers, data=json.dumps(data))
     print("Status:", response.status_code)
     print("Response:", response.json())
   except Exception as error:
     print("Error:", error)
```

### Node.js

```javascript
const axios = require('axios');

   const url = 'https://api.agora.io/dev/v2/project/876922cbca0098dff4323566daa89675/rtm/users/userA/channel_messages';

   const headers = {
   'Content-Type': 'application/json;charset=utf-8',
   'Authorization': 'Basic <your_base64_encoded_credentials>'
   };

   const data = {
   channel_name: "channelA",
   enable_historical_messaging: false,
   payload: "Hello"
   };

   axios.post(url, data, { headers })
   .then(response => {
     console.log("Status:", response.status);
     console.log("Response:", response.data);
   })
   .catch(error => {
     console.error("Error:", error.response ? error.response.data : error.message);
   });
```


### Response

- If the returned status code is `200`, the request was successful. The response body contains the result of the request.

- If the returned status code is not `200`, the request failed. The response body includes the error code and description. Refer to [status codes](/en/realtime-media/rtm/reference/error-codes#restful-api-error-codes) to understand the possible reasons for failure.


## Responses

### 200

The request was successful. The response body contains the result of the request.

- `result` (string) - Request result. `success` if the request succeeds, `failed` if it fails.

Request result.

 - success: The request succeeds.
 - failed: The request fails.
- `request_id` (string) - Unique ID to identify this request.
- `code` (string) - Message status: `message_sent`.

Message status.

 - message_sent: The message is sent.
### default

The request failed. The response body includes the error code and description.

No schema.

## Response examples

### 200

```json
{
  "result": "success",
  "request_id": "123",
  "code": "message_sent"
}
```
