Message sent

Incoming webhook deliveries are authenticated with HMAC signature headers (X-Chatway-Signature and X-Chatway-Timestamp), not your Chatway API key.

An agent sent a new message.

Triggered when an agent sends a message from the dashboard or API (including POST /messages).

Internal notes, reminders, and system messages are not included.

data.agent is always present on this event. Dashboard sends use the signed-in agent. API sends use the agent_id on the stored message (include agent_id in POST /messages for agent-originated replies).

Use message.sent to add agent replies to an external transcript or record response activity. Match the message with data.message.id, the conversation with data.conversation.id, and the sender with data.agent.id. Your own agent-originated API reply can generate this event. To avoid a reply loop, start automatic visitor replies from Message received. Use Get Agent when you need the sending agent's details.

For signature verification and retries, see Webhooks overview.

POST webhook: message.sent

Parameters

NameInRequiredTypeDescription
X-Chatway-EventheaderYesstringEvent name for this delivery. Example: message.sent
X-Chatway-Webhook-IdheaderYesstring (uuid)Unique webhook subscription ID. Example: 9f3c2a1b-4d5e-4f70-8a9b-0c1d2e3f4a5b
X-Chatway-Delivery-IdheaderYesstringUnique ID for this HTTP delivery attempt (`del_` + 32 hex characters). A new value is sent on each retry. Example: del_1b0279b1f28f12c0b9f2a2fdbf3758ee
X-Chatway-Delivery-AttemptheaderYesstringAttempt number for this event (`1` on first try). Sent as a decimal string in the header. Example: 1
X-Chatway-TimestampheaderYesstringUnix timestamp in seconds when the request was signed. Sent as a decimal string in the header. Example: 1770201121
X-Chatway-SignatureheaderYesstring`sha256=` followed by the lowercase hex HMAC SHA256 of `{X-Chatway-Timestamp}.{raw request body}`, keyed with your webhook secret. The example is computed for the example body serialized as compact JSON, the example timestamp, and the placeholder secret `whsec_exampleSecretForDocsOnly00000000`. Example: sha256=a08263313b36b71ce796fb42e8eb35bb1001cc73beeef643fcf7c14c6bec20ea

Request body

Signed JSON envelope for this event.

application/json

Responses

200

Return any 2xx status to acknowledge receipt.

410

Optional HTTP 410 Gone to signal the endpoint is permanently unavailable. Like every non-2xx response below 500 (including 408 and 429), it is not retried. It does not disable the subscription; turn the webhook off in Chatway Settings if you want deliveries to stop.

Examples

Request body example

{
    "id": "evt_1234567890abcdef1234567890abcdef",
    "event": "message.sent",
    "data": {
        "message": {
            "id": "a1b2c3d4-e5f6-4789-a012-3456789abcde",
            "content": "Happy to help! Let me look into that for you.",
            "attachments": [],
            "created_at": "2026-02-04T10:32:00Z"
        },
        "conversation": {
            "id": "0f46c0a1-8938-40e3-b2b5-bb56f569fcab",
            "channel": "website",
            "status": "open",
            "widget_name": "Main site widget",
            "identifier": "eouqtiupanm6uvglwshy"
        },
        "visitor": {
            "id": "9b0c5fe6-35ad-459d-b6ba-4288191f84f1",
            "name": "John Doe",
            "email": "[email protected]",
            "phone": "+1XXXXXXXXXX"
        },
        "agent": {
            "id": "26fa75f2-7ac1-47b4-84e1-b943491ba4da",
            "name": "Sarah Chen",
            "email": "[email protected]"
        }
    },
    "occurred_at": "2026-02-04T10:32:00Z",
    "version": "2026-09"
}