Skip to content

IM

Unipile
API integration

Ship IM features without building the integration. Full Unipile API access via Proxy and 180+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Talk to us
Unipile

Use Cases

Why integrate with Unipile

Common scenarios for SaaS companies building Unipile integrations for their customers.

01

Launch omnichannel sales engagement

Let your users connect their personal LinkedIn, email, and WhatsApp accounts to run multi-touch outreach sequences from inside your sales platform — without building closed-ecosystem integrations yourself.

02

Power a unified conversational inbox

Aggregate chats and emails from LinkedIn, WhatsApp, Telegram, Instagram, Gmail, Outlook, and IMAP into a single inbox view, so your CRM or helpdesk users can reply to any customer on any channel from one UI.

03

Automate LinkedIn Recruiter sourcing inside your ATS

Give recruiters access to talent pool search, resume downloads, candidate pipeline saves, and InMail credit tracking directly in your ATS — removing the constant tab-switching between LinkedIn Recruiter and your product.

04

Enable social selling and engagement workflows

Let your users publish posts and stories, comment, react, visit profiles, and endorse skills on LinkedIn programmatically — ideal for social selling, personal branding, and marketing automation SaaS.

05

Sync calendars and emails for scheduling tools

Offer two-way calendar event sync, email threading, drafts, and folder management across Google, Microsoft, and IMAP so your scheduling or productivity app works with any provider your users bring.

What You Can Build

Ship these features with Truto + Unipile

Concrete product features your team can ship faster by leveraging Truto’s Unipile integration instead of building from scratch.

01

Hosted account connection flow

Embed a white-labeled auth flow with QR code linking and checkpoint/2FA resolution so end users can connect LinkedIn, WhatsApp, Telegram, Instagram, email, and calendar accounts in minutes.

02

Cross-channel outreach sequencer

Chain profile visits, connection requests, LinkedIn DMs, WhatsApp messages, and follow-up emails with delays and branching based on webhook-driven reply or acceptance events.

03

Shared team inbox with presence

List chats across providers, send and forward messages, mark as read, manage participants, react to messages, and surface real-time user presence for live conversations.

04

LinkedIn Recruiter candidate workspace

Search talent pools and recruiter projects, pull applicant details and resumes, save candidates to pipelines, and monitor job-slot and InMail credit balances inside your ATS.

05

Sales Navigator lead manager

Run Sales Navigator people and company searches, create and populate account/lead lists, and sync saved leads back into your CRM's contact records.

06

LinkedIn job posting and applicant tracking

Create, publish, and close LinkedIn jobs or Recruiter project jobs, manage job budgets, and ingest applicants with resumes directly into your hiring workflow.

SuperAI

Unipile AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

list_all_unipile_misc

Ping the Unipile API root (GET /v2/) as a connectivity probe for the configured API key. Takes no parameters. Returns an opaque service-metadata JSON payload with no documented fields, so treat the body as a health-check blob rather than a structured record.

create_a_unipile_auth_checkpoint

Solve an authentication checkpoint during Unipile account linking by submitting the user's verification code. Returns the next flow step — another checkpoint (object, checkpoint, intent_id), a QR code (qrcode), an OAuth url, or the linked Account (id, user_id, name, status, provider). Required: code, intent_id.

create_a_unipile_checkpoint_request

Request a checkpoint for a pending Unipile authentication intent, optionally switching the verification method via challenge when the current checkpoint cannot be solved. Returns an AuthenticationCheckpoint (object, checkpoint details, intent_id) or an AuthenticationQrCode (qrcode, intent_id). Required: intent_id.

create_a_unipile_checkpoint_resend

Resend the checkpoint notification or code for an Unipile authentication intent when the previous one did not arrive. Returns an empty 204 response on success. Required: intent_id.

create_a_unipile_auth_intent

Start an authentication intent (Hosted Auth or QR flow) in Unipile to link a new provider account. Returns: object, checkpoint, intent_id, qrcode, and 15 more. Requires provider and either credentials or, for google/outlook OAuth, oauth_callback_redirect_uri. May require solving follow-up checkpoints depending on the provider. Required: provider.

create_a_unipile_auth_link

Create a hosted authentication link for a Unipile account. Returns an empty 204 response on success. Requires expires_on, redirect_uri, and providers for a new account, or expires_on, redirect_uri, and account_id to re-authenticate an existing one. Required: expires_on, redirect_uri.

get_single_unipile_account_by_id

Get a linked Unipile account by id, including its status, provider, proxy and initial-sync details. Returns: object, user_id, name, created_at, id, application_id, account_scope_id, status, is_locked, provider, oauth_scope, metadata, initial_sync, proxy. Required: id.

update_a_unipile_account_by_id

Update a linked Unipile account by id: assign a Scope, replace custom metadata, or change proxy and Automatic Proxy Protection settings; setting a new proxy restarts the account. Returns the updated Account with id, name, status, provider, created_at, metadata, initial_sync, and proxy. Required: id.

delete_a_unipile_account_by_id

Delete a linked Unipile account by id. This disconnects the provider account from Unipile, stops all syncing, and is irreversible. Returns: success. Required: id.

list_all_unipile_accounts

List all Unipile accounts linked to the current application, sorted alphabetically by name. Returns each account's id, name, status, provider, user_id, created_at, is_locked, metadata, initial_sync, and proxy.

list_all_unipile_api_keys

List all Account API keys of the current Unipile application, covering global and scope-restricted keys. Returns: object, id, application_id, prefix, issued_at, expires_at, name, role, account_scope_id, api_key. Service API keys are never exposed by this endpoint.

create_a_unipile_api_key

Create a new Unipile Account API key with global or scope-restricted access. Returns: object, id, api_key. Requires name, expires_at, and access (type global, or scope with scope_id). The secret api_key token is returned only once; service API keys cannot be created here. Required: name, expires_at, access.

delete_a_unipile_api_key_by_id

