Docs / Messages
list_chats
List your conversations, newest first.
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 |
|---|---|---|
unreadoptional | True or false. true: only unread conversations. false: only read ones. Omit for both. | You write it. |
beforeoptional | A date and time, like 2026-10-01T00:00:00.000Z. Only items created before this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z). | You write it. |
afteroptional | A date and time, like 2026-10-01T00:00:00.000Z. Only items created after this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z). | You write it. |
limitoptional | A number, 1 to 250. How many to return (1–250, default 50). | You write it. |
cursoroptional | A cursor. nextCursor from the previous call, to get the next page. Keep the other arguments the same. | The nextCursor from the last answer of list_chats. |
connectionIdoptional | A connection id. Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one. | Run list_linkedin_accounts and use accounts[].id from its answer.15 more places to get it
|
Call it
curl -X POST https://api.heyreagent.com/v1/actions/list_chats \
-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_chats", {
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_chats",
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_chats |
| 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:
returned | number |
nextCursor | A cursor. Other actions take it. |
chats[].id | A chat id. Other actions take it. |
chats[].accountType | WHATSAPP | LINKEDIN | SLACK | TWITTER | MESSENGER | INSTAGRAM | TELEGRAM |
chats[].providerId | string |
chats[].attendeeProviderId | A member id. Other actions take it. |
chats[].name | string or null |
chats[].type | 0 | 1 | 2 |
chats[].timestamp | string or null |
chats[].unreadCount | number |
chats[].archived | 0 | 1 |
chats[].mutedUntil | -1 | string or null |
chats[].readOnly | 0 | 1 | 2 |
chats[].disabledFeatures | reactions | reply[] |
chats[].subject | string |
chats[].organizationId | string |
chats[].mailboxId | string |
chats[].contentType | inmail | sponsored | linkedin_offer |
chats[].folder | INBOX | INBOX_LINKEDIN_CLASSIC | INBOX_LINKEDIN_RECRUITER | INBOX_LINKEDIN_SALES_NAVIGATOR | INBOX_LINKEDIN_ORGANIZATION | INBOX_INSTAGRAM_GENERAL | PENDING | OTHER | SPAM | ARCHIVED | HIDDEN | UNKNOWN | string[] |
chats[].pinned | 0 | 1 |
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
- A one-to-one conversation has no name: read who it is with from list_chat_participants.
- attendeeProviderId is optional: a conversation can come without it.
- One person has a different id in each LinkedIn product, and no published text says which one a Sales Navigator or Recruiter conversation carries. Treat these ids as member ids only for a conversation in the ordinary inbox (folder says which inbox it is in).
In Claude or ChatGPT
Once connected, ask in your own words. The assistant sees this action as a tool with the same name, list_chats, and the same inputs.