Messaging

List messages in a chat

Returns a paginated list of messages for the specified chat. Supports filtering by sender (user_id), date range, and pagination cursor.

get/v1/{account_id}/chats/{chat_id}/messages

Request

  • Base URL: https://api.curviate.com
  • URL: https://api.curviate.com/v1/{account_id}/chats/{chat_id}/messages
  • Auth: HTTP bearer

Path parameters

account_idstring required

The account ID (acc_...) that owns the chat.

chat_idstring required

The unique identifier of the chat to list messages from.

Query parameters

mode'live' | 'auto' | 'refill' | 'cache_only'

How willing this read is to reach LinkedIn: auto (default), live, refill, or cache_only. Details: /reference/getting-started/cache.

max_ageinteger

Maximum age in seconds of a stored copy this read accepts; overrides mode in both directions. Not with cache_only. Details: /reference/getting-started/cache.

user_idstring

Optional filter: only return messages from this sender ID.

beforestring

ISO-8601 UTC datetime (exclusive upper bound). Only entries before this time are returned.

afterstring

ISO-8601 UTC datetime (exclusive lower bound). Only entries after this time are returned.

limitinteger

Number of items to return per page (1-25, default 20).

cursorstring

An opaque cursor for pagination. Pass the cursor from the preceding response to fetch the next page.

expandstring

Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values.

Response

A page of messages from the chat, newest first. Full message text is returned verbatim (content pass-through). source says whether the page came from Curviate's stored copy or from a fresh fetch, and observed_at says when the chat was last read end to end; a stored answer also carries an Age header and always sets cursor to null, because a page is served from the store only when it is the whole answer. Narrowing the request with user_id, before, after or a cursor always fetches.

object'message_list'

Response type discriminator.

cursorstring nullable

Next-page cursor; follow until items is empty.

observed_atstring required

ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it.

source'store' | 'live' required

Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.

withdrawnboolean required

Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case.

withdrawn_atstring

ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true.

Example response

{
  "safety_warning": {
    "row": "profile_views",
    "reset_at": "2026-09-05T00:00:00.000Z",
    "hint": {
      "parameter": "profile_views.ceiling",
      "message": "This account is at its ceiling for profile_views. This action went through because profile_views.posture is warn, and it counted: 101 of 100 this window. Raise profile_views.ceiling, or wait for the window to reset at 2026-09-05T00:00:00.000Z."
    },
    "reason": "ceiling",
    "blocked": false
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.