## Send `client.Messages.Send(ctx, chatID, body) (*MessageSendResponse, error)` **post** `/v1/chats/{chatID}/messages` Send a text message to a specific chat. Supports replying to existing messages. Returns a pending message ID. ### Parameters - `chatID string` Unique identifier of the chat. - `body MessageSendParams` - `Attachment param.Field[MessageSendParamsAttachment]` Single attachment to send with the message - `UploadID string` Upload ID from uploadAsset endpoint. Required to reference uploaded files. - `Duration float64` Duration in seconds (optional override of cached value) - `FileName string` Filename (optional override of cached value) - `MimeType string` MIME type (optional override of cached value) - `Size MessageSendParamsAttachmentSize` Dimensions (optional override of cached value) - `Height float64` - `Width float64` - `Type string` Special attachment type (gif, voiceNote, sticker). If omitted, auto-detected from mimeType - `const MessageSendParamsAttachmentTypeGif MessageSendParamsAttachmentType = "gif"` - `const MessageSendParamsAttachmentTypeVoiceNote MessageSendParamsAttachmentType = "voiceNote"` - `const MessageSendParamsAttachmentTypeSticker MessageSendParamsAttachmentType = "sticker"` - `ReplyToMessageID param.Field[string]` Provide a message ID to send this as a reply to an existing message - `Text param.Field[string]` Text content of the message you want to send. You may use markdown. ### Returns - `type MessageSendResponse struct{…}` - `ChatID string` Unique identifier of the chat. - `PendingMessageID string` Pending message ID ### Example ```go package main import ( "context" "fmt" "github.com/beeper/desktop-api-go" ) func main() { client := beeperdesktopapi.NewClient( ) response, err := client.Messages.Send( context.TODO(), "!NCdzlIaMjZUmvmvyHU:beeper.com", beeperdesktopapi.MessageSendParams{ }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.PendingMessageID) } ```