GoHighLevel Conversations API
Send A New Message
/conversations/messagesPOST /conversations/messages Post the necessary fields for the API to send a new message It takes 25 body fields, requires the conversations/message.write scope and authenticates with a sub-account (location) token.
Request and authentication
- Method
POST- Full URL
https://services.leadconnectorhq.com/conversations/messages- Scopes
conversations/message.write- Token type
- Sub-account (location) token
- Accepted auth
- OAuth Access Token, Private Integration Token
- API version header
Version: 2021-07-28- Schema verified
- 22 June 2026
Request body
JSON body fields. Nested objects are shown indented under their parent.
| Name | Type | Description |
|---|---|---|
typerequired | string | Type of message being sent One of: Example: |
subTyperequired | object | Type of message being sent Example: |
contactIdrequired | string | ID of the contact receiving the message Example: |
appointmentId | string | ID of the associated appointment Example: |
attachments | array | Array of attachment URLs Example: |
emailFrom | string | Email address to send from Example: |
emailCc | array | Array of CC email addresses Example: |
emailBcc | array | Array of BCC email addresses Example: |
html | string | HTML content of the message Example: |
message | string | Text content of the message Example: |
subject | string | Subject line for email messages Example: |
replyMessageId | string | ID of message being replied to Example: |
templateId | string | ID of message template Example: |
threadId | string | ID of message thread. For email messages, this is the message ID that contains multiple email messages in the thread Example: |
scheduledTimestamp | number | UTC Timestamp (in seconds) at which the message should be scheduled Example: |
conversationProviderId | string | ID of conversation provider Example: |
emailTo | string | Email address to send to, if different from contact's primary email. This should be a valid email address associated with the contact. Example: |
customSubtypeId | string | Custom subtype ID for email unsubscription preferences. Only applies to email messages. Example: |
emailReplyMode | string | Mode for email replies One of: Example: |
fromNumber | string | Phone number used as the sender number for outbound messages Example: |
toNumber | string | Recipient phone number for outbound messages Example: |
forward | unknown | Forwarding configuration for emails Example: |
statusrequired | string | Message status One of: Example: |
usesNativeSchedulingAi | boolean | Whether the scheduled email uses native AI for the email scheduling Example: |
optimizationPeriod | string | Optimization period in hours (24h, 48h, or 72h) One of: Example: |
Response fields
Top-level fields returned on a successful call.
| Name | Type | Description |
|---|---|---|
conversationIdrequired | string | Conversation ID. Example: |
emailMessageId | string | This contains the email message id (only for Email type). Use this ID to send inbound replies to GHL to create a threaded email. Example: |
messageIdrequired | string | This is the main Message ID Example: |
messageIds | array | When sending via the GMB channel, we will be returning list of messageIds instead of single messageId. |
msg | string | Additional response message when sending a workflow message Example: |
forwardData | unknown | Optional metadata for forwarded email Example: |
statusrequired | string | Message status One of: Example: |
Example request
Copy-paste ready. Swap YOUR_TOKEN for your access token or Private Integration Token.
curl -X POST 'https://services.leadconnectorhq.com/conversations/messages' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Version: 2021-07-28' \
-H 'Content-Type: application/json' \
-d '{
"type": "Email",
"subType": "Email",
"contactId": "abc123def456",
"status": "delivered"
}'Skip the schema lookup
Hylo gives your AI agent this schema — and the other 52 documented here — without you looking anything up. Ask in plain English; it picks the endpoint, fills the body, and can run the call against your own sub-account.
More conversations endpoints
- Add An Inbound MessagePOST /conversations/messages/inbound
- Add An Outbound MessagePOST /conversations/messages/outbound
- Add Message AttachmentsPUT /conversations/messages/:messageId/attachments
- Complete File UploadPOST /conversations/messages/upload/complete
- Create ConversationPOST /conversations/
- Create Custom SubtypePOST /conversations/preferences/custom-subtypes
- All GoHighLevel Conversations endpointsCategory index
- GoHighLevel API referenceEvery category, webhooks, and OAuth scopes