# How to Send a Message

Send a text message to a conversation. Carbon Voice will convert it to audio. Use the `channel_guid` and `message_guid` from a webhook event to reply back to the same conversation.

```
POST /v3/messages/start
Content-Type: application/json
```

```json
{
  "transcript": "string",
  "is_text_message": true,
  "unique_client_id": "string",
  "is_streaming": false,
  "channel_id": "string",
  "reply_to_message_id": "string"
}
```

**Request body fields:**

| Field | Description |
| --- | --- |
| `transcript` | The text content to send. |
| `is_text_message` | Set to `true` to indicate a text message. |
| `unique_client_id` | A client-generated GUID used to de-duplicate repeated requests. |
| `is_streaming` | Set to `false` for non-streaming sends. |
| `channel_id` | The conversation to send to. |
| `reply_to_message_id` | The top-level message ID to thread under. Must be a message with no parent. The API does not support replying to replies — if the webhook message is a reply, use its `parent_message_id` instead. |

**Response:** Returns a message object containing `id` (the `message_id`).

## Sending a Reply

Include `reply_to_message_id` to thread your reply under an existing message. The webhook payload exposes `channel_guid` and `message_guid` — use these as `channel_id` and `reply_to_message_id` in your request. When the webhook message is a reply, it also includes `parent_message_guid`; use that as `reply_to_message_id` instead (the API rejects replies to replies).

```json
{
  "transcript": "Your reply here",
  "is_text_message": true,
  "unique_client_id": "<generated-guid>",
  "is_streaming": false,
  "channel_id": "<channel_guid from webhook>",
  "reply_to_message_id": "<message_guid from webhook — or parent_message_guid if that message is a reply>"
}
```
