I’m trying to send a draft reply to a customer email in the HubSpot Conversations Inbox using the API.
Goal:
Programmatically send a reply to an existing customer message, similar to how an agent replies in the inbox comment section.
What I have:
The email’s internetMessageId from Microsoft Outlook (via Graph API).
Problem:
I need the correct threadId for that message to send the reply using the Conversations API.
But I can’t find a way to retrieve the threadId from the internetMessageId.
What I need help with:
Which API can I use to find the threadId using internetMessageId or message details?
What is the correct Conversations API and request body to send a draft reply to a thread?
If you can share a working endpoint and sample request body, it would really help.
Thanks!
The only official method is to list all threads using GET /conversations/v3/conversations/threads, then fetch the messages inside each thread and identify the correct one by matching details like subject, sender, or timestamp. Once you have the correct threadId, you can send a reply using POST /conversations/v3/conversations/threads/{threadId}/messages with a JSON body containing your text, rich text, sender actor ID, channel information, recipients, and subject. If you want a stable way to link Outlook emails with HubSpot threads, you must store the Outlook internetMessageId yourself during ingestion because HubSpot does not expose or store that value publicly. In short, you can send replies programmatically, but you cannot retrieve the threadId using an external email ID you either identify the thread by scanning all threads or build your own mapping outside HubSpot. This post was created with the assistance of AI tools