curl --request GET \
--url https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages \
--header 'Authorization: Bearer <token>'{
"results": [
{
"type": "MESSAGE",
"id": "<string>",
"conversationsThreadId": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"client": {
"clientType": "HUBSPOT",
"integrationAppId": 123
},
"senders": [
{
"actorId": "<string>",
"deliveryIdentifier": {
"type": "CHANNEL_SPECIFIC_OPAQUE_ID",
"value": "<string>"
},
"name": "<string>",
"senderField": "<string>"
}
],
"recipients": [
{
"deliveryIdentifier": {
"type": "CHANNEL_SPECIFIC_OPAQUE_ID",
"value": "<string>"
},
"actorId": "<string>",
"name": "<string>",
"recipientField": "<string>"
}
],
"archived": true,
"text": "<string>",
"attachments": [
{
"fileId": "<string>",
"fileUsageType": "AUDIO",
"type": "FILE",
"name": "<string>",
"url": "<string>"
}
],
"truncationStatus": "NOT_TRUNCATED",
"direction": "INCOMING",
"channelId": "<string>",
"channelAccountId": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"richText": "<string>",
"subject": "<string>",
"inReplyToId": "<string>",
"status": {
"statusType": "FAILED",
"failureDetails": {
"errorMessageTokens": {},
"errorMessage": "<string>"
}
}
}
],
"paging": {
"next": {
"after": "<string>",
"link": "<string>"
}
}
}Retrieve messages from a specific conversation thread in your HubSpot account. This endpoint allows you to paginate through messages, sort them, and filter based on archival status. It is useful for accessing the message history of a conversation thread.
curl --request GET \
--url https://api.hubapi.com/conversations/conversations/2026-09-beta/threads/{threadId}/messages \
--header 'Authorization: Bearer <token>'{
"results": [
{
"type": "MESSAGE",
"id": "<string>",
"conversationsThreadId": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"client": {
"clientType": "HUBSPOT",
"integrationAppId": 123
},
"senders": [
{
"actorId": "<string>",
"deliveryIdentifier": {
"type": "CHANNEL_SPECIFIC_OPAQUE_ID",
"value": "<string>"
},
"name": "<string>",
"senderField": "<string>"
}
],
"recipients": [
{
"deliveryIdentifier": {
"type": "CHANNEL_SPECIFIC_OPAQUE_ID",
"value": "<string>"
},
"actorId": "<string>",
"name": "<string>",
"recipientField": "<string>"
}
],
"archived": true,
"text": "<string>",
"attachments": [
{
"fileId": "<string>",
"fileUsageType": "AUDIO",
"type": "FILE",
"name": "<string>",
"url": "<string>"
}
],
"truncationStatus": "NOT_TRUNCATED",
"direction": "INCOMING",
"channelId": "<string>",
"channelAccountId": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"richText": "<string>",
"subject": "<string>",
"inReplyToId": "<string>",
"status": {
"statusType": "FAILED",
"failureDetails": {
"errorMessageTokens": {},
"errorMessage": "<string>"
}
}
}
],
"paging": {
"next": {
"after": "<string>",
"link": "<string>"
}
}
}Supported products
Required Scopes
The access token received from the authorization server in the OAuth 2.0 flow.
The unique identifier of the thread whose messages are to be retrieved.
The paging cursor token of the last successfully read resource will be returned as the paging.next.after JSON property of a paged response containing more results.
Whether to return only results that have been archived.
The maximum number of results to display per page.
A specific property to include in the response.
A list of fields to sort the results by.
Was this page helpful?