Docs / Messages

list_chat_messages

List the messages of one conversation, newest first.

This action only reads. It changes nothing, so it is safe to try.

What you give it

InputWhat it isWhere to get it
chatId
needed
A chat id. The conversation id (from list_chats).Run list_chats and use chats[].id from its answer.
12 more places to get it
senderId
optional
A attendee id. Only messages from this participant id. The published definition calls this "the id of the sender" without saying which id; "participant id" is this tool's own wording.Run list_chat_attendees and use attendees[].id from its answer.
6 more places to get it
before
optional
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.
after
optional
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.
limit
optional
A number, 1 to 250. How many to return (1–250, default 50).You write it.
cursor
optional
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_chat_messages.
connectionId
optional
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_chat_messages \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{"chatId":"PASTE_CHAT_ID_HERE"}'
The same call in JavaScript
const response = await fetch("https://api.heyreagent.com/v1/actions/list_chat_messages", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_KEY",
    "content-type": "application/json",
  },
  body: JSON.stringify({
    "chatId": "PASTE_CHAT_ID_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/list_chat_messages",
    headers={"Authorization": "Bearer YOUR_KEY"},
    json={
        "chatId": "PASTE_CHAT_ID_HERE",
    },
)
print(response.json())
The same call in n8n

Add an HTTP Request node and fill it in like this:

MethodPOST
URLhttps://api.heyreagent.com/v1/actions/list_chat_messages
Send HeadersOn. Name Authorization, Value Bearer YOUR_KEY
Send BodyOn. Body Content Type JSON, Specify Body Using JSON, then paste the body below
{
  "chatId": "PASTE_CHAT_ID_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:

returnednumber
nextCursorA cursor. Other actions take it.
messages[].messageIdstring
messages[].providerIdstring
messages[].senderIdA member id. Other actions take it.
messages[].textstring or null
messages[].attachments[].idA attachment id. Other actions take it.
messages[].idA message id. Other actions take it.
messages[].chatIdA chat id. Other actions take it.
messages[].chatProviderIdstring
messages[].timestampstring
messages[].isSender0 | 1
messages[].isForwardedboolean
messages[].isViewOnceboolean
messages[].seen0 | 1
messages[].hidden0 | 1
messages[].deleted0 | 1
messages[].edited0 | 1
messages[].isEvent0 | 1
messages[].delivered0 | 1
messages[].behavior0 or null
messages[].eventType0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14
messages[].originalstring
messages[].repliesnumber
messages[].replyBystring[]
messages[].parentstring
messages[].senderAttendeeIdA attendee id. Other actions take it.
messages[].subjectstring or null
messages[].messageTypeMESSAGE | INVITATION | INMAIL | INMAIL_DECLINE | INMAIL_REPLY | INMAIL_ACCEPT | STORY_MENTION | STORY_REPLY | CONTACT
messages[].attendeeTypeMEMBER | ORGANIZATION | OTHER
messages[].attendeeDistance1 | 2 | 3 | 4 | -1
messages[].senderUrnstring

A field that does not apply to an answer is left out, or is null. There are 126 more fields nested inside these.

When it did not work, the answer is { "ok": false, "error": "…", "message": "…" }. What each error means.

Good to know

In Claude or ChatGPT

Once connected, ask in your own words. The assistant sees this action as a tool with the same name, list_chat_messages, and the same inputs.