Delete (revoke) a Unipile Account API key by id. Returns: object. Calls authenticated with a deleted key fail immediately. Service API keys cannot be deleted through this endpoint. Required: id.

list_all_unipile_scopes

List all Scopes of the current Unipile application, including their status and assigned Account and API Key counts. Returns: object, id, application_id, name, reference, status, created_at, accounts_count, api_keys_count.

create_a_unipile_scope

Create a Scope in the Unipile application as an isolation boundary restricting Account API Keys to assigned Accounts. Returns: object, id, application_id, name, reference, status, created_at, accounts_count, api_keys_count. Required: name.

get_single_unipile_scope_by_id

Get a single Unipile Scope by id, including its status and assigned Account and API Key counts. Returns: object, id, application_id, name, reference, status, created_at, accounts_count, api_keys_count. Required: id.

update_a_unipile_scope_by_id

Update a Unipile Scope's name, reference, or status by id. Returns the updated Scope: id, name, status, accounts_count. Required: id. Disabling a Scope blocks its Account API Keys and authentication flows until re-enabled.

delete_a_unipile_scope_by_id

Delete a Unipile Scope by id. Returns a confirmation with object set to ScopeDeleted. Required: id. The Scope must not contain any Accounts or API Keys, including expired API Keys.

list_all_unipile_webhooks_conversations

List the webhook delivery conversations of a Unipile Application — one record per event delivery attempt with its outcome, sorted newest first. Returns: first_attempt, event_type, created_at, http_status, endpoint_url, response_body, latency_ms, response_time_ms, object, id, endpoint_id, event_id. Required: endpoint_id.

list_all_unipile_webhooks_endpoints

List all webhook endpoints registered for the current Unipile application. Returns each endpoint's id, url, enabled, trigger_events, secret, and account_targets.

create_a_unipile_webhooks_endpoint

Create a Unipile webhook endpoint that receives events such as account status changes and new messages. Returns the created endpoint's id, url, trigger_events, secret, enabled flag, and account_targets. Required: url, trigger_events.

get_single_unipile_webhooks_endpoint_by_id

Get a single Unipile webhook endpoint by id. Returns the full endpoint object including id, url, trigger_events, secret, enabled, and account_targets. Required: id.

update_a_unipile_webhooks_endpoint_by_id

Update a Unipile webhook endpoint by id — change its url, description, subscribed trigger_events, account_ids, or enabled state. Returns the updated endpoint: id, url, trigger_events, secret, enabled, and account_targets. Required: id.

delete_a_unipile_webhooks_endpoint_by_id

Delete a Unipile webhook endpoint by id; Unipile stops delivering events to it. Returns: success. Required: id.

create_a_unipile_event_replay

Replay a stored Unipile webhook event to the currently enabled endpoints listening for it. Queues an asynchronous redelivery using the original event id and payload. Returns: object, event_id, endpoint_ids. Required: event_id.

get_single_unipile_chat_picture_by_id

Download the picture of a Unipile chat (the group picture or the counterpart's avatar) for providers that publish no public picture url — the download url is given by a Chat's `private_picture_download_url` field. Returns the picture as binary image data, not a JSON object. Required: id, account_id.

create_a_unipile_chats_send

Start a new 1to1 or group chat in Unipile by sending the first message. Returns: object, chat_id, message_id. Use messages_sends.create instead when a conversation already exists with the target users. Required: account_id, text, users_ids.

unipile_chats_sends_create_from_inbox

Start a new 1to1 or group chat inside a given Unipile inbox by sending the first message. Returns: object, chat_id, message_id. Use this instead of create when the provider uses the inbox concept. Required: inbox_id, account_id, text, users_ids.

list_all_unipile_chats

List all chats of a linked Unipile account across every inbox, sorted by most recent message. Returns: object, id, label, description, public_picture_url, private_picture_download_url, image_url, type, is_archived, unread_count, last_message, and 19 more. Required: account_id. Filtering is applied with AND logic only when the provider supports it.

update_a_unipile_chat_by_id

Update a chat on a linked Unipile account: rename it, pin/archive/mute it, set a label, or mark it read/unread; unprovided fields stay unchanged. Returns the updated Chat object with id, name, type, is_pinned, is_archived, unread_count. Required: id, account_id.

delete_a_unipile_chat_by_id

Delete a chat from a linked Unipile account, if the provider supports deletion. Returns an empty 204 response on success. Required: id, account_id.

unipile_chats_list_messages

List the messages of a specific chat from a linked Unipile account, newest first. Returns: object, id, text, sender_id, chat_id, timestamp, is_sender, is_hidden, is_seen, is_delivered, is_deleted, is_edited, is_pinned, is_event, is_mentionned, view_mode, event_type, event_metadata, attachments, and 8 more. Required: chat_id, account_id.

get_single_unipile_chat_by_id

Get a single chat by id from a linked Unipile account. Returns the Chat object with id, name, type, unread_count, participants_count and last_message. Required: id, account_id.

get_single_unipile_user_chat_by_id

Retrieve the chat a linked Unipile account shares with a specific user. Returns an array of resolved chats, each with chat_id, inbox_id, and has_history (empty when no chat can be resolved). Required: id, account_id.

list_all_unipile_inboxes

List the inboxes of a linked Unipile account — providers that use the inbox concept, such as LinkedIn messaging or IMAP folders. Returns: object, id, description, disabled. Required: account_id.

list_all_unipile_inboxe_chats

List Inbox Chats. Returns: object, id, name, label, description, public_picture_url, private_picture_download_url, image_url, created_at, updated_at, last_message_timestamp, muted_until, creator_id, user_id, is_group, is_1to1, is_channel, type, is_pinned, is_readonly, is_archived, folders, and 8 more. Required: inbox_id, account_id.

create_a_unipile_messages_send

Send a message to an existing chat on a connected Unipile account, with optional attachments (base64 in JSON, or multipart for large files). Returns: object, message_id. Required: chat_id, account_id, text.

get_single_unipile_chat_message_by_id

Get a single message in a Unipile chat by id. Returns the message object with its text, timestamp, sender_id, is_seen/is_deleted/is_pinned flags, attachments, reactions_counter, provider, and hyperlinks. Required: id, account_id, chat_id.

delete_a_unipile_chat_message_by_id

Delete a message from a chat in Unipile, if the provider supports it. Returns an empty 204 response on success. Only your own messages can be deleted; others' messages fail and may remain visible as deleted. Required: account_id, chat_id, id.

get_single_unipile_message_attachment_by_id

Download a message attachment file from a chat message in Unipile. Returns the raw attachment file binary (not a JSON record). Required: id, chat_id, message_id, account_id.

create_a_unipile_message_forward

Forward an existing Unipile message to another chat. Returns: object, message_id, chat_id. Required: chat_id, message_id, account_id.

create_a_unipile_message_modify

Modify a sent message in Unipile by replacing its text where the provider supports editing. Returns the modified Message with object, id, and text. Only the account's own messages can be modified; editing another user's message fails. Required: chat_id, message_id, account_id, text.

create_a_unipile_message_read

Mark a message in a Unipile chat as read on behalf of a connected account. Returns: object. Required: account_id, chat_id, message_id. Only messages sent by another user can be marked read; this does not change the chat's own read status.

list_all_unipile_chat_participants

List all participants of a Unipile group chat. Returns each participant with object, is_self, is_admin, and a nested user profile (id, display_name, type, profile_url). Required: account_id, chat_id. Fails for 1to1 chats — the unique participant is given on the chat object itself.

create_a_unipile_chat_participant

Add a user as a participant of a Unipile group chat. Returns: object. Required: account_id, chat_id, user_id. Providers may require admin rights, and adding a participant to a 1to1 chat can fail.

delete_a_unipile_chat_participant_by_id

Remove a participant user from a Unipile group chat. Returns: object. Providers may require admin rights; removing a participant from a 1to1 chat fails. Required: id, chat_id, account_id.

get_single_unipile_user_presence_by_id

Get a user's presence (online/last-seen status) as seen by a linked Unipile account. Returns: object, user_id, presence, last_online_at, provider. Required: id (the provider's user id, or `me` for the account owner) and account_id. Only supported by Instagram, LinkedIn, Telegram and WhatsApp.

