GoHighLevel Conversations API
Upload File Attachments
/conversations/messages/uploadPOST /conversations/messages/upload Post the necessary fields for the API to upload files. The files need to be a buffer with the key "fileAttachment". The allowed file types are: JPGJPEGPNGMP4MPEGZIPRARPDFDOCDOCXTXTMP3WAV The API will return an object with the URLs It takes 6 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/upload- 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 |
|---|---|---|
conversationId | string | Conversation Id Example: |
contactId | string | Contact Id Example: |
workflowId | string | Workflow Id Example: |
campaignId | string | Campaign Id Example: |
locationIdrequired | string | — |
attachmentUrlsrequired | array | — |
Response fields
Top-level fields returned on a successful call.
| Name | Type | Description |
|---|---|---|
uploadedFilesrequired | object | — |
twilioMediaSids | array | Twilio media SIDs for group SMS (when isGroupSms=true) 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/upload' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Version: 2021-07-28' \
-H 'Content-Type: application/json' \
-d '{
"conversationId": "ve9EPM428h8vShlRW1KT",
"contactId": "ve9EPM428h8vShlRW1KT",
"workflowId": "ve9EPM428h8vShlRW1KT"
}'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