---
title: Unipile API Integration on Truto
slug: unipile
category: IM
canonical: "https://truto.one/integrations/detail/unipile/"
---

# Unipile API Integration on Truto



**Category:** IM  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 183 tools for Unipile that AI agents can call directly.

- **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.

## How it works

1. **Link your customer's Unipile account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Unipile.** The Proxy API is a 1-to-1 mapping of the Unipile API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **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.
- **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.
- **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.
- **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.
- **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

- **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.
- **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.
- **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.
- **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.
- **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.
- **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.

## FAQs

### 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.
