Docs / InMail
list_inmail
List your InMail conversations, or every 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 |
|---|---|---|
connectionIdoptional | A connection id. Only this sender account (its linkedinConnections _id). Omit to read every live sender on the active setup. | Run list_linkedin_accounts and use accounts[].id from its answer.15 more places to get it
|
profileUrloptional | A profile link or a Sales Navigator lead link. The person's LinkedIn profile URL (linkedin.com/in/…) or Sales Navigator lead URL. Returns every conversation with that one person — InMail and classic, each tagged by inbox — instead of scanning the inbox. | 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.31 more places to get it
|
unreadOnlyoptional | True or false. Only threads with unread messages. | You write it. |
awaitingReplyOnlyoptional | True or false. Only threads where the other person wrote last (they are waiting on you). | You write it. |
searchoptional | Text. Filter by participant name, headline or latest message text. Ranked: name/headline matches first, then latest-message matches, each newest first; every row says matchedBy. To find one known person, prefer profileUrl. | You write it. |
limitoptional | A number, 1 to 100. Max threads to return (default 25, max 100). | You write it. |
syncInboxoptional | True or false. true = first pull the ACTIVE Sales Navigator contract's InMail inbox from LinkedIn (after a contract switch, or when threads seem missing), then read. Slower (~25s). | You write it. |
Call it
curl -X POST https://api.heyreagent.com/v1/actions/list_inmail \
-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_inmail", {
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_inmail",
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_inmail |
| 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 | |
inmail | |
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
- With profileUrl it returns every conversation with that person, InMail or not, each tagged by inbox.
- Sales Navigator shows only the active contract's inbox. After switch_sales_navigator_contract, or when conversations seem missing, pass syncInbox true.
- canReply false means LinkedIn will not accept a reply in that conversation.
- Reply with send_chat_message and the row's chatId. It does not check the Sales Navigator contract: when sentFromContract is not the account's active contract (list_sales_navigator_contracts), switch to it first with switch_sales_navigator_contract, or the reply may not reach the conversation.
In Claude or ChatGPT
Once connected, ask in your own words. The assistant sees this action as a tool with the same name, list_inmail, and the same inputs.