Messaging

Retrieve a chat

Retrieves a single chat by ID, including the most recent message. Returns 404 RESOURCE_NOT_FOUND if the chat does not exist or belongs to another account.

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

Request

  • Base URL: https://api.curviate.com
  • URL: https://api.curviate.com/v1/{account_id}/chats/{chat_id}
  • 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 retrieve.

Query parameters

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.

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.

Response

The chat's metadata and most-recent message. source says whether it came from Curviate's stored copy or from a fresh fetch, and observed_at says when it was seen; a stored answer also carries an Age header.

object'chat'

Response type discriminator.

idstring

Chat identifier.

account_idstring

Account id that owns this chat.

namestring nullable

Chat display name, or null.

type'1to1' | 'group' | 'channel'

Conversation type.

is_groupboolean
is_1to1boolean
is_channelboolean
is_pinnedboolean
is_readonlyboolean
is_archivedboolean

True if the chat is archived.

muted_untilboolean

True if notifications for this chat are muted.

unread_countnumber

Number of unread messages in this chat.

foldersstring[]

Folder labels assigned to this chat.

providerstring

The platform this chat originates from.

created_atstring

ISO-8601 UTC creation timestamp.

last_message_timestampstring

ISO-8601 UTC timestamp of the last message.

user_idstring

Identifier of the 1:1 counterpart.

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.