GoHighLevel Conversations API

Send A New Message

POST/conversations/messages

POST /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.

NameTypeDescription
typerequiredstring

Type of message being sent

One of: SMS, RCS, Email, WhatsApp, IG, FB, Custom, Live_Chat, TIKTOK

Example: Email

subTyperequiredobject

Type of message being sent

Example: Email

contactIdrequiredstring

ID of the contact receiving the message

Example: abc123def456

appointmentIdstring

ID of the associated appointment

Example: appt123

attachmentsarray

Array of attachment URLs

Example: https://storage.com/file1.pdf,https://storage.com/file2.jpg

emailFromstring

Email address to send from

Example: sender@company.com

emailCcarray

Array of CC email addresses

Example: cc1@company.com,cc2@company.com

emailBccarray

Array of BCC email addresses

Example: bcc1@company.com,bcc2@company.com

htmlstring

HTML content of the message

Example: <p>Hello World</p>

messagestring

Text content of the message

Example: Hello, how can I help you today?

subjectstring

Subject line for email messages

Example: Important Update

replyMessageIdstring

ID of message being replied to

Example: msg123

templateIdstring

ID of message template

Example: template123

threadIdstring

ID of message thread. For email messages, this is the message ID that contains multiple email messages in the thread

Example: thread123

scheduledTimestampnumber

UTC Timestamp (in seconds) at which the message should be scheduled

Example: 1669287863

conversationProviderIdstring

ID of conversation provider

Example: provider123

emailTostring

Email address to send to, if different from contact's primary email. This should be a valid email address associated with the contact.

Example: recipient@company.com

customSubtypeIdstring

Custom subtype ID for email unsubscription preferences. Only applies to email messages.

Example: 507f1f77bcf86cd799439011

emailReplyModestring

Mode for email replies

One of: reply, reply_all

Example: reply_all

fromNumberstring

Phone number used as the sender number for outbound messages

Example: +1499499299

toNumberstring

Recipient phone number for outbound messages

Example: +1439499299

forwardunknown

Forwarding configuration for emails

Example: [object Object]

statusrequiredstring

Message status

One of: delivered, failed, pending, read

Example: delivered

usesNativeSchedulingAiboolean

Whether the scheduled email uses native AI for the email scheduling

Example: false

optimizationPeriodstring

Optimization period in hours (24h, 48h, or 72h)

One of: 24h, 48h, 72h

Example: 24h

Response fields

Top-level fields returned on a successful call.

NameTypeDescription
conversationIdrequiredstring

Conversation ID.

Example: ABC12h2F6uBrIkfXYazb

emailMessageIdstring

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: rnGyqh2F6uBrIkfhFo9A

messageIdrequiredstring

This is the main Message ID

Example: t22c6DQcTDf3MjRhwf77

messageIdsarray

When sending via the GMB channel, we will be returning list of messageIds instead of single messageId.

msgstring

Additional response message when sending a workflow message

Example: Message queued successfully.

forwardDataunknown

Optional metadata for forwarded email

Example: [object Object]

statusrequiredstring

Message status

One of: delivered, failed, pending, read

Example: delivered

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