# Extrovert API ## Docs - [REST API](https://api-docs.goextrovert.com/api-reference/introduction.md): Pull data and manage campaigns, prospects, and content with the Extrovert REST API - [Webhooks](https://api-docs.goextrovert.com/api-reference/webhooks.md): Integrate Extrovert with external systems through webhooks - [List Team Members](https://api-docs.goextrovert.com/api-reference/team-members/list-team-members.md): Returns all users visible to the current user inside their selected team. Optionally narrow the result by `registrationType` — e.g. to show only invited members or only managed accounts. - [Get Current Workspace Plan Features](https://api-docs.goextrovert.com/api-reference/workspace/get-current-workspace-plan-features.md): Returns the capabilities granted by the workspace's current plan: `planName`, `isPlanActive`, the list of boolean capability flags (`features`), and the list of counter quotas with their effective `max` (`counters`). - [List Prospect Lists on Campaign](https://api-docs.goextrovert.com/api-reference/prospects/list-prospect-lists-on-campaign.md): Returns all prospect lists attached to a campaign. Each list groups LinkedIn prospect URLs and exposes counters (total, currently enriching, importing). Lists belong to exactly one campaign. - [Get Prospect List](https://api-docs.goextrovert.com/api-reference/prospects/get-prospect-list.md): Loads a single prospect list by id, including counters and the parent campaign id. - [Update Prospect List](https://api-docs.goextrovert.com/api-reference/prospects/update-prospect-list.md): Updates a prospect list's name and parent campaign. If `campaignId` differs from the current parent campaign, the list and all its prospects are moved to that campaign. The returned id is the resulting list id and may differ after a move. - [Create prospect list with LinkedIn profile URLs](https://api-docs.goextrovert.com/api-reference/prospects/create-prospect-list-with-linkedin-profile-urls.md): Creates a new prospect list inside the given campaign and seeds it with the provided LinkedIn profile URLs. The backend validates URLs and may reject some as invalid, duplicates, or out-of-limit. The response describes which URLs were submitted, rejected, or already existed elsewhere. Profile existe… - [Delete Inactive Prospects In List](https://api-docs.goextrovert.com/api-reference/prospects/delete-inactive-prospects-in-list.md): Deletes prospects with inactive LinkedIn profiles in the given scope and always rejects their pending post activities. The prospect list itself is kept. Scope: pass `listId` to narrow to a single list, or `campaignId` to apply to every list in the campaign; at least one must be provided. - [Add LinkedIn profile URLs to an existing prospect list](https://api-docs.goextrovert.com/api-reference/prospects/add-linkedin-profile-urls-to-an-existing-prospect-list.md): Adds LinkedIn profile URLs to an existing prospect list. Same validation and duplicate rules as create-list. The response describes which URLs were accepted, rejected, or skipped as duplicates. - [Delete Prospect List](https://api-docs.goextrovert.com/api-reference/prospects/delete-prospect-list.md): Deletes a prospect list and all its prospects, and always rejects their pending/approvable post activities. Pass `listId` and `campaignId` together. - [List Prospects](https://api-docs.goextrovert.com/api-reference/prospects/list-prospects.md): Returns visible prospects with their campaign/list bindings and optional pagination information. Use `listId` to scope to a single list, or pass broader filter arrays for campaign-wide prospect management. This endpoint returns existing prospects only — it does not add them. To add new LinkedIn prof… - [Find Prospect By LinkedIn URL](https://api-docs.goextrovert.com/api-reference/prospects/find-prospect-by-linkedin-url.md): Checks whether a LinkedIn profile URL already exists among the team's prospects and returns all matching prospect records if found. This only searches existing prospects — it does not add them. To add new LinkedIn profiles, add their URLs to a prospect list (`create-list` or `add-users-to-list`). - [Get Prospect](https://api-docs.goextrovert.com/api-reference/prospects/get-prospect.md): Loads one prospect by id with the current campaign/list bindings, flags, connection data, and lightweight statistics. - [Delete Selected Prospects](https://api-docs.goextrovert.com/api-reference/prospects/delete-selected-prospects.md): Deletes prospects so they stop appearing in campaign lists and always rejects their posts currently in 'Need approval' status. Two modes: (1) When `areAllSelected` is false, each `targetUsersData` entry is a (userId, LinkedIn profile id) pair — the backend deletes every prospect record with that Lin… - [Move Selected Prospects](https://api-docs.goextrovert.com/api-reference/prospects/move-selected-prospects.md): Moves prospects between lists or into a new list inside the target campaign. Exactly one destination is required: pass `newListId` to reuse an existing list, or `newListName` to create a destination list. Pass one item in `prospectsIds` for a single-prospect case, or many items for a bulk operation.… - [Mark Prospect As Important](https://api-docs.goextrovert.com/api-reference/prospects/mark-prospect-as-important.md): Single-prospect operation: updates the important flag for one prospect. - [List Prospects With Statistics](https://api-docs.goextrovert.com/api-reference/prospects-legacy/list-prospects-with-statistics.md): Returns prospects in a campaign together with their list membership and per-prospect engagement counters (posts fetched, direct and indirect comments, likes, connection status). - [Add Prospect](https://api-docs.goextrovert.com/api-reference/prospects-legacy/add-prospect.md): Single-prospect operation: adds one prospect to a prospect list inside a campaign. If the prospect already exists elsewhere in the owner's team, the duplicate behavior is controlled by `moveDuplicatedProspect`. - [Remove Prospect From Campaign](https://api-docs.goextrovert.com/api-reference/prospects-legacy/remove-prospect-from-campaign.md): Single-prospect operation: removes one prospect from one campaign and always rejects that prospect's posts currently in 'Need approval' status. The prospect record may still exist in other campaigns or in other teammates' campaigns within the same team. - [Remove Prospect From Team](https://api-docs.goextrovert.com/api-reference/prospects-legacy/remove-prospect-from-team.md): Single-prospect operation with team-wide scope: removes one prospect from every campaign across every teammate in the team and always rejects that prospect's posts currently in 'Need approval' status. Use for full offboarding — when the prospect should not be re-engaged by anyone in the team. Cannot… - [List comments](https://api-docs.goextrovert.com/api-reference/comments/list-comments.md): Lists one campaign's comment feed for an owner and review state. Results include the post, author, effective prospect context, current draft, state, and only actions valid now. `plannedAt` fills only when the campaign spaces approved comments with a posting interval — null means posting starts right… - [Get comment](https://api-docs.goextrovert.com/api-reference/comments/get-comment.md): Returns the current owner-global comment by postId and ownerId across every state. The read is non-destructive and is the recovery check after an ambiguous write. `plannedAt` fills only when the campaign spaces approved comments with a posting interval — null means posting starts right after approva… - [Generate or improve comment draft](https://api-docs.goextrovert.com/api-reference/comments/generate-or-improve-comment-draft.md): Creates a new Extrovert comment draft or improves the current draft using the selected campaign's Voice. It does not approve or post the comment. Success confirms the command completed; use Get comment when the resulting text or state is needed. The comment identity is postId + ownerId and the chang… - [Set comment draft text](https://api-docs.goextrovert.com/api-reference/comments/set-comment-draft-text.md): Sets the exact comment text for later review and approval. It creates an ordinary draft when none exists and never calls Extrovert generation. It does not post the comment. The comment identity is postId + ownerId and the change is owner-global: it also applies to sibling campaign activities of the… - [Set comment and reaction](https://api-docs.goextrovert.com/api-reference/comments/set-comment-and-reaction.md): Chooses whether approval posts a comment, a LinkedIn reaction, or both. A reaction is required for Comment and react and React only. This action changes the draft configuration but does not post anything. The comment identity is postId + ownerId and the change is owner-global: it also applies to sib… - [Approve comment](https://api-docs.goextrovert.com/api-reference/comments/approve-comment.md): Approves the current owner-global comment/reaction and queues the consequential LinkedIn action. Success means the command was accepted for the existing Pending/publication lifecycle, not that the comment is already live. Use Get comment when current state is needed. The comment identity is postId +… - [Cancel comment posting](https://api-docs.goextrovert.com/api-reference/comments/cancel-comment-posting.md): Attempts to cancel a Pending comment before LinkedIn posting starts. Success confirms cancellation and moves the comment to the Skipped state (use unskip to restore it); a request that is already too late returns an error rather than success. Use Get comment when current state is needed. The comment… - [Skip comment](https://api-docs.goextrovert.com/api-reference/comments/skip-comment.md): Moves the owner-global comment out of the active review flow without posting a comment or reaction. Use unskip to restore a Skipped comment to review. The comment identity is postId + ownerId and the change is owner-global: it also applies to sibling campaign activities of the same owner, even when… - [Unskip comment](https://api-docs.goextrovert.com/api-reference/comments/unskip-comment.md): Returns a Skipped owner-global comment to the active review flow as Need approval, preserving the existing draft when one exists. It does not post anything; a comment that is not currently Skipped is rejected. Use Get comment when current state is needed. The comment identity is postId + ownerId and… - [List Comment Examples on a Voice](https://api-docs.goextrovert.com/api-reference/voice-comment-examples/list-comment-examples-on-a-voice.md): Returns all Comment Examples attached to the given Voice. A Comment Example is a full sample comment (either captured by the backend from the user's real activity, or added manually) that is used as a writing-style sample when generating comments under that Voice. Entries appear via two paths: (1) a… - [Create Comment Example](https://api-docs.goextrovert.com/api-reference/voice-comment-examples/create-comment-example.md): Adds a new Comment Example to a Voice. The text should be a complete, polished sample comment in the desired tone of voice — it will be used as a writing-style sample when generating comments. Prefer several short, varied examples over one long block. Text limit: 1250 characters. Up to 20 entries pe… - [Get Comment Example](https://api-docs.goextrovert.com/api-reference/voice-comment-examples/get-comment-example.md): Loads a single Comment Example by id. - [Delete Comment Example](https://api-docs.goextrovert.com/api-reference/voice-comment-examples/delete-comment-example.md): Permanently deletes a Comment Example. Note: deleting the parent Voice cascades to all its Comment Examples automatically — you do not need to call this per entry in that case. Comment Examples feed comment generation only — never direct messages. The change applies to future generations only: an al… - [Update Comment Example](https://api-docs.goextrovert.com/api-reference/voice-comment-examples/update-comment-example.md): Replaces the `text` of an existing Comment Example. Text limit: 1250 characters. Comment Examples feed comment generation only — never direct messages. The change applies to future generations only: an already-generated comment draft keeps its text until it is regenerated (`comments_generate-or-impr… - [List Monitored Topics](https://api-docs.goextrovert.com/api-reference/monitored-topics/list-monitored-topics.md): Returns all Monitored Topics owned by the given user. A Monitored Topic is a named matching criterion used to decide whether a post qualifies for a Topic campaign. Each response item also reports which Topic campaign, if any, the topic is currently bound to as `campaign: { id, name }`. - [Create Monitored Topic](https://api-docs.goextrovert.com/api-reference/monitored-topics/create-monitored-topic.md): Creates a new Monitored Topic owned by the given user. New topics are not bound to any campaign yet. - [Delete Monitored Topic](https://api-docs.goextrovert.com/api-reference/monitored-topics/delete-monitored-topic.md): Permanently deletes a Monitored Topic. Cascade: (1) any Topic campaign bound to this topic loses the binding — the binding is soft-deleted and the campaign's keyword set is regenerated automatically; (2) Prospects campaigns that use this topic in `postActivityFilter.monitoredTopicIds` are NOT auto-c… - [Update Monitored Topic](https://api-docs.goextrovert.com/api-reference/monitored-topics/update-monitored-topic.md): Updates the name and description of an existing Monitored Topic. Existing bindings to Topic campaigns are preserved. The owner cannot be changed. - [List Monitored Topic Bindings on a Topic Campaign](https://api-docs.goextrovert.com/api-reference/campaign-topics/list-monitored-topic-bindings-on-a-topic-campaign.md): Returns all Monitored Topics attached to a Topic campaign — these are the topics the campaign uses to collect relevant posts. Each binding exposes a deleted flag (soft-deleted bindings), the topic name (preserved even if the source Monitored Topic was deleted), and the timestamp of the last successf… - [Replace Monitored Topic Bindings on a Topic Campaign](https://api-docs.goextrovert.com/api-reference/campaign-topics/replace-monitored-topic-bindings-on-a-topic-campaign.md): Replaces the full set of Monitored Topics that a Topic campaign uses to collect relevant posts. Pass the full target list: topics in `monitoredTopicIds` that are not yet attached become attached (previously deleted bindings are reactivated automatically); topics currently attached but missing from `… - [List Talking Points on a Voice](https://api-docs.goextrovert.com/api-reference/voice-talking-points/list-talking-points-on-a-voice.md): Returns all Talking Points attached to the given Voice. A Talking Point is a single idea, fact, or point of view (industry observations, product benefits, hot takes, thoughts that add value) used as context when generating comments on posts. Talking Points feed comment generation only — they are nev… - [Create Talking Point](https://api-docs.goextrovert.com/api-reference/voice-talking-points/create-talking-point.md): Adds a new Talking Point to a Voice. Each Talking Point should be a single, focused idea, fact, or point of view the LLM can weave into a comment (industry observations, product benefits, hot takes, advice you'd give peers). Prefer several short Talking Points over one long block. Text limit: 750 ch… - [Get Talking Point](https://api-docs.goextrovert.com/api-reference/voice-talking-points/get-talking-point.md): Loads a single Talking Point by id. - [Delete Talking Point](https://api-docs.goextrovert.com/api-reference/voice-talking-points/delete-talking-point.md): Permanently deletes a Talking Point. Note: deleting the parent Voice cascades to all its Talking Points automatically — you do not need to call this per entry in that case. Talking Points feed comment generation only — never direct messages. The change applies to future generations only: an already-… - [Update Talking Point](https://api-docs.goextrovert.com/api-reference/voice-talking-points/update-talking-point.md): Replaces the text of an existing Talking Point. Text limit: 750 characters. Talking Points feed comment generation only — never direct messages. The change applies to future generations only: an already-generated comment draft keeps its text until it is regenerated (`comments_generate-or-improve-dra… - [List Selling Points on a Voice](https://api-docs.goextrovert.com/api-reference/voice-selling-points/list-selling-points-on-a-voice.md): Returns all Selling Points attached to the given Voice. Selling Points feed direct-message generation only; templates are managed separately. An empty list means the AI has no Voice-specific sales facts to draw from. - [Create Selling Point](https://api-docs.goextrovert.com/api-reference/voice-selling-points/create-selling-point.md): Adds one focused sales fact, benefit, proof point, capability or value proposition to a Voice. Text limit: 750 characters. Up to 40 Selling Points per Voice. Selling Points feed direct-message generation only — never comments. The change applies to future generations only: an existing DM draft keeps… - [Get Selling Point](https://api-docs.goextrovert.com/api-reference/voice-selling-points/get-selling-point.md): Loads a single Selling Point by id. - [Delete Selling Point](https://api-docs.goextrovert.com/api-reference/voice-selling-points/delete-selling-point.md): Permanently deletes a Selling Point. Note: deleting the parent Voice cascades to all its Selling Points automatically — you do not need to call this per entry in that case. Selling Points feed direct-message generation only — never comments. The change applies to future generations only: an existing… - [Update Selling Point](https://api-docs.goextrovert.com/api-reference/voice-selling-points/update-selling-point.md): Replaces the text of an existing Selling Point. Text limit: 750 characters. Selling Points feed direct-message generation only — never comments. The change applies to future generations only: an existing DM draft keeps its text until it is refreshed (`dm-conversations_improve-reply`, or `dm-conversa… - [List DM Templates on a Voice](https://api-docs.goextrovert.com/api-reference/voice-dm-templates/list-dm-templates-on-a-voice.md): Returns all structured DM Templates attached to the Voice. Each template has example text, when-to-use guidance and adaptation guidance. The LLM decides whether and how to apply it; templates are never inserted verbatim by the API. - [Create DM Template](https://api-docs.goextrovert.com/api-reference/voice-dm-templates/create-dm-template.md): Adds a structured DM Template to a Voice. All three fields are required. The LLM chooses when to use it and adapts it; callers should not pre-resolve variables. Up to 40 Templates per Voice. DM Templates feed direct-message generation only — never comments. The change applies to future generations o… - [Get DM Template](https://api-docs.goextrovert.com/api-reference/voice-dm-templates/get-dm-template.md): Loads a single DM Template by id. - [Delete DM Template](https://api-docs.goextrovert.com/api-reference/voice-dm-templates/delete-dm-template.md): Permanently deletes a DM Template. Note: deleting the parent Voice cascades to all its DM Templates automatically — you do not need to call this per entry in that case. DM Templates feed direct-message generation only — never comments. The change applies to future generations only: an existing DM dr… - [Update DM Template](https://api-docs.goextrovert.com/api-reference/voice-dm-templates/update-dm-template.md): Replaces all three fields of an existing DM Template. DM Templates feed direct-message generation only — never comments. The change applies to future generations only: an existing DM draft keeps its text until it is refreshed (`dm-conversations_improve-reply`, or `dm-conversations_prepare-reply` for… - [List Campaigns](https://api-docs.goextrovert.com/api-reference/campaigns/list-campaigns.md): Returns all campaigns visible to the current user (both types: `TARGET_USER` and `KEYWORD` — user-facing 'Prospects campaign' and 'Topic campaign' respectively). - [Create Campaign](https://api-docs.goextrovert.com/api-reference/campaigns/create-campaign.md): Creates a new campaign. The campaign owner must already have a Voice. - [Get Campaign](https://api-docs.goextrovert.com/api-reference/campaigns/get-campaign.md): Loads full details of a single campaign, including the linked Voice, postActivityFilter, connectingSettings, and dmSettings. - [Update Campaign](https://api-docs.goextrovert.com/api-reference/campaigns/update-campaign.md): Updates the editable fields of an existing campaign. `id`, `name`, `voiceId`, `postMaxAgeDays`, `skipTeammatesLeads`, `isIndirectEngagementEnabled` are required (full replace). Backend types `TARGET_USER` and `KEYWORD` correspond to user-facing 'Prospects campaign' and 'Topic campaign' respectively. - [Update Automatic Comments Settings](https://api-docs.goextrovert.com/api-reference/campaigns/update-automatic-comments-settings.md): Updates the Automatic Comments settings of a campaign. When enabled, the campaign automatically publishes top eligible comments from its approval feed — up to the daily cap, inside the active window intersected with the LinkedIn account's working hours — without manual review. Absent optional fields… - [Delete Campaign](https://api-docs.goextrovert.com/api-reference/campaigns/delete-campaign.md): Soft-deletes a campaign and always removes all of its not-yet-posted activities. - [Start Campaign](https://api-docs.goextrovert.com/api-reference/campaigns/start-campaign.md): Activates a campaign (sets `isActive` to `true`): the post feed resumes updating, DM drafts are suggested again, and connection requests start being sent per the campaign's settings. The campaign must be properly configured first (a Voice, and either a ProspectList for `TARGET_USER` — user-facing 'P… - [Stop Campaign](https://api-docs.goextrovert.com/api-reference/campaigns/stop-campaign.md): Pauses a campaign (sets `isActive` to `false`): the post feed stops updating, no DM drafts are suggested, and no connection requests are sent until the campaign is started again. Existing posts in the approval queue are preserved. - [Duplicate Campaign](https://api-docs.goextrovert.com/api-reference/campaigns/duplicate-campaign.md): Creates a copy of an existing campaign. Copied: Voice, post filter, connecting and DM settings, `postMaxAgeDays`, `skipTeammatesLeads`, `isIndirectEngagementEnabled`, `applyCommentIntervalH`, and sharing settings (subject to plan capabilities). NOT copied: attached prospects (for `TARGET_USER`) and… - [Share Campaign](https://api-docs.goextrovert.com/api-reference/campaigns/share-campaign.md): Updates campaign sharing settings. Pass explicit user ids in `usersIds` to share with specific teammates, or set `shareWithAllWorkspaceUsers=true` to make the campaign visible to the whole team — in that case pass an empty array for `usersIds`. - [Transfer Campaign Ownership](https://api-docs.goextrovert.com/api-reference/campaigns/transfer-campaign-ownership.md): Transfers the campaign to another owner. The target owner must also receive a compatible Voice because campaign ownership depends on owner-bound assets. Returns the id of the resulting campaign — the original campaign id becomes invalid after the transfer; use the returned id for all subsequent call… - [List Voices](https://api-docs.goextrovert.com/api-reference/voices/list-voices.md): Returns all Voices owned by the given user, including background about the user and their company, comment and DM tone instructions, and completion counters for Comment Examples, Talking Points, Selling Points and DM Templates. Related collection contents are not returned here and are managed throug… - [Create Voice](https://api-docs.goextrovert.com/api-reference/voices/create-voice.md): Creates a new Voice for the given user. Only `name` and `userId` are required — a Voice may be created with just the background group, just the tone group, or neither, and completed later with `update`. - [Get Voice](https://api-docs.goextrovert.com/api-reference/voices/get-voice.md): Loads a single Voice by id with its background, tone texts and collection counts. Collection contents are not included. - [Delete Voice](https://api-docs.goextrovert.com/api-reference/voices/delete-voice.md): Permanently deletes a Voice. The call fails with a 403 error if any existing Campaign still references this Voice — active or stopped alike. Only hidden or deleted campaigns have their Voice reference cleared automatically. All Comment Examples, Talking Points, Selling Points and DM Templates attach… - [Update Voice](https://api-docs.goextrovert.com/api-reference/voices/update-voice.md): Partially updates an existing Voice. Every field except `id` is optional and only the fields actually present in the request are written — an omitted field keeps its stored value, so updating the background group never clears the tone group and vice versa. Pass an empty string to clear a text field… - [Duplicate Voice](https://api-docs.goextrovert.com/api-reference/voices/duplicate-voice.md): Creates a copy of an existing Voice for the destination user. The copy includes the name, `isLearningModeEnabled`, both background fields, both tone fields, and all Comment Examples, Talking Points, Selling Points and DM Templates of the source Voice. Campaigns referencing the source Voice are not m… - [List conversations](https://api-docs.goextrovert.com/api-reference/direct-messages/list-conversations.md): Lists an owner's LinkedIn conversations in the required unread or all view. It returns preview, unread count, active workflow state, and valid next actions without marking anything read. - [Get conversation](https://api-docs.goextrovert.com/api-reference/direct-messages/get-conversation.md): Returns one LinkedIn conversation, its unique active reply, and a bounded delivered-message page. Reading does not clear unread state unless markAsRead is true. Use offset 0 for the latest page and increase it to load older messages. - [Prepare reply](https://api-docs.goextrovert.com/api-reference/direct-messages/prepare-reply.md): Prepares one reviewable reply for a conversation, either with Extrovert or from supplied text. It returns the exact dmId required for Send reply and never sends in the same call. - [Improve draft](https://api-docs.goextrovert.com/api-reference/direct-messages/improve-draft.md): Rewrites the current reviewable reply using the supplied direction. It replaces the current effective text and does not send. Success has no payload; use Get conversation when the resulting text is needed. - [Edit draft](https://api-docs.goextrovert.com/api-reference/direct-messages/edit-draft.md): Sets the exact effective text of an existing reviewable reply. It does not send the message. - [Send reply](https://api-docs.goextrovert.com/api-reference/direct-messages/send-reply.md): Sends the exact prepared dmId to the LinkedIn prospect. This is the consequential external action. Success confirms the send command completed or was accepted; a detected History changed condition returns an error and the stale reply must not be resent. Use Get conversation before preparing a replac… - [Recover draft](https://api-docs.goextrovert.com/api-reference/direct-messages/recover-draft.md): Recovers a failed DM workflow. A generic send failure returns the reply to Draft ready. History changed invalidates the stale reply; use Get conversation, then prepare a new reply before sending. ## OpenAPI Specs - [docs-json](https://api.goextrovert.com/client/v2/docs-json) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.