get_single_unipile_user_by_id

Get a user profile in Unipile as visible to a linked account. Returns: id, object, type, public_identifier, display_name, first_name, last_name, profile_url, public_picture_url, private_picture_download_url, description, is_blocked, provider, and 26 more. Pass 'me' as user_id to retrieve the account owner's own profile. Required: id, account_id.

update_a_unipile_user_by_id

Update a user profile in Unipile on behalf of a linked account. Omitted fields stay unchanged, empty strings clear supported text fields, and null deletes nullable singleton resources. Multipart is also supported for file uploads. Returns: object. Pass 'me' as user_id to update the account owner's own profile. Required: id, account_id.

create_a_unipile_users_visit_profile

Report a user profile visit on behalf of a linked Unipile account to simulate engagement and activity. Returns: object. Required: token, account_id.

list_all_unipile_user_relations

List the relations (connections) of a specific user in Unipile. Returns: id, object, created_at, user. Required: user_id, account_id.

list_all_unipile_users_relation_requests

List pending relation (connection) requests sent or received by the linked account's user. Returns: object, type, id, created_at, message, user. Required: type, account_id.

create_a_unipile_users_relation_request

Send a relation (connection) request from the linked account's user to another user, optionally with a message. Returns the created request: object, type, id, created_at, message, and the target user. Required: account_id, user_id. Requests to an existing relation fail.

unipile_users_relation_requests_cancel

Cancel a pending relation (connection) request sent by the linked account's user, or refuse one received by them. Returns: object. Required: account_id, request_id.

create_a_unipile_relation_request_accept

Accept a received relation (connection) request on behalf of a linked Unipile account. Returns a confirmation object with object set to 'RelationRequestConfirmed'. Required: account_id, request_id. Accepting a request that was sent (rather than received) will fail.

list_all_unipile_user_followers

List the followers of a user on a connected Unipile account. Returns: id, object, type, public_identifier, display_name, first_name, last_name, profile_url, public_picture_url, private_picture_download_url, description, specifics. Max page size depends on the provider. Required: user_id, account_id.

list_all_unipile_user_followings

List the users a specific user follows via a connected Unipile account. Returns: id, object, type, public_identifier, display_name, first_name, last_name, profile_url, public_picture_url, private_picture_download_url, description, specifics. Required: user_id, account_id.

create_a_unipile_users_follow

Make a linked Unipile account's user follow another user. Returns a UserFollowed confirmation or, for private profiles, a RelationRequest with type, id, created_at, message, and user. Already-followed users fail. Required: follow_id, account_id.

create_a_unipile_users_unfollow

Make a linked Unipile account's user unfollow another user. Returns: object. Trying to unfollow a user who is not followed will fail. Required: unfollow_id, account_id.

delete_a_unipile_users_relation_by_id

Delete a bi-directional relation (connection) between a Unipile linked account's user and another user. Returns an empty 204 response on success. For uni-directional relations, use Unfollow User instead. Required: id, account_id.

list_all_unipile_contacts

List the contacts (address book) of a linked Unipile account, served by the account's email or messaging provider. Returns: object, id, user, public_picture_url, private_picture_download_url, picture_url, first_name, middle_name, last_name, display_name, suffix, company_name, job_title, emails, phone_numbers, and 8 more. Required: account_id.

get_single_unipile_user_picture_by_id

Download a Unipile user's profile picture for providers that publish no public picture URL (e.g. Telegram). Returns the raw picture file as a binary body, not a JSON object. The endpoint URL is given by the user's private_picture_download_url field. Required: id, account_id.

list_all_unipile_emails

