Unipile
App · Messaging · 90 actions
Send and read LinkedIn, WhatsApp, Instagram and Telegram messages, run LinkedIn outreach and search, publish posts, and manage email and calendars, all through one Unipile connection.
Actions
| Action | What it does |
|---|---|
| Cancel a calendar event | Cancel an event, keeping it on the calendar as cancelled and telling the guests. |
| Comment on a post | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Create a calendar | Create a new calendar on the account. |
| Create a calendar event | Google and Microsoft calendars only. |
| Create a draft | Works with any mailbox: Gmail, Outlook or IMAP. |
| Create a mail folder | Create a folder in the mailbox. |
| Delete a calendar | Delete a calendar and every event in it. |
| Delete a calendar event | Google and Microsoft calendars only. |
| Delete a comment | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Delete a draft | Works with any mailbox: Gmail, Outlook or IMAP. |
| Delete a mail folder | Works with any mailbox: Gmail, Outlook or IMAP. |
| Delete a message | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Delete a post | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Download an email attachment | Works with any mailbox: Gmail, Outlook or IMAP. |
| Edit a comment | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Edit a message | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Edit a post | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Endorse a skill | Endorse a skill on someone's LinkedIn profile. |
| Find the chat with a person | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Follow a person | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Forward a message | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Get a calendar | Retrieve one calendar. |
| Get a calendar event | Google and Microsoft calendars only. |
| Get a chat | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Get a draft | Works with any mailbox: Gmail, Outlook or IMAP. |
| Get a linked account | Any linked account. |
| Get a mail folder | Works with any mailbox: Gmail, Outlook or IMAP. |
| Get a message | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Get a post | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Get a profile | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Get an email | Works with any mailbox: Gmail, Outlook or IMAP. |
| Get an email thread | Works with any mailbox: Gmail, Outlook or IMAP. |
| List a person's comments | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List a person's posts | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List a person's reactions | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List calendar events | List events in a calendar within a time window. |
| List calendars | List the calendars on a connected Google or Microsoft account. |
| List chat messages | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List comment reactions | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List comment replies | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List connections | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List drafts | List saved drafts in a mailbox. |
| List emails | List emails in a mailbox, with filters for sender, recipient, folder, unread and date. |
| List emails in a folder | Works with any mailbox: Gmail, Outlook or IMAP. |
| List followers | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List inbox chats | List conversations in one LinkedIn inbox. |
| List linked accounts | Any linked account. |
| List LinkedIn inboxes | List the inboxes available to a LinkedIn account: Classic Primary, Archived, Spam, Jobs, InMail and Starred, plus Sales Navigator and Recruiter inboxes where the subscription allows. |
| List mail folders | List the mailbox's folders with their total and unread counts. |
| List message reactions | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List pending invitations | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List post comments | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List post reactions | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| List sender addresses | List the addresses this mailbox can send as, including aliases. |
| List who someone follows | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Look up search parameter ids | Turn text into the numeric ids LinkedIn's structured search requires. |
| Mark a message read | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Mark an email read | Works with any mailbox: Gmail, Outlook or IMAP. |
| Mark an email unread | Works with any mailbox: Gmail, Outlook or IMAP. |
| Move an email | Works with any mailbox: Gmail, Outlook or IMAP. |
| Publish a post | Publish a post to LinkedIn or Instagram. |
| React to a comment | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| React to a message | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| React to a post | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Remove a comment reaction | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Remove a message reaction | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Remove a post reaction | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Rename a mail folder | Works with any mailbox: Gmail, Outlook or IMAP. |
| Reply to a comment | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Report a profile visit | LinkedIn only. |
| Restore a cancelled event | Google and Microsoft calendars only. |
| Search LinkedIn companies | Search LinkedIn for companies. |
| Search LinkedIn from a URL | Run a LinkedIn search by pasting a search URL from your browser. |
| Search LinkedIn jobs | Search LinkedIn job postings. |
| Search LinkedIn people | Search LinkedIn for people. |
| Search LinkedIn posts | Search LinkedIn posts by keyword. |
| Send a connection request | LinkedIn only. |
| Send a draft | Works with any mailbox: Gmail, Outlook or IMAP. |
| Send a message or reply | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Send or reply to an email | Send an email from a connected mailbox. |
| Set presence | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Set typing indicator | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Start a chat from an inbox | Start a conversation from a specific LinkedIn inbox and send the first message. |
| Trash an email | Works with any mailbox: Gmail, Outlook or IMAP. |
| Unfollow a person | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Update a calendar | Rename or re-describe a calendar. |
| Update a calendar event | Google and Microsoft calendars only. |
| Update a chat | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
| Update a draft | Works with any mailbox: Gmail, Outlook or IMAP. |
| Update your profile | Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. |
Cancel a calendar event
Cancel an event, keeping it on the calendar as cancelled and telling the guests.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
- Event
event_idtextRequired - The event's id, from 'List calendar events'.
- Message
commenttext - A note to include with the cancellation.
Outputs
cancelledtrue/false- True after a cancel, false after a restore.
event_idtext- The event acted on.
Example output
{
"cancelled": true,
"event_id": "ev_5Tg"
}Comment on a post
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Add a comment to a post. 'Comment as' comments from a company page you administer. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Comment
texttextRequired - What to say.
- Comment as company
comment_astext - A company page id to comment as, instead of your own profile.
- Attachments
attachmentslist - Files to send, up to 15 MB each. Upload them here, or reference a document produced by an earlier step.
Outputs
authorobject- Who wrote it.
created_attext- When it was posted.
idtext- The comment id.
reactions_counternumber- Reactions on the comment.
reply_counternumber- Replies to the comment.
texttext- The comment text.
Example output
{
"id": "cmt_2Bq",
"text": "Congratulations!"
}Create a calendar
Create a new calendar on the account.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Name
nametextRequired - What to call the calendar.
- Description
descriptiontext - What the calendar is for.
- Timezone
timezonetext - IANA timezone, e.g. Europe/London.
Outputs
descriptiontext- Calendar description.
idtext- The calendar id.
is_defaulttrue/false- Whether this is the account's default calendar.
is_owned_by_usertrue/false- Whether the account owns it, rather than subscribing.
is_read_onlytrue/false- True when events cannot be written here.
nametext- Calendar name.
timezonetext- The calendar's IANA timezone.
Example output
{
"id": "cal_2Lm",
"name": "Interviews"
}Create a calendar event
Google and Microsoft calendars only. Create an event, optionally inviting people and adding a video-conference link.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
- Title
titletextRequired - What the event is called.
- Start
startdate and timeRequired - When it starts. A date and time makes a normal event; a date on its own (2026-09-22) makes an all-day one.
- End
enddate and timeRequired - When it ends. Match the shape of the start: a date and time, or a date for an all-day event.
- Description
bodytext - The event's description.
- Location
locationtext - Where it takes place.
- Guests
attendeeslist - Email addresses to invite.
- Timezone
timezonetext - IANA timezone for the times above.
- Visibility
visibilitytext - Whether the event is public or private.One of:
public,private. - Shows as
transparencytext - Whether the time shows as busy or free.One of:
opaque(Busy),transparent(Free). - Notify guests
notifytext - Who gets an invitation email.One of:
all(Notify everyone),externalOnly(Notify external guests only),none(Notify no one). - Add video link
add_conferencetrue/false - Create a Meet or Teams link for the event.
Outputs
attendeeslist- Invitees and their responses.
bodytext- Event description.
endtext- End, ISO 8601.
idtext- The event id.
is_cancelledtrue/false- Whether it has been cancelled.
locationtext- Where it takes place.
starttext- Start, ISO 8601.
titletext- Event title.
Example output
{
"end": "2026-09-23T11:00:00.000Z",
"id": "ev_5Tg",
"start": "2026-09-23T10:00:00.000Z",
"title": "Design review"
}Create a draft
Works with any mailbox: Gmail, Outlook or IMAP. Save an email as a draft without sending it. Useful for a human-in-the-loop flow: the workflow writes the email, a person reviews it in their mailbox and sends it.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- To
tolistRequired - Recipient addresses.
- Subject
subjecttext - Subject line.
- Body
bodytext - Plain-text body.
- HTML body
htmltext - HTML body.
- Cc
cclist - Cc addresses.
- Bcc
bcclist - Bcc addresses.
- Attachments
attachmentslist - Files to send, up to 15 MB each. Upload them here, or reference a document produced by an earlier step.
Outputs
bodytext- The draft body.
idtext- The draft id.
subjecttext- Subject line.
tolist- To recipients.
Example output
{
"id": "dr_6Vb",
"subject": "Draft reply"
}Create a mail folder
Create a folder in the mailbox.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Name
nametextRequired - What to call the folder.
Outputs
idtext- The folder id.
is_systemtrue/false- True for built-in folders like Inbox and Sent.
nametext- Folder name as shown in the mailbox.
total_countnumber- Emails in the folder.
unread_countnumber- Unread emails in the folder.
Example output
{
"id": "Label_42",
"is_system": false,
"name": "Invoices"
}Delete a calendar
Delete a calendar and every event in it. This cannot be undone.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
Outputs
deletedtrue/false- True when the delete succeeded.
idtext- The id of what was deleted.
Example output
{
"deleted": true,
"id": "cal_2Lm"
}Delete a calendar event
Google and Microsoft calendars only. Delete an event outright. Use 'Cancel a calendar event' instead if the guests should be told and the event should stay visible as cancelled.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
- Event
event_idtextRequired - The event's id, from 'List calendar events'.
Outputs
deletedtrue/false- True when the delete succeeded.
idtext- The id of what was deleted.
Example output
{
"deleted": true,
"id": "ev_5Tg"
}Delete a comment
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Delete a comment you wrote. This cannot be undone.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Comment
comment_idtextRequired - The comment's id, from 'List post comments'.
Outputs
deletedtrue/false- True when the delete succeeded.
idtext- The id of what was deleted.
Example output
{
"deleted": true,
"id": "cmt_2Bq"
}Delete a draft
Works with any mailbox: Gmail, Outlook or IMAP. Delete a saved draft.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Draft
draft_idtextRequired - The draft's id, from 'List drafts'.
Outputs
deletedtrue/false- True when the delete succeeded.
idtext- The id of what was deleted.
Example output
{
"deleted": true,
"id": "dr_6Vb"
}Delete a mail folder
Works with any mailbox: Gmail, Outlook or IMAP. Delete a folder. The emails inside it are not deleted; they stay in the mailbox.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Folder
folder_idtextRequired - Which mail folder. Pick it from the list, or paste an id.
Outputs
deletedtrue/false- True when the delete succeeded.
idtext- The id of what was deleted.
Example output
{
"deleted": true,
"id": "Label_42"
}Delete a message
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Delete a message you sent. Supported on WhatsApp and LinkedIn only, and on LinkedIn only within 60 minutes of sending.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
message_idtextRequired - The message's id, from 'List chat messages'.
Outputs
deletedtrue/false- True when the delete succeeded.
idtext- The id of what was deleted.
Example output
{
"deleted": true,
"id": "msg_1aZ"
}Delete a post
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Delete a post you published. This cannot be undone.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
Outputs
deletedtrue/false- True when the delete succeeded.
idtext- The id of what was deleted.
Example output
{
"deleted": true,
"id": "post_7Kd"
}Download an email attachment
Works with any mailbox: Gmail, Outlook or IMAP. Download a file attached to an email. Comes back base64-encoded so it can feed another step's file input.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Email
email_idtextRequired - The email's id, from 'List emails'.
- Attachment
attachment_idtextRequired - The attachment's id, from the email's 'attachments' list.
Outputs
contenttext- The file's bytes, base64-encoded so it can be passed to another step's file input.
idtext- The attachment id.
mimetypetext- Media type reported by the provider.
sizenumber- Size in bytes.
Example output
{
"content": "JVBERi0xLjQK\u2026",
"id": "att_1Qw",
"mimetype": "application/pdf",
"size": 90210
}Edit a comment
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Edit a comment you wrote.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Comment
comment_idtextRequired - The comment's id, from 'List post comments'.
- New text
texttextRequired - What the comment should say instead.
Outputs
authorobject- Who wrote it.
created_attext- When it was posted.
idtext- The comment id.
reactions_counternumber- Reactions on the comment.
reply_counternumber- Replies to the comment.
texttext- The comment text.
Example output
{
"id": "cmt_2Bq",
"text": "Congratulations, both of you!"
}Edit a message
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Edit a message you sent. Providers put a short window on this (WhatsApp around 15 minutes, LinkedIn Classic 60), after which the edit is refused.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
message_idtextRequired - The message's id, from 'List chat messages'.
- New text
texttextRequired - What the message should say instead.
Outputs
attachmentslist- Files carried by the message.
chat_idtext- The chat it belongs to.
idtext- The message id.
is_seentrue/false- Whether the other participants have read it.
is_sendertrue/false- True when the linked account sent it.
sender_idtext- Provider id of whoever sent it.
texttext- The message body as plain text.
timestamptext- When it was sent, ISO 8601.
Example output
{
"id": "msg_1aZ",
"text": "Thanks \u2014 Tuesday works better."
}Edit a post
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Edit a post you published.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- New text
texttextRequired - What the post should say instead.
Outputs
authorobject- Who published it.
comments_counternumber- Total comments.
created_attext- When it was published.
idtext- The post id.
reactions_counternumber- Total reactions. Null when the provider hides the count.
reposts_counternumber- Total reshares.
share_urltext- Link to the post.
texttext- The post's text.
Example output
{
"id": "post_7Kd",
"text": "We are still hiring."
}Endorse a skill
Endorse a skill on someone's LinkedIn profile. Identify the skill by its endorsement id rather than its name: run 'Get a profile' on the person with 'Extra sections' set to linkedin_skills first, and chain the id from there. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Person
member_idtextRequired - Whose skill to endorse. Accepts an id, a handle, or a pasted profile URL.
- Skill
skill_idtextRequired - The skill's endorsement id, from 'Get a profile' with 'Extra sections' set to linkedin_skills. The skill's name will not work here.
Outputs
endorsedtrue/false- True when the endorsement went through.
member_idtext- Who was endorsed.
skill_idtext- The endorsed skill's id on that profile.
Example output
{
"endorsed": true,
"member_id": "ACoAAAcDMMQ",
"skill_id": "ACoAAAcDMMQ:COBOL"
}Find the chat with a person
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Find the existing 1:1 conversation with someone, if there is one. More direct than listing chats and filtering, and unlike listing an inbox, it finds the conversation wherever it sits, which matters because an archived chat stops appearing in Classic Primary. Give the provider id; a handle is resolved for you at the cost of one extra profile read.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtextRequired - Who to act on. Accepts a provider id, a handle, or a pasted profile URL: all three work, so there is no lookup step.
Outputs
existstrue/false- False when this person has no conversation yet.
has_historytrue/false- Whether the conversation has messages in it.
idtext- The conversation's id, or null when there is none yet.
inbox_idtext- Which inbox it is in — the authoritative answer, which an inbox listing does not always agree with.
Example output
{
"exists": true,
"has_history": true,
"id": "chat_8vQ2",
"inbox_id": "CLASSIC_PRIMARY"
}Follow a person
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Follow someone without sending a connection request. A lighter touch than an invitation and not subject to the invitation limits, though it still counts as an action on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtextRequired - Who to act on. Accepts a provider id, a handle, or a pasted profile URL: all three work, so there is no lookup step.
Outputs
followingtrue/false- True after a follow, false after an unfollow.
user_idtext- Who was followed.
Example output
{
"following": true,
"user_id": "ACoAAAcDMMQ"
}Forward a message
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Forward a message into another conversation.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
message_idtextRequired - The message's id, from 'List chat messages'.
- Forward to chat
to_chat_idtextRequired - The id of the conversation to forward it into.
Outputs
chat_idtext- The chat it was forwarded into.
message_idtext- The id of the forwarded copy.
Example output
{
"forwarded": true
}Get a calendar
Retrieve one calendar.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
Outputs
descriptiontext- Calendar description.
idtext- The calendar id.
is_defaulttrue/false- Whether this is the account's default calendar.
is_owned_by_usertrue/false- Whether the account owns it, rather than subscribing.
is_read_onlytrue/false- True when events cannot be written here.
nametext- Calendar name.
timezonetext- The calendar's IANA timezone.
Example output
{
"id": "primary",
"is_default": true,
"is_read_only": false,
"name": "Ada Lovelace"
}Get a calendar event
Google and Microsoft calendars only. Retrieve one event, including its attendees and their responses.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
- Event
event_idtextRequired - The event's id, from 'List calendar events'.
Outputs
attendeeslist- Invitees and their responses.
bodytext- Event description.
endtext- End, ISO 8601.
idtext- The event id.
is_cancelledtrue/false- Whether it has been cancelled.
locationtext- Where it takes place.
starttext- Start, ISO 8601.
titletext- Event title.
Example output
{
"id": "ev_5Tg",
"start": "2026-09-23T10:00:00.000Z",
"title": "Design review"
}Get a chat
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Retrieve one conversation, including its participants and unread count.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
Outputs
idtext- The chat id, used by every message action.
is_1to1true/false- True for a direct conversation.
is_archivedtrue/false- Whether the owner archived it.
is_grouptrue/false- True for a group conversation.
last_message_timestamptext- When the most recent message landed.
nametext- Group name, or the other person's name in a 1:1.
participants_countnumber- How many people are in it.
providertext- Which network the chat is on.
typetext- The chat's kind, as the provider classifies it.
unread_countnumber- Unread messages in this chat.
Example output
{
"id": "chat_8vQ2",
"is_1to1": true,
"name": "Grace Hopper",
"participants_count": 2,
"provider": "linkedin",
"unread_count": 2
}Get a draft
Works with any mailbox: Gmail, Outlook or IMAP. Retrieve one saved draft.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Draft
draft_idtextRequired - The draft's id, from 'List drafts'.
Outputs
bodytext- The draft body.
idtext- The draft id.
subjecttext- Subject line.
tolist- To recipients.
Example output
{
"body": "Thanks \u2014 will confirm.",
"id": "dr_6Vb",
"subject": "Draft reply"
}Get a linked account
Any linked account. Retrieve one linked account and its current connection status. A status of 'disconnected' or 'errored' means its owner must reconnect it in Unipile before any other action will work.
Inputs
- Account
account_idtextRequired - Which linked Unipile account to act as. Accounts are linked in your Unipile dashboard, not here: use the refresh button if one you just connected is missing.
Outputs
idtext- Unipile's id for the linked account.
nametext- The account's display name.
needs_reconnecttrue/false- True when the owner must reconnect it in Unipile.
providertext- Which network it is on.
statustext- Connection state.
Example output
{
"id": "acc_01HZX9",
"name": "Ada Lovelace",
"needs_reconnect": false,
"provider": "linkedin",
"status": "running"
}Get a mail folder
Works with any mailbox: Gmail, Outlook or IMAP. Retrieve one folder and its counts.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Folder
folder_idtextRequired - Which mail folder. Pick it from the list, or paste an id.
Outputs
idtext- The folder id.
is_systemtrue/false- True for built-in folders like Inbox and Sent.
nametext- Folder name as shown in the mailbox.
total_countnumber- Emails in the folder.
unread_countnumber- Unread emails in the folder.
Example output
{
"id": "INBOX",
"name": "Inbox",
"total_count": 1284,
"unread_count": 12
}Get a message
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Retrieve one message, including its attachments' ids.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
message_idtextRequired - The message's id, from 'List chat messages'.
Outputs
attachmentslist- Files carried by the message.
chat_idtext- The chat it belongs to.
idtext- The message id.
is_seentrue/false- Whether the other participants have read it.
is_sendertrue/false- True when the linked account sent it.
sender_idtext- Provider id of whoever sent it.
texttext- The message body as plain text.
timestamptext- When it was sent, ISO 8601.
Example output
{
"chat_id": "chat_8vQ2",
"id": "msg_1aZ",
"is_sender": false,
"text": "Thanks \u2014 that works for me.",
"timestamp": "2026-09-21T16:04:11.000Z"
}Get a post
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Retrieve one post with its reaction and comment counts. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
Outputs
authorobject- Who published it.
comments_counternumber- Total comments.
created_attext- When it was published.
idtext- The post id.
reactions_counternumber- Total reactions. Null when the provider hides the count.
reposts_counternumber- Total reshares.
share_urltext- Link to the post.
texttext- The post's text.
Example output
{
"comment_counter": 7,
"id": "post_7Kd",
"reaction_counter": 42,
"text": "We are hiring."
}Get a profile
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Retrieve someone's profile. Use 'me' to read the linked account's own. Anyone else counts as a profile view against the account's daily allowance (Unipile's guidance is about 100 a day on LinkedIn), and on LinkedIn the visit is visible to that person unless their settings say otherwise.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtext - Whose data to read. Use 'me' for the linked account's own. Otherwise a provider id, a handle, or a pasted profile URL.Default:
me. - Extra sections
with_sectionslist - Extra profile sections to expand, such as experience or education. Leave empty for the basics.
- Variant
varianttext - Provider-specific profile variant, where one applies.
Outputs
descriptiontext- Headline or one-line summary.
display_nametext- Full name as the provider renders it.
first_nametext- Given name.
followers_countnumber- Follower count.
handletext- Same as 'public_identifier', lifted for chained steps.
idtext- The person's id on the provider.
is_premiumtrue/false- Whether they hold a paid plan.
is_verifiedtrue/false- Whether the provider verified them.
last_nametext- Family name.
locationtext- Free-text location.
profile_urltext- Link to their profile.
providertext- Which network this came from.
provider_idtext- Same as 'id', lifted for chained steps.
public_identifiertext- The provider's handle, e.g. 'satyanadella'.
public_picture_urltext- Profile picture URL, when public.
relations_countnumber- Connection count.
specificsobject- Provider-specific profile data. On LinkedIn this is where the two fields other actions need live: 'notify_visit_token' for 'Report a profile visit', and 'skills' — whose entries carry the 'endorsement_id' that 'Endorse a skill' takes, an ordinal into this list that means nothing without the read it came from. Ask for skills with the 'linkedin_skills' section.
Example output
{
"description": "Rear Admiral, US Navy (ret.)",
"display_name": "Grace Hopper",
"handle": "gracehopper",
"id": "ACoAAAcDMMQ",
"provider": "linkedin",
"provider_id": "ACoAAAcDMMQ",
"public_identifier": "gracehopper",
"relations_count": 812
}Get an email
Works with any mailbox: Gmail, Outlook or IMAP. Retrieve one email, with its body and attachment ids.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Email
email_idtextRequired - The email's id, from 'List emails'.
- Metadata only
meta_onlytrue/false - Leave the body out.
Outputs
attachmentslist- Files carried by the email.
bcclist- Bcc recipients.
bodytext- Full body. Absent when the call asked for metadata only.
cclist- Cc recipients.
datetext- When it was sent, ISO 8601.
folderslist- Folders it sits in.
fromlist- Sender.
idtext- Unipile's id for the email.
is_unreadtrue/false- Whether it is still unread.
message_idtext- The RFC 822 Message-ID header.
snippettext- Short preview of the body.
subjecttext- Subject line.
thread_idtext- Groups the email with its replies.
tolist- To recipients.
Example output
{
"body": "Please find attached.",
"id": "em_4Rt",
"is_unread": true,
"subject": "Invoice 1042"
}Get an email thread
Works with any mailbox: Gmail, Outlook or IMAP. Retrieve a whole conversation: an email and all its replies.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Thread
thread_idtextRequired - The thread id, from any email's 'thread_id'.
- Metadata only
meta_onlytrue/false - Leave the bodies out.
Outputs
emailslist- The emails in the thread.
idtext- The thread id.
Example output
{
"data": [
{
"id": "em_4Rt",
"subject": "Invoice 1042"
}
]
}List a person's comments
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List comments a person has written. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtext - Whose data to read. Use 'me' for the linked account's own. Otherwise a provider id, a handle, or a pasted profile URL.Default:
me. - Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The comments on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many there are.
Example output
{
"items": [
{
"id": "cmt_2Bq",
"text": "Congratulations!"
}
],
"next_cursor": null,
"total_count": 1
}List a person's posts
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List posts written by a person or a company. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtext - Whose data to read. Use 'me' for the linked account's own. Otherwise a provider id, a handle, or a pasted profile URL.Default:
me. - Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The posts on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many the provider says exist.
Example output
{
"items": [
{
"id": "post_7Kd",
"reaction_counter": 42,
"text": "We are hiring."
}
],
"next_cursor": null,
"total_count": 1
}List a person's reactions
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List the posts and comments a person has reacted to. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtext - Whose data to read. Use 'me' for the linked account's own. Otherwise a provider id, a handle, or a pasted profile URL.Default:
me. - Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The reactions on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many reactions there are.
Example output
{
"items": [
{
"value": "like"
}
],
"next_cursor": null,
"total_count": 1
}List calendar events
List events in a calendar within a time window.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
- From
startdate and time - Start of the window.
- To
enddate and time - End of the window.
- Title contains
titletext - Only events whose title matches.
- Location contains
locationtext - Only events at a matching location.
- Cancelled only
is_cancelledtrue/false - Only cancelled events.
- Expand recurring
expand_recurringtrue/false - Return each occurrence of a recurring event rather than the series.
- Changed since
updated_afterdate and time - Only events modified after this moment. Use this to poll for changes.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The events in the window.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many events there are.
Example output
{
"items": [
{
"end": "2026-09-23T11:00:00.000Z",
"id": "ev_5Tg",
"start": "2026-09-23T10:00:00.000Z",
"title": "Design review"
}
],
"next_cursor": null,
"total_count": 1
}List calendars
List the calendars on a connected Google or Microsoft account.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The calendars.
total_countnumber- How many calendars there are.
Example output
{
"items": [
{
"id": "primary",
"is_default": true,
"is_read_only": false,
"name": "Ada Lovelace",
"timezone": "Europe/London"
}
],
"total_count": 1
}List chat messages
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List the messages in a conversation, newest first. Served from Unipile rather than the provider, so this is cheap to call.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- From person
person_idtext - Only messages from this person. Accepts an id, a handle or a profile URL.
- Sent after
afterdate and time - Only messages sent after this moment. Use this to poll for new messages.
- Sent before
beforedate and time - Only messages sent before this moment.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
has_moretrue/false- Whether another page exists.
itemslist- The messages on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many the provider says exist.
Example output
{
"has_more": false,
"items": [
{
"attachments": [],
"chat_id": "chat_8vQ2",
"id": "msg_1aZ",
"is_sender": false,
"seen": true,
"sender_id": "ACoAAAcDMMQ",
"text": "Thanks \u2014 that works for me.",
"timestamp": "2026-09-21T16:04:11.000Z"
}
],
"next_cursor": null,
"total_count": 1
}List comment reactions
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List who reacted to a comment. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Comment
comment_idtextRequired - The comment's id, from 'List post comments'.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The reactions on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many reactions there are.
Example output
{
"items": [
{
"value": "like"
}
],
"next_cursor": null,
"total_count": 1
}List comment replies
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List the replies to a comment. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Comment
comment_idtextRequired - The comment's id, from 'List post comments'.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The comments on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many there are.
Example output
{
"items": [
{
"id": "cmt_9Hs",
"text": "Thank you!"
}
],
"next_cursor": null,
"total_count": 1
}List connections
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List someone's connections. Do not put this on a schedule. Unipile asks specifically that relations are not polled at a fixed time: a request at 8am every day is one of the patterns LinkedIn flags as automation. Do an initial sync, then read the first page a few times a day at irregular intervals.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtext - Whose data to read. Use 'me' for the linked account's own. Otherwise a provider id, a handle, or a pasted profile URL.Default:
me. - Search
searchtext - Filter connections by name.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
has_moretrue/false- Whether another page exists.
itemslist- The people on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many the provider says exist.
Example output
{
"items": [
{
"display_name": "Grace Hopper",
"id": "ACoAAAcDMMQ"
}
],
"next_cursor": null,
"total_count": 1
}List drafts
List saved drafts in a mailbox.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- To
tolist - Only drafts addressed to these addresses.
- From
senderlist - Only drafts from these addresses.
- Anyone involved
any_emaillist - Only drafts where these addresses appear anywhere.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The drafts.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many drafts there are.
Example output
{
"items": [
{
"id": "dr_6Vb",
"subject": "Draft reply"
}
],
"next_cursor": null,
"total_count": 1
}List emails
List emails in a mailbox, with filters for sender, recipient, folder, unread and date. Turn on 'Metadata only' for triage workflows: bodies are the bulk of the payload and a step that only reads subjects should not carry them.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Search
querytext - Full-text search across the mailbox.
- From
senderlist - Only emails from these addresses.
- To
tolist - Only emails sent to these addresses.
- Anyone involved
any_emaillist - Only emails where these addresses appear in any field.
- Folder
foldertext - Only emails in this folder.
- Exclude folder
exclude_foldertext - Skip emails in this folder.
- Unread only
is_unreadtrue/false - Only unread emails.
- Starred only
is_starredtrue/false - Only starred emails.
- With attachments
has_attachmenttrue/false - Only emails carrying attachments.
- Received after
afterdate and time - Only emails after this moment. Use this to poll for new mail.
- Received before
beforedate and time - Only emails before this moment.
- Metadata only
meta_onlytrue/false - Leave the bodies out, returning only headers and a snippet.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The emails on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many were returned. Not all routes report a total.
Example output
{
"items": [
{
"date": "2026-09-21T09:12:00.000Z",
"id": "em_4Rt",
"is_unread": true,
"subject": "Invoice 1042"
}
],
"next_cursor": null,
"total_count": 1
}List emails in a folder
Works with any mailbox: Gmail, Outlook or IMAP. List the emails inside one folder.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Folder
folder_idtextRequired - Which mail folder. Pick it from the list, or paste an id.
- Search
querytext - Full-text search within the folder.
- Unread only
is_unreadtrue/false - Only unread emails.
- With attachments
has_attachmenttrue/false - Only emails carrying attachments.
- Received after
afterdate and time - Only emails after this moment.
- Received before
beforedate and time - Only emails before this moment.
- Metadata only
meta_onlytrue/false - Leave the bodies out.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The emails on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many were returned. Not all routes report a total.
Example output
{
"items": [
{
"id": "em_4Rt",
"subject": "Invoice 1042"
}
],
"next_cursor": null,
"total_count": 1
}List followers
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List the people following someone. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtext - Whose data to read. Use 'me' for the linked account's own. Otherwise a provider id, a handle, or a pasted profile URL.Default:
me. - Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
has_moretrue/false- Whether another page exists.
itemslist- The people on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many the provider says exist.
Example output
{
"items": [
{
"display_name": "Grace Hopper",
"id": "ACoAAAcDMMQ"
}
],
"next_cursor": null,
"total_count": 1
}List inbox chats
List conversations in one LinkedIn inbox. This is how you list LinkedIn conversations: the general 'List chats' action is not implemented for LinkedIn and answers with an error pointing here.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Inbox
inbox_idtextRequired - Which LinkedIn inbox. Classic Primary is the ordinary one; Sales Navigator and Recruiter inboxes appear only with those subscriptions.
- Unread only
is_unreadtrue/false - Only conversations with unread messages.
- Archived only
is_archivedtrue/false - Only archived conversations.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
has_moretrue/false- Whether another page exists.
itemslist- The chats on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many the provider says exist.
Example output
{
"items": [
{
"id": "chat_8vQ2",
"is_1to1": true,
"name": "Grace Hopper",
"unread_count": 2
}
],
"next_cursor": null,
"total_count": 1
}List linked accounts
Any linked account. List the accounts linked to your Unipile application, with each one's connection status. Use this to check an account is still connected before running outreach against it.
Inputs
- Network
providertext - Only return accounts on this network. Leave empty for all.One of:
linkedin,whatsapp,instagram,telegram,google(Google (Gmail)),outlook(Microsoft (Outlook)),imap,mock(Mock (Unipile test account)). - Status
statustext - Only return accounts in this connection state.One of:
running,errored,disconnected,degraded,partial. - Search
searchtext - Filter by account name.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Offset
offsetnumber - Skip this many results. The account routes page on offset rather than a cursor.At least 0.
Outputs
has_moretrue/false- Whether another page exists.
itemslist- The linked accounts.
needs_reconnectlist- The accounts whose owner must reconnect them in Unipile.
needs_reconnect_countnumber- How many are disconnected or errored.
total_countnumber- How many were returned.
Example output
{
"has_more": false,
"items": [
{
"created_at": "2026-09-01T09:14:22.000Z",
"id": "acc_01HZX9",
"name": "Ada Lovelace",
"provider": "linkedin",
"status": "running"
}
],
"needs_reconnect": [],
"needs_reconnect_count": 0,
"total_count": 1
}List LinkedIn inboxes
List the inboxes available to a LinkedIn account: Classic Primary, Archived, Spam, Jobs, InMail and Starred, plus Sales Navigator and Recruiter inboxes where the subscription allows. LinkedIn has no flat chat list, so this is the entry point to its conversations.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
Outputs
itemslist- The inboxes available to this LinkedIn account.
total_countnumber- How many inboxes there are.
Example output
{
"items": [
{
"description": "Classic Primary inbox",
"disabled": false,
"id": "CLASSIC_PRIMARY"
}
],
"total_count": 1
}List mail folders
List the mailbox's folders with their total and unread counts.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The folders.
total_countnumber- How many folders there are.
Example output
{
"items": [
{
"id": "INBOX",
"is_system": true,
"name": "Inbox",
"total_count": 1284,
"unread_count": 12
}
],
"total_count": 1
}List message reactions
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List who reacted to a message, and with what.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
message_idtextRequired - The message's id, from 'List chat messages'.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The reactions on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many reactions there are.
Example output
{
"items": [
{
"author": {
"id": "ACoAAAcDMMQ",
"name": "Grace Hopper"
},
"value": "\ud83d\udc4d"
}
],
"next_cursor": null,
"total_count": 1
}List pending invitations
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List pending connection or follow requests, either ones you sent or ones you received. Same caution as listing connections: do not poll this on a fixed schedule.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Direction
typetextRequired - Invitations you received, or ones you sent.One of:
received,sent. Default:received. - Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The pending requests.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many there are.
typetext- 'sent' or 'received', echoing what was asked for.
Example output
{
"items": [
{
"id": "req_5Nx",
"message": "Let's connect."
}
],
"next_cursor": null,
"total_count": 1,
"type": "received"
}List post comments
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List the comments on a post. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Sort by
sort_bytext - Order the comments come back in.One of:
MOST_RELEVANT(Most relevant),MOST_RECENT(Most recent). - Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The comments on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many there are.
Example output
{
"items": [
{
"id": "cmt_2Bq",
"text": "Congratulations!"
}
],
"next_cursor": null,
"total_count": 1
}List post reactions
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List who reacted to a post, and how. Useful for warm-lead workflows: the people who engaged with a post are the ones worth reaching out to. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The reactions on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many reactions there are.
Example output
{
"items": [
{
"author": {
"id": "ACoAAAcDMMQ",
"name": "Grace Hopper"
},
"value": "like"
}
],
"next_cursor": null,
"total_count": 1
}List sender addresses
List the addresses this mailbox can send as, including aliases. Aliases matter for volume: Unipile's guidance is that adding domains as aliases spreads sending reputation across them from one connected mailbox.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
Outputs
itemslist- The addresses this mailbox can send as.
Example output
{
"items": [
{
"email": "ada@example.com",
"is_default": true,
"verification_status": "verified"
}
],
"total_count": 1
}List who someone follows
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. List the accounts someone follows. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtext - Whose data to read. Use 'me' for the linked account's own. Otherwise a provider id, a handle, or a pasted profile URL.Default:
me. - Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
has_moretrue/false- Whether another page exists.
itemslist- The people on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- How many the provider says exist.
Example output
{
"items": [
{
"display_name": "Grace Hopper",
"id": "ACoAAAcDMMQ"
}
],
"next_cursor": null,
"total_count": 1
}Look up search parameter ids
Turn text into the numeric ids LinkedIn's structured search requires. LinkedIn will not accept 'Los Angeles' as a location filter (it wants 102277331), and this is the only way to find that id. Feed the result into a people or company search.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Kind
typetextRequired - What kind of id you are looking for.One of:
LOCATION,COMPANY,RELATION(Connection),PEOPLE(Person),SCHOOL,INDUSTRY,SERVICE,JOB_FUNCTION(Job function),JOB_TITLE(Job title),EMPLOYMENT_TYPE(Employment type),SKILL. - Text
keywordstextRequired - The text to look an id up for, e.g. 'Los Angeles'.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50.
Outputs
itemslist- The search results on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- What LinkedIn claims exists. Often larger than what can be paged through — LinkedIn caps a single query at 1,000 results (2,500 on Sales Navigator or Recruiter).
Example output
{
"items": [
{
"id": "102277331",
"title": "Los Angeles, California, United States"
}
],
"total_count": 1
}Mark a message read
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Mark one message as read, as if the account owner had opened it.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
message_idtextRequired - The message's id, from 'List chat messages'.
Outputs
message_idtext- The message that was marked.
readtrue/false- True when it succeeded.
Example output
{
"message_id": "msg_1aZ",
"read": true
}Mark an email read
Works with any mailbox: Gmail, Outlook or IMAP. Mark an email as read.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Email
email_idtextRequired - The email's id, from 'List emails'.
Outputs
idtext- The email that was marked.
is_unreadtrue/false- The email's unread state after the change.
Example output
{
"id": "em_4Rt",
"is_unread": false
}Mark an email unread
Works with any mailbox: Gmail, Outlook or IMAP. Mark an email as unread.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Email
email_idtextRequired - The email's id, from 'List emails'.
Outputs
idtext- The email that was marked.
is_unreadtrue/false- The email's unread state after the change.
Example output
{
"id": "em_4Rt",
"is_unread": true
}Move an email
Works with any mailbox: Gmail, Outlook or IMAP. Move an email by setting which folders it belongs to. Replaces the current set rather than adding to it.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Email
email_idtextRequired - The email's id, from 'List emails'.
- Folders
folder_idslistRequired - The folders the email should be in after the move.
Outputs
attachmentslist- Files carried by the email.
bcclist- Bcc recipients.
bodytext- Full body. Absent when the call asked for metadata only.
cclist- Cc recipients.
datetext- When it was sent, ISO 8601.
folderslist- Folders it sits in.
fromlist- Sender.
idtext- Unipile's id for the email.
is_unreadtrue/false- Whether it is still unread.
message_idtext- The RFC 822 Message-ID header.
snippettext- Short preview of the body.
subjecttext- Subject line.
thread_idtext- Groups the email with its replies.
tolist- To recipients.
Example output
{
"folders": [
"Archive"
],
"id": "em_4Rt"
}Publish a post
Publish a post to LinkedIn or Instagram. 'Post as' publishes from a company page you administer rather than your own profile.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Text
texttextRequired - The post's content.
- Attachments
attachmentslist - Files to send, up to 15 MB each. Upload them here, or reference a document produced by an earlier step.
- Who can see it
can_readtext - Post visibility.One of:
anyone,relations_only(Connections only). - Who can comment
can_commenttext - Who is allowed to comment on it.One of:
anyone,relations_only(Connections only),no_one(No one). - Quoting post
quoted_post_idtext - The id of a post to quote, to reshare it with commentary.
- Post as company
post_astext - A company page id to publish as, instead of your own profile.
Outputs
authorobject- Who published it.
comments_counternumber- Total comments.
created_attext- When it was published.
idtext- The post id.
reactions_counternumber- Total reactions. Null when the provider hides the count.
reposts_counternumber- Total reshares.
share_urltext- Link to the post.
texttext- The post's text.
Example output
{
"id": "post_7Kd",
"post_url": "https://www.linkedin.com/feed/update/post_7Kd",
"text": "We are hiring."
}React to a comment
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. React to a comment on a post. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Comment
comment_idtextRequired - The comment's id, from 'List post comments'.
- Reaction
reactiontextRequired - The reaction to leave. On LinkedIn this must be a prefixed type: linkedin_like, linkedin_celebrate, linkedin_support, linkedin_love, linkedin_insightful or linkedin_funny. A bare emoji, or a bare 'like', is refused. Other providers take the emoji itself.
- React as company
react_astext - A company page id to react as, instead of your own profile.
Outputs
comment_idtext- The comment reacted to.
reactiontext- The reaction that was added.
Example output
{
"comment_id": "cmt_2Bq",
"reaction": "like"
}React to a message
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. React to a message with an emoji. Supported on WhatsApp, LinkedIn, Telegram and Instagram.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
message_idtextRequired - The message's id, from 'List chat messages'.
- Reaction
reactiontextRequired - The reaction to leave. On LinkedIn this must be a prefixed type: linkedin_like, linkedin_celebrate, linkedin_support, linkedin_love, linkedin_insightful or linkedin_funny. A bare emoji, or a bare 'like', is refused. Other providers take the emoji itself.
Outputs
message_idtext- The message reacted to.
reactiontext- The reaction that was added.
Example output
{
"message_id": "msg_1aZ",
"reaction": "\ud83d\udc4d"
}React to a post
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. React to a post. On LinkedIn the reaction is a named type (like, celebrate, support, love, insightful or funny) rather than an emoji. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Reaction
reactiontextRequired - The reaction to leave. On LinkedIn this must be a prefixed type: linkedin_like, linkedin_celebrate, linkedin_support, linkedin_love, linkedin_insightful or linkedin_funny. A bare emoji, or a bare 'like', is refused. Other providers take the emoji itself.
- React as company
react_astext - A company page id to react as, instead of your own profile.
Outputs
post_idtext- The post reacted to.
reactiontext- The reaction that was added.
Example output
{
"post_id": "post_7Kd",
"reaction": "like"
}Remove a comment reaction
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Remove your reaction from a comment.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Comment
comment_idtextRequired - The comment's id, from 'List post comments'.
- Reaction
reactiontextRequired - Which reaction to remove: the API needs it to know which one is yours. On LinkedIn: linkedin_like, linkedin_celebrate, linkedin_support, linkedin_love, linkedin_insightful or linkedin_funny.
Outputs
comment_idtext- The comment reacted to.
removedtrue/false- True when the reaction was removed.
Example output
{
"comment_id": "cmt_2Bq",
"removed": true
}Remove a message reaction
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Remove your reaction from a message.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
message_idtextRequired - The message's id, from 'List chat messages'.
- Reaction
reactiontextRequired - Which reaction to remove: the API needs it to know which one is yours. On LinkedIn: linkedin_like, linkedin_celebrate, linkedin_support, linkedin_love, linkedin_insightful or linkedin_funny.
Outputs
message_idtext- The message the reaction was removed from.
removedtrue/false- True when it succeeded.
Example output
{
"message_id": "msg_1aZ",
"removed": true
}Remove a post reaction
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Remove your reaction from a post.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Reaction
reactiontextRequired - Which reaction to remove: the API needs it to know which one is yours. On LinkedIn: linkedin_like, linkedin_celebrate, linkedin_support, linkedin_love, linkedin_insightful or linkedin_funny.
Outputs
post_idtext- The post reacted to.
removedtrue/false- True when the reaction was removed.
Example output
{
"post_id": "post_7Kd",
"removed": true
}Rename a mail folder
Works with any mailbox: Gmail, Outlook or IMAP. Rename a folder.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Folder
folder_idtextRequired - Which mail folder. Pick it from the list, or paste an id.
- New name
nametextRequired - What the folder should be called instead.
Outputs
idtext- The folder id.
is_systemtrue/false- True for built-in folders like Inbox and Sent.
nametext- Folder name as shown in the mailbox.
total_countnumber- Emails in the folder.
unread_countnumber- Unread emails in the folder.
Example output
{
"id": "Label_42",
"name": "Invoices 2026"
}Reply to a comment
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Reply to a comment on a post. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Post
post_idtextRequired - The post's id, from 'List a person's posts' or a search.
- Comment
comment_idtextRequired - The comment's id, from 'List post comments'.
- Reply
texttextRequired - What to say.
- Reply as company
comment_astext - A company page id to reply as, instead of your own profile.
Outputs
authorobject- Who wrote it.
created_attext- When it was posted.
idtext- The comment id.
reactions_counternumber- Reactions on the comment.
reply_counternumber- Replies to the comment.
texttext- The comment text.
Example output
{
"id": "cmt_9Hs",
"text": "Thank you!"
}Report a profile visit
LinkedIn only. Let someone see that this account viewed their profile: the 'who viewed your profile' notification. Reads the person's profile to get the visit token the endpoint wants, so it spends two of the account's provider actions rather than one.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Person
person_idtextRequired - Whose profile to report a visit to. Accepts an id, a handle, or a pasted profile URL.
- Visit token
tokentext - Optional. The 'notify_visit_token' from an earlier 'Get a profile' step: supply it to skip the extra profile read.
Outputs
person_idtext- Whose profile was visited.
reportedtrue/false- True when the visit was reported.
Example output
{
"person_id": "ACoAAAcDMMQ",
"reported": true
}Restore a cancelled event
Google and Microsoft calendars only. Un-cancel an event that was cancelled rather than deleted.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
- Event
event_idtextRequired - The event's id, from 'List calendar events'.
Outputs
cancelledtrue/false- True after a cancel, false after a restore.
event_idtext- The event acted on.
Example output
{
"cancelled": false,
"event_id": "ev_5Tg"
}Search LinkedIn companies
Search LinkedIn for companies. Location and industry take numeric ids, as with people search. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Keywords
keywordstext - Free-text search terms.
- LinkedIn product
apitext - Which product to search through.One of:
classic,sales_navigator(Sales Navigator),recruiter. - Location ids
locationlist - LinkedIn location ids.
- Industry ids
industrylist - LinkedIn industry ids.
- Hiring only
has_job_postingstrue/false - Only companies with open job postings.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The search results on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- What LinkedIn claims exists. Often larger than what can be paged through — LinkedIn caps a single query at 1,000 results (2,500 on Sales Navigator or Recruiter).
Example output
{
"items": [
{
"id": "1441",
"name": "Example Corp"
}
],
"next_cursor": null,
"total_count": 1
}Search LinkedIn from a URL
Run a LinkedIn search by pasting a search URL from your browser. The practical way in: LinkedIn's structured search needs its own numeric ids for every filter, and a URL copied from a search, a saved search or a lead list already carries them. LinkedIn caps a single query at 1,000 results (2,500 on Sales Navigator or Recruiter), and Unipile recommends keeping total rows fetched per day to the same figure.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Search URL
urltextRequired - A LinkedIn search, saved search or lead-list URL, copied from the address bar.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The search results on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- What LinkedIn claims exists. Often larger than what can be paged through — LinkedIn caps a single query at 1,000 results (2,500 on Sales Navigator or Recruiter).
Example output
{
"items": [
{
"id": "ACoAAAcDMMQ",
"name": "Grace Hopper"
}
],
"next_cursor": null,
"total_count": 1
}Search LinkedIn jobs
Search LinkedIn job postings. Classic only. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Keywords
keywordstext - Free-text search terms.
- Location ids
locationlist - LinkedIn location ids.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The search results on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- What LinkedIn claims exists. Often larger than what can be paged through — LinkedIn caps a single query at 1,000 results (2,500 on Sales Navigator or Recruiter).
Example output
{
"items": [
{
"id": "3901",
"title": "Staff Engineer"
}
],
"next_cursor": null,
"total_count": 1
}Search LinkedIn people
Search LinkedIn for people. The location and industry filters take LinkedIn's own numeric ids, not text: use 'Look up search parameter ids' to turn 'Los Angeles' into the id the search wants, or paste a search URL instead and skip the lookup. LinkedIn caps a single query at 1,000 results (2,500 on Sales Navigator or Recruiter), and Unipile recommends keeping the total rows fetched per day to the same figure. This search returns a fixed page that 'Limit' trims: to go past it, chain the cursor from the previous step.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Keywords
keywordstext - Free-text search terms.
- LinkedIn product
apitext - Which product to search through.One of:
classic,sales_navigator(Sales Navigator),recruiter. - Location ids
locationlist - LinkedIn location ids, from 'Look up search parameter ids'.
- Industry ids
industrylist - LinkedIn industry ids, from 'Look up search parameter ids'.
- Connection degree
network_distancelist - 1, 2 or 3: how far from you the person is.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The search results on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- What LinkedIn claims exists. Often larger than what can be paged through — LinkedIn caps a single query at 1,000 results (2,500 on Sales Navigator or Recruiter).
Example output
{
"items": [
{
"id": "ACoAAAcDMMQ",
"name": "Grace Hopper"
}
],
"next_cursor": null,
"total_count": 1
}Search LinkedIn posts
Search LinkedIn posts by keyword. Classic only. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Keywords
keywordstext - Free-text search terms.
- Limit
limitnumber - How many to return, 1–250. Keep this small on LinkedIn: every row fetched counts towards the account's daily allowance.From 1 to 250. Default:
50. - Cursor
cursortext - Page cursor from a previous run's 'next_cursor'. Leave empty for the first page.
Outputs
itemslist- The search results on this page.
next_cursortext- Pass as 'cursor' for the next page.
total_countnumber- What LinkedIn claims exists. Often larger than what can be paged through — LinkedIn caps a single query at 1,000 results (2,500 on Sales Navigator or Recruiter).
Example output
{
"items": [
{
"id": "post_7Kd",
"text": "We are hiring."
}
],
"next_cursor": null,
"total_count": 1
}Send a connection request
LinkedIn only. Send a connection request, optionally with a note. The most rate-limited action here. On a paid, active LinkedIn account Unipile's guidance is 80–100 a day and about 200 a week with a note. On a free account it is roughly five a month with a note, or 150 a week without one. Hitting the ceiling returns LinkedIn's own 422 cannot_resend_yet. Space these out and put a delay step between them in any loop.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Person
person_idtextRequired - Who to act on. Accepts a provider id, a handle, or a pasted profile URL: all three work, so there is no lookup step.
- Note
messagetext - An optional note, capped at 300 characters by LinkedIn. Sending without a note has a much higher weekly limit.
Outputs
senttrue/false- True when the invite went out.
user_idtext- Who was invited.
Example output
{
"sent": true,
"user_id": "ACoAAAcDMMQ"
}Send a draft
Works with any mailbox: Gmail, Outlook or IMAP. Send a draft that was saved earlier. The other half of the review-then-send pattern.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Draft
draft_idtextRequired - The draft's id, from 'List drafts'.
Outputs
idtext- Unipile's id for the sent email — use this one.
message_idtext- The RFC Message-ID header, for matching replies.
Example output
{
"id": "em_8Yu",
"subject": "Draft reply"
}Send a message or reply
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Reply in a conversation, or send another message into it. This is the reply action for chats: pick the chat with 'Find the chat with a person' or 'List inbox chats'. Counts against the account's provider limits: on WhatsApp, leave at least 10–20 seconds between sends.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Message
texttextRequired - The message to send.
- Replying to
quote_idtext - The id of a message to quote, to send this as a threaded reply.
- Attachments
attachmentslist - Files to send, up to 15 MB each. Upload them here, or reference a document produced by an earlier step.
Outputs
chat_idtext- The chat it went to.
message_idtext- The id of the message that was sent.
Example output
{
"chat_id": "chat_8vQ2",
"message_id": "msg_1aZ"
}Send or reply to an email
Send an email from a connected mailbox. Sending limits are the mailbox provider's: Gmail allows 500 a day and Workspace 2,000, but Unipile recommends staying at 50–100 (100–150 on Workspace) to avoid being flagged, starting lower on a new mailbox.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- To
tolistRequired - Recipient addresses.
- Subject
subjecttext - Subject line.
- Body
bodytext - Plain-text body. Set this, the HTML body, or both.
- HTML body
htmltext - HTML body. Set this, the plain-text body, or both.
- Cc
cclist - Cc addresses.
- Bcc
bcclist - Bcc addresses.
- Reply-to
reply_tolist - Addresses replies should go to.
- Replying to
reply_to_message_idtext - A message id to reply to, so the email threads correctly.
- From
sendertext - Which of the mailbox's addresses to send as. Use 'List sender addresses' to see the aliases available.
- Attachments
attachmentslist - Files to send, up to 15 MB each. Upload them here, or reference a document produced by an earlier step.
- Track opens
track_openstrue/false - Ask Unipile to report when the email is opened. Needs an HTML body: the tracking pixel has nowhere to go in plain text.
- Track clicks
track_clickstrue/false - Ask Unipile to report when a link is clicked. Needs an HTML body, since tracking works by rewriting the links in it.
Outputs
idtext- Unipile's id for the sent email — use this one.
message_idtext- The RFC Message-ID header, for matching replies.
Example output
{
"id": "em_8Yu",
"subject": "Re: Invoice 1042"
}Set presence
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Set the account's online presence. Like the typing indicator, this is part of behaving like a person rather than a script.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Presence
presencetextRequired - How the account should appear to others.One of:
online,restricted_online(Online (restricted)),away,offline.
Outputs
presencetext- The presence that was set.
Example output
{
"presence": "online"
}Set typing indicator
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Show the 'typing…' or 'recording audio…' indicator in a conversation. Worth more than it looks: Unipile's guidance for staying under a provider's automation radar is to behave like a person, and a message that appears with no typing indicator before it does not. The indicator clears on its own: there is no 'stop' to send.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Action
indicatortextRequired - Which indicator to show. LinkedIn only takes 'typing'; 'recording' is for the providers that carry voice notes.One of:
typing,recording(Recording audio).
Outputs
actiontext- The indicator state that was set.
chat_idtext- The chat that was updated.
Example output
{
"action": "start",
"chat_id": "chat_8vQ2"
}Start a chat from an inbox
Start a conversation from a specific LinkedIn inbox and send the first message. This is the route LinkedIn uses for a new chat ('Start a chat' is not implemented there), and it is also how you send from Sales Navigator or Recruiter rather than from Classic. A new chat is only possible with an existing connection unless it goes as an InMail, which spends one of the account's InMail credits. Counts against the account's provider limits: Unipile's guidance is roughly 100 of these per day per LinkedIn account, spaced out rather than chained. Exceeding it risks a warning on the account.
Inputs
- Account
account_idtextRequired - Which linked LinkedIn account to act as. Every limit below applies to this real LinkedIn account, not to an API quota.
- Inbox
inbox_idtextRequired - Which LinkedIn inbox. Classic Primary is the ordinary one; Sales Navigator and Recruiter inboxes appear only with those subscriptions.
- Recipients
user_idslistRequired - Who to message. Give a provider id, a handle, or paste a profile URL. One person starts a 1:1; several start a group. On LinkedIn you can only start a chat with an existing connection unless you send it as an InMail.
- Message
texttextRequired - The first message to send.
- Attachments
attachmentslist - Files to send, up to 15 MB each. Upload them here, or reference a document produced by an earlier step.
Outputs
chat_idtext- The chat it went to.
message_idtext- The id of the message that was sent.
Example output
{
"chat_id": "chat_8vQ2",
"message_id": "msg_1aZ"
}Trash an email
Works with any mailbox: Gmail, Outlook or IMAP. Move an email to the trash folder.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Email
email_idtextRequired - The email's id, from 'List emails'.
Outputs
idtext- The email that was trashed.
trashedtrue/false- True when it was trashed.
Example output
{
"id": "em_4Rt",
"trashed": true
}Unfollow a person
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Stop following someone.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Person
person_idtextRequired - Who to act on. Accepts a provider id, a handle, or a pasted profile URL: all three work, so there is no lookup step.
Outputs
followingtrue/false- True after a follow, false after an unfollow.
user_idtext- Who was followed.
Example output
{
"following": false,
"user_id": "ACoAAAcDMMQ"
}Update a calendar
Rename or re-describe a calendar. Only the fields you set are changed.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
- Name
nametext - New name.
- Description
descriptiontext - New description.
- Timezone
timezonetext - New IANA timezone.
Outputs
descriptiontext- Calendar description.
idtext- The calendar id.
is_defaulttrue/false- Whether this is the account's default calendar.
is_owned_by_usertrue/false- Whether the account owns it, rather than subscribing.
is_read_onlytrue/false- True when events cannot be written here.
nametext- Calendar name.
timezonetext- The calendar's IANA timezone.
Example output
{
"id": "cal_2Lm",
"name": "Interviews 2026"
}Update a calendar event
Google and Microsoft calendars only. Change an existing event. Only the fields you set are changed.
Inputs
- Account
account_idtextRequired - Which linked calendar to act as: a Google or Microsoft account. IMAP mailboxes are not offered here: IMAP carries mail only and has no calendar. Accounts are linked in your Unipile dashboard, not here.
- Calendar
calendar_idtextRequired - Which calendar. Pick it from the list, or paste an id.
- Event
event_idtextRequired - The event's id, from 'List calendar events'.
- Title
titletext - New title.
- Start
startdate and time - New start time.
- End
enddate and time - New end time.
- Description
bodytext - New description.
- Location
locationtext - New location.
- Guests
attendeeslist - The full guest list after the change: this replaces the existing one.
- Timezone
timezonetext - IANA timezone for the times above.
- Notify guests
notifytext - Who gets told about the change.One of:
all(Notify everyone),externalOnly(Notify external guests only),none(Notify no one).
Outputs
attendeeslist- Invitees and their responses.
bodytext- Event description.
endtext- End, ISO 8601.
idtext- The event id.
is_cancelledtrue/false- Whether it has been cancelled.
locationtext- Where it takes place.
starttext- Start, ISO 8601.
titletext- Event title.
Example output
{
"id": "ev_5Tg",
"title": "Design review (moved)"
}Update a chat
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Rename, pin, archive, mute, label or mark a conversation read. Only the fields you set are changed. Treat archiving as one-way: un-archiving sets the chat's own flag back, but the conversation can keep being listed under the archived inbox rather than Classic Primary, so anything downstream should find it by person rather than by listing an inbox.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- Chat
chat_idtextRequired - The conversation's id, from 'List chats'. Not a dropdown: an account can have tens of thousands of conversations, which is the wrong size for a picker.
- Name
nametext - Rename the conversation. Groups only.
- Label
labeltext - Set the conversation's label, where the provider supports one.
- Mark read
read_statustrue/false - True marks the conversation read, false marks it unread.
- Pinned
pin_statustrue/false - True pins the conversation, false unpins it.
- Archived
archive_statustrue/false - True archives the conversation, false restores it.
- Muted until
muted_untildate and time - Mute notifications until this moment.
Outputs
idtext- The chat id, used by every message action.
is_1to1true/false- True for a direct conversation.
is_archivedtrue/false- Whether the owner archived it.
is_grouptrue/false- True for a group conversation.
last_message_timestamptext- When the most recent message landed.
nametext- Group name, or the other person's name in a 1:1.
participants_countnumber- How many people are in it.
providertext- Which network the chat is on.
typetext- The chat's kind, as the provider classifies it.
unread_countnumber- Unread messages in this chat.
Example output
{
"id": "chat_8vQ2",
"is_archived": true
}Update a draft
Works with any mailbox: Gmail, Outlook or IMAP. Edit a saved draft.
Inputs
- Account
account_idtextRequired - Which linked mailbox to act as: Gmail, Outlook or IMAP. Mailboxes are linked in your Unipile dashboard, not here.
- Draft
draft_idtextRequired - The draft's id, from 'List drafts'.
- To
tolist - Recipient addresses.
- Subject
subjecttext - Subject line.
- Body
bodytext - Plain-text body.
- HTML body
htmltext - HTML body.
- Cc
cclist - Cc addresses.
- Bcc
bcclist - Bcc addresses.
- Attachments
attachmentslist - Files to send, up to 15 MB each. Upload them here, or reference a document produced by an earlier step.
Outputs
bodytext- The draft body.
idtext- The draft id.
subjecttext- Subject line.
tolist- To recipients.
Example output
{
"id": "dr_6Vb",
"subject": "Draft reply (v2)"
}Update your profile
Works with any messaging account: LinkedIn, WhatsApp, Instagram or Telegram. Edit the linked account's own profile. Only the fields you set are changed, but on LinkedIn only 'Bio' and 'Location' can be: it refuses first name, last name and headline, and the refusal is all-or-nothing, so setting one of those leaves everything unchanged rather than applying the rest.
Inputs
- Account
account_idtextRequired - Which linked messaging account to act as: LinkedIn, WhatsApp, Instagram or Telegram. Accounts are linked in your Unipile dashboard, not here.
- First name
first_nametext - New given name.
- Last name
last_nametext - New family name.
- Headline
descriptiontext - New headline: the one-line summary under your name.
- About
biotext - New longer profile text.
- Location
locationtext - New location.
Outputs
person_idtext- Whose profile changed.
updatedtrue/false- True when the change was applied.
Example output
{
"description": "Building things at Lodol",
"id": "ACoAAAcDMMQ"
}