Docs / Messages
list_conversations
List the conversations in the stored copy of your inbox, across your accounts.
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 |
|---|---|---|
searchoptional | Text. Search by participant, headline, message, or connection label. | You write it. |
unreadOnlyoptional | True or false. Only return unread conversations. | You write it. |
includeThreadsoptional | True or false. Attach the full message history (oldest→newest) to each conversation row under `thread`, resolved server-side — not just the latest message. Use this to read a specific conversation by searching the lead name. | You write it. |
limitoptional | A number, 1 to 200. Max conversations to return (default 50, max 200). | You write it. |
pageoptional | A number. Page number (default 1). | You write it. |
Call it
curl -X POST https://api.heyreagent.com/v1/actions/list_conversations \
-H "Authorization: Bearer YOUR_KEY" \
-H "content-type: application/json" \
-d '{}'The same call in JavaScript
const response = await fetch("https://api.heyreagent.com/v1/actions/list_conversations", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_KEY",
"content-type": "application/json",
},
body: JSON.stringify({}),
});
const answer = await response.json();
console.log(answer);The same call in Python
import requests
response = requests.post(
"https://api.heyreagent.com/v1/actions/list_conversations",
headers={"Authorization": "Bearer YOUR_KEY"},
json={},
)
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/list_conversations |
| 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 |
{}Put your own key where it says YOUR_KEY. New here? Start with your first call.
What you get back
When it worked, the answer is { "ok": true, "result": { … } }. Inside result:
total | |
page | |
limit | |
totalPages | |
hasMore | |
lastFetchedAt | |
syncInProgress | |
inbox |
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
- It reads what sync_inbox last stored, not LinkedIn itself; lastFetchedAt says how old that is. list_chats reads LinkedIn live.
- To read or re-sync a row, pass its conversationUrl. To reply, pass its participantProfileUrl to send_message; that reaches a 1st-degree connection. For an InMail conversation, take the chatId from list_inmail and use send_chat_message.
- readKey changes whenever the conversation's latest message changes: take it from a fresh call.
- inbox[].headline comes back empty for the rows an inbox sync writes; the headline is in inbox[].raw.participantHeadline.
- Pages are by page number, not by cursor.
In Claude or ChatGPT
Once connected, ask in your own words. The assistant sees this action as a tool with the same name, list_conversations, and the same inputs.