List the emails of a linked Unipile account across folders, newest first. Returns each email's id, subject, snippet, date, from/to participants, attachments, folders, and is_unread. Required: account_id. Search via q, from, to, or any_email may return approximate, non-exhaustive results.

get_single_unipile_email_by_id

Get a single email of a linked Unipile account, including its folders, flags and attachments metadata. Returns: object, id, message_id, thread_id, body, body_plain, snippet, subject, headers, from, to, cc, bcc, reply_to, date, attachments, folders, categories, is_unread. Required: id, account_id.

delete_a_unipile_email_by_id

Move an email to trash in Unipile on behalf of a linked account. Returns a confirmation object with object set to "EmailTrashed". Required: id, account_id.

list_all_unipile_folder_emails

List emails in a specific folder of a linked account, sorted by date with the most recent first. Returns: object, id, message_id, body_plain, snippet, subject, from, to, date, attachments, folders, is_unread, and 7 more. Required: account_id, folder_id. Search-mode filters (q, from, to, any_email) may return approximate, non-exhaustive results.

get_single_unipile_thread_by_id

Get a Unipile email thread and its messages. Returns: object, id, emails. On IMAP, header-derived thread results may be incomplete. Required: id, account_id.

get_single_unipile_email_attachment_by_id

Download the attachment file of an Email in Unipile — the private download URLs returned on email objects point at this method. Returns the raw attachment file itself (content-type-specific binary content, not a JSON object). Required: id, email_id, account_id.

create_a_unipile_email_modify

Modify an email in Unipile: move it between folders or set provider-specific options such as Outlook categories. Returns the updated email object with its id, subject, folders, attachments, and is_unread. Required: account_id, email_id. Outlook emails can be in a single folder only.

create_a_unipile_email_unread

Mark an email as unread in Unipile on behalf of a connected account. Returns an acknowledgement with object (EmailUnread). Required: account_id, email_id.

create_a_unipile_email_read

Mark an email as read in Unipile. Returns: object. Required: account_id, email_id.

create_a_unipile_emails_send

Send an email from a linked Unipile account, with optional attachments (base64 in JSON or multipart for large files). Returns: object, id, message_id. Required: account_id, to. html is required for open/click tracking.

list_all_unipile_drafts

List the email drafts of a linked Unipile account, most recent first. Returns: object, id, thread_id, body, snippet, subject, from, to, cc, bcc, reply_to, attachments, folders, categories. Required: account_id.

create_a_unipile_draft

Create a new email draft in the draft folder of the linked Unipile account. Returns the created draft including id, subject, body, snippet, to recipients, and attachments. Required: account_id, to.

get_single_unipile_draft_by_id

Get a single Unipile email draft by id. Returns: object, id, thread_id, body, snippet, subject, from, to, cc, bcc, reply_to, attachments, folders, categories. Required: account_id, id.

update_a_unipile_draft_by_id

Update a Unipile draft by id, setting only the fields passed (recipients, subject, body, attachments, tracking) and leaving the rest unchanged. Returns the updated draft including its id, subject, body, snippet, and attachments. Required: account_id, id.

unipile_drafts_send

Send an existing Unipile draft to the recipients in its to, cc, and bcc fields; the draft becomes a sent email. Returns: object, id, message_id. Required: account_id, draft_id.

delete_a_unipile_draft_by_id

Permanently delete a draft in Unipile. Returns an empty 204 response on success. Required: id, account_id.

list_all_unipile_folders

List folders in a linked Unipile account's mailbox (Gmail labels are exposed as folders). Returns each folder's id, name, role, total_count, and unread_count. Required: account_id.

create_a_unipile_folder

Create a new folder (a label for Gmail) in a linked Unipile account's mailbox. Returns the created folder's id, name, role, and unread_count. Required: account_id, name.

update_a_unipile_folder_by_id

Update a folder in a linked Unipile account's mailbox to rename it or move it under a parent. Returns the updated folder's id, name, role, and unread_count. Omitted fields are left unchanged. Required: id, account_id.

delete_a_unipile_folder_by_id

Delete a folder from a linked Unipile account's mailbox. Returns an empty 204 response on success. Required: account_id, id.

list_all_unipile_email_senders

List the email senders configured for a linked Unipile account — the valid `from` values when sending emails or creating drafts. Returns: object, email, display_name, is_primary, is_default, verification_status, signature. Required: account_id. Supported for Google and Outlook accounts.

list_all_unipile_calendars

List the calendars of a linked Unipile account (Google, Outlook or IMAP providers). Returns each calendar's id, name, description, is_read_only, is_default, colors, and timezone. Required: account_id.

create_a_unipile_calendar

Create a new calendar for a linked Unipile account (Google, Outlook or IMAP providers). Returns the created calendar's id, name, description, colors, and timezone. Required: account_id, name.

get_single_unipile_calendar_by_id

Get a single calendar of a linked Unipile account by id. Returns the calendar's object, id, name, description, is_read_only, colors, and timezone. Required: id, account_id.

update_a_unipile_calendar_by_id

Update a calendar of a linked Unipile account by id; any parameters not provided are left unchanged. Returns the updated calendar's id, name, description, colors, and timezone. Required: id, account_id.

delete_a_unipile_calendar_by_id

Delete a calendar of a linked Unipile account by id. Returns an empty 204 response on success. Required: id and account_id.

get_single_unipile_calendar_event_by_id

Get a calendar event by id from a Unipile calendar. Returns the event object with id, title, start, end, attendees with response statuses, organizer, and visibility. Required: id, account_id, calendar_id.

update_a_unipile_calendar_event_by_id

Update a calendar event by id in a Unipile calendar; omitted fields are left unchanged. Returns the updated event with id, title, start, end, and attendees. Required: id, account_id, calendar_id.

delete_a_unipile_calendar_event_by_id

Delete a calendar event by id from a Unipile calendar. Returns an empty 204 response on success. Required: id, account_id, calendar_id.

unipile_calendar_events_cancel

