List chats
direct.lempile.com/api/v1/chatsThe account's conversations, newest activity first: the inbox and the archive (not spam). The newest 20 come from LinkedIn's inbox sync (kept a minute); further pages, before, after, unread or a limit over 20 walk the inbox and the archive by last activity (25 a LinkedIn call).
Authentication
X-API-KEY header·A Lempile Direct key, one per workspace, made in Lempile's dashboard.Query parameters
account_idstringrequiredThe account that reads: a Lempile LinkedIn account id (
GET /accountslists them).limitintegerItems per page: 1 to 250 (default 10).
Default10≥ 1 · ≤ 250cursorstringA cursor a previous page gave.
unreadbooleanOnly chats with unread messages.
DefaultfalsebeforestringOnly chats last active before this time (ISO 8601 UTC).
afterstringOnly chats last active after this time (ISO 8601 UTC).
account_typestringAnything but
LINKEDINanswers 400.One ofLINKEDIN
Responses
200OK
›
application/json
objectstringrequiredAlwaysChatListitemsarray of Chatrequired›Show fieldsHide fields
objectstringrequiredAlwaysChatidstringrequiredLinkedIn's own thread id (
2-…), URL-safe and unpadded.account_idstringrequiredaccount_typestringrequiredAlwaysLINKEDINprovider_idstringrequiredSame as
id.namestring | nullrequiredA group conversation's title.
typeintegerrequired0: one person. 1: a group.
One of01timestampstring | nullrequiredThe last activity (ISO 8601).
unread_countintegerrequiredarchivedintegerrequired1 when in LinkedIn's archive.
One of01muted_untilinteger | nullrequired-1 when muted, else
null.read_onlyintegerrequired1 when nobody can answer (sponsored messages).
One of01folderarray of stringrequiredIts box (
INBOX,ARCHIVED,OTHER,PENDING,SPAM) andINBOX_LINKEDIN_CLASSIC.pinnedintegerrequiredAlways0disabledFeaturesarray of stringattendee_provider_idstringThe other person's provider id, in a one-to-one chat.
content_typestringlinkedin_offer: a sponsored message LinkedIn labels "LinkedIn Offer";sponsored: any other ad;inmail: an InMail.One ofinmailsponsoredlinkedin_offerlastMessageone ofOnly on
GET /chats/{chat_id}.›Show fieldsHide fields
MessageMessageUnipile's
Message.›Show fieldsHide fields
objectstringrequiredAlwaysMessageidstringrequiredLinkedIn's own message id (
2-…), URL-safe and unpadded.provider_idstringrequiredSame as
id.account_idstringrequiredchat_idstringrequiredLinkedIn's own thread id (
2-…), URL-safe and unpadded.chat_provider_idstringrequiredSame as
chat_id.sender_idstringrequiredThe sender's provider id.
sender_attendee_idstringrequiredSame as
sender_id.sender_urnstringrequiredtextstring | nullrequiredattachmentsarray of MessageAttachmentrequired›Show fieldsHide fields
idstringrequiredtypestringrequiredOne ofimgfileaudiourlstring | nullLinkedIn's signed link to the file (a voice note: its AAC .m4a,
audio/mp4). It expires.unavailablebooleanrequiredsizeobject›Show fieldsHide fields
widthintegerrequiredheightintegerrequired
stickerbooleanfile_namestringfile_sizeintegermimetypestring | nullvoice_notebooleanaudioonly: always true (a LinkedIn voice note).durationintegeraudioonly: its length in milliseconds, as LinkedIn gives it.
timestampstringrequiredUTC time, ISO 8601 with milliseconds:
2026-10-28T21:15:03.123Z.is_senderintegerrequired1 when the account sent it.
One of01reactionsarray of objectrequiredThe account's own reactions only.
›Show fieldsHide fields
valuestringrequiredsender_idstringrequiredis_senderbooleanrequired
seenintegerrequiredAlways 0 (not read).
One of01seen_byobjectrequiredAlways
{}.hiddenintegerrequiredAlways 0.
One of01deletedintegerrequired1 when its sender took it back.
One of01deleted_forstringAlwayseveryoneeditedintegerrequired1 when edited.
One of01is_eventintegerrequired1 for a conversation event LinkedIn writes itself.
One of01deliveredintegerrequiredAlways 1.
One of01behaviornullrequiredoriginalstringrequiredAlwaysmessage_typestringrequiredAlwaysMESSAGEattendee_typestringrequiredOne ofMEMBERORGANIZATIONattendee_distanceintegerThe sender's distance: 1 to 3, 4 out of network.
One of1234subjectstringAn InMail's subject.
account_typestringOnly on
GET /messages/{message_id}.AlwaysLINKEDIN
Option 2null
unreadinteger1 when the chat has unread messages (Unipile's flag next to unread_count).
One of01subjectstringAn InMail's or a sponsored message's subject; the chat's name when it has no title.
cursorstring | nullrequiredThe next page's cursor, or
nullon the last page. Opaque: send it back ascursor.
400A required parameter missing (errors/missing_parameters), or one that isn't valid (errors/invalid_parameters, errors/invalid_url, errors/content_too_large).
›
errors/missing_parameters), or one that isn't valid (errors/invalid_parameters, errors/invalid_url, errors/content_too_large).application/json
titlestringrequiredA short title, e.g.
Too many requests.detailstringrequiredWhat happened, in plain words. Never an account's data.
typestringrequiredUnipile's error type:
errors/<kind>. Branch on this, not ondetail.statusintegerrequiredThe HTTP status again.
retry_afterintegerSeconds to wait before trying this account again. Only on 429; the
Retry-Afterheader carries the same value.
401errors/missing_credentials: the X-API-KEY header is missing, wrong or revoked. errors/disconnected_account: LinkedIn signed the account out (or asks it for a security check); reconnect it.
›
errors/missing_credentials: the X-API-KEY header is missing, wrong or revoked. errors/disconnected_account: LinkedIn signed the account out (or asks it for a security check); reconnect it.application/json
titlestringrequiredA short title, e.g.
Too many requests.detailstringrequiredWhat happened, in plain words. Never an account's data.
typestringrequiredUnipile's error type:
errors/<kind>. Branch on this, not ondetail.statusintegerrequiredThe HTTP status again.
retry_afterintegerSeconds to wait before trying this account again. Only on 429; the
Retry-Afterheader carries the same value.
404errors/resource_not_found: an unknown or removed account, an account of another workspace (answered exactly the same), or nothing on LinkedIn with this id.
›
errors/resource_not_found: an unknown or removed account, an account of another workspace (answered exactly the same), or nothing on LinkedIn with this id.application/json
titlestringrequiredA short title, e.g.
Too many requests.detailstringrequiredWhat happened, in plain words. Never an account's data.
typestringrequiredUnipile's error type:
errors/<kind>. Branch on this, not ondetail.statusintegerrequiredThe HTTP status again.
retry_afterintegerSeconds to wait before trying this account again. Only on 429; the
Retry-Afterheader carries the same value.
429errors/too_many_requests: LinkedIn asked the account to slow down (it rests 15 minutes), its daily calls or writes are used up, or it's busy with other calls. Wait retry_after seconds.
›
errors/too_many_requests: LinkedIn asked the account to slow down (it rests 15 minutes), its daily calls or writes are used up, or it's busy with other calls. Wait retry_after seconds.application/json
titlestringrequiredA short title, e.g.
Too many requests.detailstringrequiredWhat happened, in plain words. Never an account's data.
typestringrequiredUnipile's error type:
errors/<kind>. Branch on this, not ondetail.statusintegerrequiredThe HTTP status again.
retry_afterintegerSeconds to wait before trying this account again. Only on 429; the
Retry-Afterheader carries the same value.
500errors/provider_error: LinkedIn answered something Direct couldn't read (nothing was written). errors/unexpected_error: Direct failed.
›
errors/provider_error: LinkedIn answered something Direct couldn't read (nothing was written). errors/unexpected_error: Direct failed.application/json
titlestringrequiredA short title, e.g.
Too many requests.detailstringrequiredWhat happened, in plain words. Never an account's data.
typestringrequiredUnipile's error type:
errors/<kind>. Branch on this, not ondetail.statusintegerrequiredThe HTTP status again.
retry_afterintegerSeconds to wait before trying this account again. Only on 429; the
Retry-Afterheader carries the same value.
503errors/network_down: the account's proxy or browser server didn't answer. Nothing was sent.
›
errors/network_down: the account's proxy or browser server didn't answer. Nothing was sent.application/json
titlestringrequiredA short title, e.g.
Too many requests.detailstringrequiredWhat happened, in plain words. Never an account's data.
typestringrequiredUnipile's error type:
errors/<kind>. Branch on this, not ondetail.statusintegerrequiredThe HTTP status again.
retry_afterintegerSeconds to wait before trying this account again. Only on 429; the
Retry-Afterheader carries the same value.
504errors/request_timeout: LinkedIn didn't answer in time. On a write: an unknown outcome (it may have been sent); it's never retried and its Idempotency-Key never writes again.
›
errors/request_timeout: LinkedIn didn't answer in time. On a write: an unknown outcome (it may have been sent); it's never retried and its Idempotency-Key never writes again.application/json
titlestringrequiredA short title, e.g.
Too many requests.detailstringrequiredWhat happened, in plain words. Never an account's data.
typestringrequiredUnipile's error type:
errors/<kind>. Branch on this, not ondetail.statusintegerrequiredThe HTTP status again.
retry_afterintegerSeconds to wait before trying this account again. Only on 429; the
Retry-Afterheader carries the same value.
Was this page helpful?