Docs / Messages
get_conversation
Read your whole conversation with one person.
This action only reads. It changes nothing, so it is safe to try.
What you give it
| Input | What it is | Where to get it |
|---|---|---|
conversationUrlneeded | A conversation link or a profile link. The other person's LinkedIn profile URL (https://linkedin.com/in/…) — preferred — or a /messaging/thread/ URL. | Open the person's profile on LinkedIn and copy the address from your browser. It looks like https://www.linkedin.com/in/their-name Or run search_people and use people[].profileUrl from its answer.30 more places to get it
|
connectionIdoptional | A connection id. Which of your senders owns this conversation (its linkedinConnections _id). Omit to search your live senders; for a live fetch the first live sender is used. | Run list_linkedin_accounts and use accounts[].id from its answer.15 more places to get it
|
refreshoptional | True or false. true = fetch live from LinkedIn even if cached. false (default) = return the cached thread when available, else fetch live. | You write it. |
Call it
curl -X POST https://api.heyreagent.com/v1/actions/get_conversation \
-H "Authorization: Bearer YOUR_KEY" \
-H "content-type: application/json" \
-d '{"conversationUrl":"PASTE_PROFILE_LINK_HERE"}'The same call in JavaScript
const response = await fetch("https://api.heyreagent.com/v1/actions/get_conversation", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_KEY",
"content-type": "application/json",
},
body: JSON.stringify({
"conversationUrl": "PASTE_PROFILE_LINK_HERE"
}),
});
const answer = await response.json();
console.log(answer);The same call in Python
import requests
response = requests.post(
"https://api.heyreagent.com/v1/actions/get_conversation",
headers={"Authorization": "Bearer YOUR_KEY"},
json={
"conversationUrl": "PASTE_PROFILE_LINK_HERE",
},
)
print(response.json())The same call in n8n
Add an HTTP Request node and fill it in like this:
| Method | POST |
| URL | https://api.heyreagent.com/v1/actions/get_conversation |
| Send Headers | On. Name Authorization, Value Bearer YOUR_KEY |
| Send Body | On. Body Content Type JSON, Specify Body Using JSON, then paste the body below |
{
"conversationUrl": "PASTE_PROFILE_LINK_HERE"
}Put your own key where it says YOUR_KEY. Put your own value where it says PASTE_…_HERE: the table above says where each one comes from. New here? Start with your first call.
What you get back
When it worked, the answer is { "ok": true, "result": { … } }. Inside result:
source | |
connectionId | A connection id. Other actions take it. |
exists | |
participant | |
chatId | A chat id. Other actions take it. |
inbox | |
messageCount | |
messages | |
note |
A field that does not apply to an answer is left out, or is null.
When it did not work, the answer is { "ok": false, "error": "…", "message": "…" }. What each error means.
Good to know
- chatId and participant come back only when source is "live". An answer from the stored copy (source "cache") has neither; refresh true forces a live read.
- A linkedin.com/messaging/thread/… link works only for a stored conversation. For a live read pass the person's profile link.
- For an InMail, Sales Navigator or Recruiter conversation the answer adds replyWith with the chatId: reply there with send_chat_message. send_message by profile link would start an ordinary conversation instead.
- exists false with uncertain true means it could not be checked, not that there is no conversation.
In Claude or ChatGPT
Once connected, ask in your own words. The assistant sees this action as a tool with the same name, get_conversation, and the same inputs.