GoHighLevel Conversations API

Add Message Attachments

PUT/conversations/messages/:messageId/attachments

PUT /conversations/messages/:messageId/attachments Set attachments on an existing message (replaces existing). Supported for TYPE_CUSTOM_CALL (34) and TYPE_CALL (1) with subType EXTERNAL_CALL It takes 1 path parameter and 1 body field, requires the conversations/message.write scope and authenticates with a sub-account (location) token.

Request and authentication

Method
PUT
Full URL
https://services.leadconnectorhq.com/conversations/messages/:messageId/attachments
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

Path parameters

Substituted into the URL. Required by definition.

NameTypeDescription
messageIdrequiredstring

Example: ve9EPM428h8vShlRW1KT

Request body

JSON body fields. Nested objects are shown indented under their parent.

NameTypeDescription
attachmentsrequiredarray

Array of attachment URLs to set on the message (replaces existing). Maximum 5 URLs.

Example: https://provider.com/recordings/call-123.mp3

Example request

Copy-paste ready. Swap YOUR_TOKEN for your access token or Private Integration Token, and the sample ID for your own.

curl -X PUT 'https://services.leadconnectorhq.com/conversations/messages/ve9EPM428h8vShlRW1KT/attachments' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -d '{
    "attachments": [
      "https://provider.com/recordings/call-123.mp3"
    ]
  }'

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