Skip to main content
GET
/
conversations
/
conversations
/
2026-09-beta
/
threads
/
{threadId}
/
messages
/
{messageId}
Get a single message
curl --request GET \
  --url https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages/{messageId} \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages/{messageId}"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages/{messageId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages/{messageId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages/{messageId}"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages/{messageId}")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages/{messageId}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "archived": true,
  "attachments": [
    {
      "fileId": "<string>",
      "type": "FILE",
      "name": "<string>",
      "url": "<string>"
    }
  ],
  "channelAccountId": "<string>",
  "channelId": "<string>",
  "client": {
    "integrationAppId": 123
  },
  "conversationsThreadId": "<string>",
  "createdAt": "2023-11-07T05:31:56Z",
  "createdBy": "<string>",
  "id": "<string>",
  "recipients": [
    {
      "deliveryIdentifier": {
        "value": "<string>"
      },
      "actorId": "<string>",
      "name": "<string>",
      "recipientField": "<string>"
    }
  ],
  "senders": [
    {
      "actorId": "<string>",
      "deliveryIdentifier": {
        "value": "<string>"
      },
      "name": "<string>",
      "senderField": "<string>"
    }
  ],
  "text": "<string>",
  "type": "MESSAGE",
  "inReplyToId": "<string>",
  "richText": "<string>",
  "status": {
    "failureDetails": {
      "errorMessageTokens": {},
      "errorMessage": "<string>"
    }
  },
  "subject": "<string>",
  "updatedAt": "2023-11-07T05:31:56Z"
}
{
"message": "Invalid input (details will vary based on the error)",
"correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf",
"category": "VALIDATION_ERROR",
"links": {
"knowledge-base": "https://www.hubspot.com/products/service/knowledge-base"
}
}

Supported products

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Path Parameters

messageId
string
required

The unique ID of the message.

threadId
integer<int64>
required

The unique ID of the thread.

Query Parameters

property
string

A specific property to include in the message response.

Response

successful operation

archived
boolean
required
attachments
(FILE · object | LOCATION · object | CONTACT · object | UNSUPPORTED_CONTENT · object | MESSAGE_HEADER · object | QUICK_REPLIES · object | WHATSAPP_TEMPLATE_METADATA · object | SOCIAL_MEDIA_METADATA · object)[]
required
channelAccountId
string
required
channelId
string
required
client
object
required
conversationsThreadId
string
required
createdAt
string<date-time>
required
createdBy
string
required
direction
enum<string>
required
Available options:
INCOMING,
OUTGOING
id
string
required
recipients
object[]
required
senders
object[]
required
text
string
required
truncationStatus
enum<string>
required
Available options:
NOT_TRUNCATED,
TRUNCATED,
TRUNCATED_TO_MOST_RECENT_REPLY
type
enum<string>
default:MESSAGE
required
Available options:
MESSAGE
inReplyToId
string
richText
string
status
object
subject
string
updatedAt
string<date-time>
Last modified on March 31, 2026