Cancel a calendar event and notify its attendees; only the organizer can cancel (distinct from delete, which removes the event from the connected account's calendar). Returns an empty 204 response on success. Required: event_id, account_id, calendar_id.

unipile_calendar_events_restore

Restore a calendar event previously cancelled by the connected account; organizer only, Google Calendar only, and only while Google still holds the cancelled event's data. Returns an empty 204 response on success. Required: event_id, account_id, calendar_id.

list_all_unipile_calendar_events

List calendar events of a specific calendar of a linked Unipile account, filterable by title, description, iCal UID, location, start/end window, and cancelled state. Returns CalendarEvent records with id, calendar_id, title, start, end, attendees, organizer, visibility, and transparency. Required: account_id, calendar_id.

create_a_unipile_calendar_event

Create a calendar event on a specific calendar of a linked Unipile account. Returns the created CalendarEvent with id, calendar_id, title, start, end, attendees, organizer, visibility, and transparency. Required: account_id, calendar_id, title, attendees, start, end.

create_a_unipile_event_rsvp

Set the connected account's RSVP response to a calendar event. Returns an empty 204 response on success. Required: account_id, calendar_id, event_id, status. For Outlook, the organizer cannot respond and declining also removes the event from the calendar.

list_all_unipile_user_posts

List the posts published by a specific user on a connected Unipile account, newest first. Returns: object, id, share_url, created_at, title, text, user_reacted, permissions, reactions_counter, comments_counter, reposts_counter, poll, event, attachments, analytics, is_repost, author, reposted_by, and 2 more. Required: user_id, account_id.

get_single_unipile_post_by_id

Get a Unipile post by id. Returns: object, id, share_url, created_at, title, text, user_reacted, permissions, reactions_counter, comments_counter, reposts_counter, poll, event, attachments, analytics, is_repost, author, reposted_by, quoted_post, specifics. Required: account_id, id. Use post IDs returned by other posts methods only.

update_a_unipile_post_by_id

Update a Unipile post's text and comment visibility by id. Returns the updated post with id, share_url, created_at, text, author, permissions, engagement counters, and attachments. Required: account_id, id. Comment control is only applied where the provider supports it.

delete_a_unipile_post_by_id

Delete a Unipile post by id; only posts created by the account owner can be deleted, so deleting another user's post fails. Returns an empty 204 response on success. Required: account_id, id.

create_a_unipile_post

Create a post (text, media, or article) as a linked Unipile account, with optional base64 or multipart attachments. Returns the created Post object with id, share_url, created_at, text, author, and reaction/comment/repost counters. Required: account_id, text.

unipile_posts_list_comments

List the comments on a Unipile post, sorted by creation date with the most recent first. Returns each comment's id, text, created_at, author, attachments, and reply/reaction counters. Required: account_id, post_id.

unipile_posts_attach_comment

Add a top-level comment to a post in Unipile. Returns the created Comment object including id, author, text, created_at, attachments, and reply/reaction counters. Required: account_id, post_id, text. User mentions use @ followed by the user's id or public_identifier; large attachment files should prefer multipart upload.

create_a_unipile_posts_story

Create a story (ephemeral post) in Unipile from a single image or video attachment as the linked account, if the provider supports stories. Returns: object, id, provider_id, media_type, created_at, expires_at. Required: account_id, attachment.

create_a_unipile_post_comment

Reply to a post comment in Unipile, creating a nested reply. Returns the created Comment object including id, author, created_at, text, attachments, is_sender, reply_counter, and reactions_counter. Required: account_id, post_id, comment_id, text.

update_a_unipile_post_comment_by_id

Edit an existing post comment in Unipile. Returns the updated Comment object including id, author, created_at, text, attachments, is_sender, reply_counter, and reactions_counter. Required: id, post_id, account_id, text.

delete_a_unipile_post_comment_by_id

Delete the account owner's comment from a Unipile post; deleting a comment from another user will fail. Returns an empty 204 response on success. Required: id, account_id, post_id.

list_all_unipile_comment_replies

List the replies to a comment on a Unipile post, sorted by creation date with the most recent first. Returns: object, id, thread_id, created_at, text, attachments, is_sender, can_reply, can_react, reply_counter, impressions_counter, reactions_counter, author. Required: account_id, post_id, comment_id.

list_all_unipile_recruiter_job_slots_credits

List the job-slot credits of the linked LinkedIn Recruiter account in Unipile. Returns: object, total, used, available. Required: account_id.

list_all_unipile_linkedin_inmail_credits

Get the InMail credits remaining for a linked LinkedIn account in Unipile, by service or across all subscribed services. Returns: object, credits. Required: account_id.

list_all_unipile_linkedin_contracts

List the LinkedIn Recruiter/Sales Navigator contracts available to a linked Unipile account. Returns an AvailableContracts envelope whose contracts array items each carry object, id, name, product (recruiter or sales_navigator), selected, and description. Required: account_id.

create_a_unipile_contract_select

Activate a LinkedIn Recruiter or Sales Navigator contract on a Unipile account. Returns the ContractSelected confirmation including object and the selected contract's id, name, product, selected, and description. Required: account_id, contract_id.

create_a_unipile_linkedin

Execute a raw request to any public LinkedIn API endpoint on behalf of a linked account, for LinkedIn features Unipile does not natively support. Returns the raw response from the called LinkedIn endpoint; its shape depends on that endpoint. Required: account_id, url, method.

unipile_linkedins_search

Run a LinkedIn Classic search from a search URL on behalf of a linked account. Returns matching people, companies, jobs or posts — fields vary by result type, e.g. display_name, headline, industry, title, company, text, author. Required: account_id, url.

list_all_unipile_analytics_profile_views

List the LinkedIn users who recently viewed a Unipile account's profile. Returns object, entities (viewers with id, public_identifier, name, premium, verified, last_visited) and analytics (views_count, highlights, details). Required: account_id. Non-premium accounts get limited data and search filters are ineffective.

create_a_unipile_endorse_skill

Endorse a member's skill on LinkedIn as the linked Unipile account, validating a given skill for one of your relations. Returns: object. Required: account_id, member_id, skill_id.

list_all_unipile_company_pages

List the LinkedIn company pages the linked Unipile account manages (pages where the account user is an administrator). Returns: object, id, mailbox_id, name, messaging_enabled. Required: account_id.

get_single_unipile_linkedin_company_by_id

Get a LinkedIn company profile by id via Unipile on behalf of a connected account. Returns the company object including id, name, description, tagline, industry, locations, insights, funding, and hashtags. Required: id, account_id.

create_a_unipile_member_verify_email

Send the Unipile verification email/OTP challenge to verify a member's identity for a Classic company-page admin action. Returns: object, challenge_id. Required: account_id, company_id, email.

create_a_unipile_member_submit_otp

Submit the OTP verification code to complete a member's identity verification for a Unipile Classic company-page admin action. Returns: object. Required: account_id, company_id, email, code, challenge_id.

list_all_unipile_search_parameters

List LinkedIn search parameters available for a Unipile account, filtered by type and keywords. Returns: object, id, name, metadata. Required: account_id, type, keywords. Max 100 per page.

list_all_unipile_search_search_people

Search LinkedIn people on behalf of a Unipile account, using keyword and filter-based criteria. Returns each match with object, id, display_name, network_distance, headline, and profile_url. Required: account_id.

list_all_unipile_search_search_companies

Search LinkedIn companies through a connected Unipile account, with optional filters for keywords, location, industry, headcount range, job postings, and relations. Returns: object, id, display_name, public_identifier, profile_url, public_picture_url, public_picture_url_large, location, industry, summary, and 4 more. Required: account_id.

list_all_unipile_search_search_jobs

Search LinkedIn job postings through a connected Unipile account. Returns each posting's id, title, location, listed_at, workplace_type, url, company, and insights. Required: account_id. Max 100 per page.

list_all_unipile_search_search_posts

Search LinkedIn posts through a connected Unipile account. Returns matching posts with id, share_url, created_at, text, author, reactions_counter, and attachments. Supports keyword, sort, date-posted, content-type, author, and mention filters. Required: account_id. Max 49 posts per page, defaults to 3 (matching LinkedIn's UI).

list_all_unipile_linkedin_jobs

List the LinkedIn job postings created by the linked Unipile account, filtered by posting state. Returns: object, product, id, title, company, location, state, applications_count, workplace_type, is_repost, is_application_limit_reached, industries, employment_status, created_at, and 13 more. Required: account_id, state. Max 100 per page.

create_a_unipile_linkedin_job

Create a Classic job-posting draft on a linked LinkedIn account; publish it later via the Publish endpoint. Returns: object, job_id. Required: account_id, job_title, company, workplace_type, location, employment_status, description, apply_method.

get_single_unipile_linkedin_job_by_id

Get a LinkedIn job posting by id. Returns: object, product, id, title, company, location, state, workplace_type, is_repost, is_application_limit_reached, industries, employment_status, created_at, published_at, expires_at, closed_at, description, budget, views_count, applications_count, screening_questions, and 5 more. Required: id, account_id.

update_a_unipile_linkedin_job_by_id

Edit an existing LinkedIn job posting by id; only the fields you send are changed. Returns: object. Required: id, account_id.

unipile_linkedin_jobs_publish

Publish a LinkedIn job-posting draft by job_id, in FREE mode or PROMOTED/PROMOTED_PLUS mode with a budget. Returns: object, job_state. Required: job_id, account_id, mode.

unipile_linkedin_jobs_close

Close a Classic job posting in Unipile so applications can no longer be submitted. Returns the confirmation object: object (JobPostingClosed). Required: account_id, job_id.

get_single_unipile_job_budget_by_id

Get the budget ranges, recommended daily and total budgets, currency, and estimated applicant impact for a Classic LinkedIn job posting in Unipile. Returns: object, product, promoted, free. Required: id, account_id.

get_single_unipile_job_applicant_by_id

Get a Classic job-posting applicant by id, including screening-question responses, rating and profile. Returns: object, product, id, messaging_token, applied_at, viewed_at, last_messaged_at, rating, contact_info, has_resume, screening_questions, profile. Required: id, job_id, account_id.

unipile_job_applicants_get_resume

Download a Classic job-posting applicant's resume. Returns the raw resume file as a binary response. Required: applicant_id, account_id, job_id.

list_all_unipile_job_applicants

List applicants to a Classic job posting, filterable by ratings, keywords, location, skills, and years of experience. Returns: object, product, id, messaging_token, applied_at, viewed_at, last_messaged_at, rating, contact_info, has_resume, screening_questions, profile. Required: account_id, job_id.

list_all_unipile_recruiter_projects

List the Unipile Recruiter hiring projects of a connected LinkedIn account. Returns: object, id, name, readonly, archived, created_at, last_accessed_at, last_modified_at, visibility, owner, metadata, talent_pool, pipeline, project_id. Required: account_id. Max 100 per page.

create_a_unipile_recruiter_project

Create a Unipile Recruiter hiring project in the current contract of a connected LinkedIn account. Returns: object, project_id. Required: account_id, name, visibility.

get_single_unipile_recruiter_project_by_id

Get a Unipile Recruiter hiring project by id. Returns the full project object including id, name, visibility, owner, metadata, talent_pool, and pipeline. Required: id, account_id.

update_a_unipile_recruiter_project_by_id

Edit a Unipile Recruiter hiring project by id, updating only the fields provided. Returns a confirmation object with object set to ProjectEdited. Required: id, account_id.

get_single_unipile_project_pipeline_by_id

List candidates from a Hiring Project's pipeline in LinkedIn Recruiter via Unipile. Returns each candidate's object type and profile (id, display_name, headline, candidate_id, hiring_project, work_experience). Required: id, account_id.

list_all_unipile_search_project_talent_pools

Search the talent pool of a LinkedIn Recruiter hiring project in Unipile by keywords and recruiter filters (locations, job titles, companies, skills, seniority, spotlights, and more). Returns PeopleSearchResult records including id, headline, location, and 2 more fields. Required: account_id, project_id, channel_id. Max 100 results per page.

unipile_linkedin_recruiters_search

Run a LinkedIn Recruiter search from a Recruiter search URL on behalf of a connected account. Returns matching PeopleSearchResult profiles with id, display_name, headline, location, visibility, work_experience, education, and skills. Required: account_id, url. Requires a Recruiter seat.

list_all_unipile_recruiter_jobs

List Unipile Recruiter job postings created by the current user or related job posters on the linked LinkedIn account. Returns: object, product, id, project_id, title, company, location, state, applications_count, views_count, workplace_type, industries, job_functions, employment_status, and 10 more. Required: account_id. Max 100 per page.

create_a_unipile_recruiter_job

Create a Unipile Recruiter job-posting draft in a new project; publish it later via the Publish endpoint. Returns: object, job_id, project_id. Required: account_id, job_title, company, workplace_type, location, employment_status, seniority_level, description, industry, job_function, apply_method, project_name.

get_single_unipile_recruiter_job_by_id

Get a Unipile Recruiter job posting by id. Returns the full JobPosting including title, company, location, state, employment_status, experience_level, description, applications_count, screening_questions, and hiring_team. Required: id, account_id.

list_all_unipile_project_jobs

List the job postings of a LinkedIn Recruiter hiring project. Returns each posting's id, title, state, company, location, industries, employment_status, applications_count, and hiring_team. Required: account_id, project_id.

create_a_unipile_project_job

Create a LinkedIn Recruiter job-posting draft in an existing hiring project; publish it later with the publish method. Returns: object, job_id, project_id. Required: account_id, project_id, job_title, company, workplace_type, location, employment_status, seniority_level, description, industry, job_function, apply_method.

update_a_unipile_project_job_by_id

Edit an existing LinkedIn Recruiter job posting within a hiring project; only supplied body fields are changed. Returns: object. Required: id, project_id, account_id.

unipile_project_jobs_publish

Publish a LinkedIn Recruiter job-posting draft, making it live in FREE mode (requires eligibility) or PROMOTED mode with an optional budget. Returns: object, job_state. Required: account_id, project_id, job_id, mode.

unipile_project_jobs_close

Close a LinkedIn Recruiter job posting so applications can no longer be submitted. Returns: object. Required: account_id, project_id, job_id.

get_single_unipile_talent_pool_applicant_by_id

Get a single LinkedIn Recruiter talent pool applicant by id. Returns: object, product, id, applied_at, has_resume, screening_questions, profile. Required: id, account_id, project_id.

unipile_talent_pool_applicants_get_resume

Download an applicant's resume from a LinkedIn Recruiter talent pool. Returns the raw resume file for download (no documented JSON body). Required: account_id, project_id, applicant_profile_id.

list_all_unipile_talent_pool_applicants

List applicants in a LinkedIn Recruiter hiring project's talent pool, filterable and sortable via the request body. Returns: object, product, id, applied_at, has_resume, screening_questions, profile. Required: account_id, project_id. Max 100 per page.

unipile_candidate_saves_lookup

Save a LinkedIn Recruiter candidate from a search or talent pool into a Unipile hiring project's pipeline. Returns a confirmation object with the field object (set to CandidateSaved). Required: account_id, project_id, stage_id, candidate_id.

list_all_unipile_sales_navigator_account_lists

List the Sales Navigator account lists of a Unipile connected account with their item counts. Returns: type, id, name, description, items_count, last_modified_at, last_viewed_at. Required: account_id. Max 100 per page.

create_a_unipile_sales_navigator_account_list

Browse a Sales Navigator account list in Unipile: return the companies saved in the given list, optionally filtered by persona or native filter and sorted by date added or name. Returns: id, display_name, public_identifier, profile_url, public_picture_url, industry, headcount, is_starred, and 13 more. Required: account_list_id, account_id.

list_all_unipile_sales_navigator_lead_lists

List the Sales Navigator lead lists of a linked Unipile account with their item counts. Returns: type, id, name, description, items_count, last_modified_at, last_viewed_at. Required: account_id.

create_a_unipile_sales_navigator_lead_list

Browse the leads saved in a Sales Navigator lead list on a linked Unipile account, filterable and sortable. Returns each SavedLead with id, display_name, network_distance, saved_at, and associated_account. Required: account_id, lead_list_id.

create_a_unipile_account_list_save

Save a company account to a Unipile Sales Navigator account list. Returns a confirmation with object set to AccountSaved. Required: account_id, list_id, company_id.

create_a_unipile_lead_list_save

Save a lead to an existing LinkedIn Sales Navigator lead list on behalf of a Unipile account. Returns a confirmation object with `object` set to LeadSaved. Required: list_id, account_id, user_id.

unipile_linkedin_sales_navigators_search

Perform a LinkedIn Sales Navigator search from a saved-search URL via Unipile. Returns matching person or company records including object, id, display_name, headline, location, profile_url, and network_distance. Required: account_id, url. Requires a Sales Navigator seat.

list_all_unipile_search_locations

Search Instagram locations by name on behalf of a Unipile account, optionally using latitude and longitude to influence the relevance ranking of results (useful for tagging a post with a location). Returns each location's object, id, source, name, address, latitude, and longitude. Required: account_id.

create_a_unipile_presence

Set the presence status of a linked Unipile account to online, restricted_online, offline, or away. Returns a confirmation where object is PresenceSet. Required: account_id, presence.

create_a_unipile_chat_composing

Set the composing status (typing or recording) of a Unipile linked account in a specific chat. Returns: object. Required: account_id, chat_id, action.

list_all_unipile_recruiter_search_parameters

List the search parameters (facets) available for LinkedIn Recruiter searches, from applicants, pipelines, searches, job postings, or jobs. Returns SearchParameter items with their object type, id, name, and optional metadata. Required: account_id, source, type. project_id is also required when source is APPLICANTS or PIPELINE.

list_all_unipile_salesnav_search_parameters

List the search parameters (facets) available for LinkedIn Sales Navigator searches on an account. Returns: object, id, name, metadata. Required: account_id, type. Max 100 per page.

list_all_unipile_recruiter_search_people

Search people on LinkedIn Recruiter with filters such as keywords, locations, skills, current companies, and spotlights. Returns a list of people from the search results, including each person's id, name, headline, and profile url. Requires: account_id. Requires a Recruiter seat. Required: account_id.

list_all_unipile_salesnav_search_people

Search people with LinkedIn Sales Navigator filters such as keywords, seniority, company, persona and lists, on behalf of a connected account. Returns matching people with id, display_name, headline, location and network_distance. Required: account_id. Requires a Sales Navigator seat.

list_all_unipile_salesnav_search_companies

Search companies with LinkedIn Sales Navigator filters such as keywords, location, industry, headcount, and spotlights. Returns matching companies including id, display_name, location, industry, headcount, and website. Max 100 results per page; requires a Sales Navigator seat. Required: account_id.

get_single_unipile_project_job_budget_by_id

Get the budget ranges and estimated impact for a LinkedIn Recruiter project job posting in Unipile. Returns: object, product, promoted, free. Required: id, account_id, project_id.

create_a_unipile_recruiter_member_verify_email

Trigger the identity verification email challenge for a LinkedIn Recruiter company page member in Unipile. Returns: object, challenge_id, id, api_key. Required: account_id, company_id, email.

create_a_unipile_recruiter_member_submit_otp

Submit the OTP verification code to complete member identity verification for a LinkedIn Recruiter company page in Unipile. Returns: object, id, api_key. Requires account_id, company_id, email, code, and challenge_id from the member verification response. Required: company_id, account_id, email, code, challenge_id.

list_all_unipile_message_reactions

List all reactions made to a message with their counts.

create_a_unipile_message_reaction

Add a reaction to a message. Providers may restrict the allowed emoji set.

unipile_message_reactions_bulk_delete

Remove the authenticated account's reaction from a message.

list_all_unipile_post_reactions

List all reactions made to a post. Returns each reaction with object, value, is_sender, and its sender profile (id, display_name, type). Required: account_id, post_id. On Instagram the list is always capped at 100 reactions.

create_a_unipile_post_reaction

Add a reaction to a post. Returns: object, id, api_key. Required: account_id, post_id, reaction. Use an emoji unicode if the provider supports it, else a provider-prefixed reaction type (e.g. linkedin_like); unsupported reactions fail.

unipile_post_reactions_bulk_delete

Remove a reaction from a post. Returns: object, openapi, info, servers, security, tags, paths, components. Required: post_id, account_id, reaction.

list_all_unipile_comment_reactions

List all reactions made to a post comment in Unipile. Returns each reaction with its object type, value (emoji unicode), is_sender flag, and the sender user profile including id, display_name, and type. Required: account_id, post_id, comment_id.

create_a_unipile_comment_reaction

Add a reaction to a post comment in Unipile. Returns a confirmation object with object set to CommentReactionAdded. Required: account_id, post_id, comment_id, reaction. Some providers only support a limited reaction list (e.g. linkedin_like, instagram_like).

unipile_comment_reactions_bulk_delete

Remove the connected account's own reaction from a post comment in Unipile; removing another user's reaction will fail. Returns a confirmation object with object set to CommentReactionRemoved. Required: account_id, post_id, comment_id, reaction.

list_all_unipile_user_reactions

List the reactions made by a specific user to posts. Returns a ReactionsList whose reaction items include reaction_type, date, and author. Required: user_id, account_id.

list_all_unipile_user_comments

List the comments a specific user has made on posts via their connected Unipile account. Returns the list of the user's comments, paginated (default page size 20). Required: user_id, account_id.

Why Truto

Why use Truto’s MCP server for Unipile

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 850+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with Unipile in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Unipile account

Use Truto’s frontend SDK to connect your customer’s Unipile account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Unipile

Truto’s Proxy API is a 1-to-1 mapping of the Unipile API. You call us, we call Unipile, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Unipile’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Unipile on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How do end users connect their accounts?

You create a Unipile auth intent and hosted auth link via Truto, which your user completes (login, QR scan for WhatsApp/Telegram, or OAuth for Google/Microsoft). Truto returns an account ID you store against the user for all future API calls.

How are LinkedIn security checkpoints and 2FA handled?

When LinkedIn triggers a checkpoint, Unipile exposes it through the checkpoint endpoints. You prompt your user for the OTP or verification code in your UI, submit it via the checkpoint request/resend tools, and the session resumes automatically.

How do we receive real-time messages and events?

Register a webhook endpoint through Truto to receive events for new chats, messages, email, and connection activity across all connected accounts. You can also replay events if your endpoint was down.

Which messaging and email providers are covered by a single API surface?

The chat, message, and inbox tools work uniformly across LinkedIn, WhatsApp, Telegram, and Instagram, while the email, folder, draft, thread, and calendar tools cover Gmail, Outlook, and IMAP providers.

Can we support LinkedIn Sales Navigator and Recruiter seats?

Yes. There are dedicated tools for Sales Navigator (people/company search, account and lead lists, saves) and for LinkedIn Recruiter (projects, talent pools, applicants, resumes, job slot and InMail credits, project jobs).

How does Truto make this faster to ship than hitting Unipile directly?

Truto handles the hosted auth connection UI, token and account storage per end user, webhook delivery and retries, pagination, and error normalization — so your team only writes business logic against the Unipile tools listed above.

Unipile

Get Unipile integrated into your app

Our team understands what it takes to make a Unipile integration successful. A short, crisp 30 minute call with folks who understand the problem.