- Brand
- Reply.io
- Category
- Sales & CRM
- Primary Subcategory
- Sales Engagement & Outreach Automation
Integration details
Description
Reply.io is a sales engagement platform. In ChatGPT it lets a user run their own Reply workspace in conversation: find sequences and check how they are performing, look up contacts and their activity history, review and answer replies in the shared inbox, work the AI SDR approval queue (see pending drafts, regenerate, approve, or reject them), manage mailboxes, sending schedules and safety limits, and diagnose why a sequence or mailbox is not sending. Every tool acts on the workspace the connected account already has access to, under that account's existing Reply permissions and API scopes.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Sales Engagement & Outreach Automation
- Secondary Subcategories
- None listed
- Brand
- Reply.io
- Access
- Account required
- First tracked
- 2026-08-15
- Tool count
- 173
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your Plugin is no longer discoverable
We previously found Reply.io discoverable in ChatGPT, but ChatGPT is no longer surfacing it.Add your email below and we’ll let you know when your Plugin becomes discoverable again, and send you alerts about it.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Sales Engagement & Outreach Automation
View Category173 tools agents can invoke
Adds a web-page URL as a source to an AI SDR (Jason) knowledge base, so Jason can use that page's content when answering prospects. Mutation. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. This tool adds web-page URLs only. To save typed text guidance, edit the knowledge base Instructions with reply_update_knowledge_base; to add a templated answer use reply_create_reply_handler; to add a win-back card use reply_create_reengagement_card. Uploading documents is done in the app UI, not via chat. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; Url must be non-empty); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); Conflict (this URL is already a source; no action needed); InvalidParameter (the URL was rejected; tell the user); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_add_knowledge_base_source
Adds one or more domains to the workspace blacklist. Mutation. Enter bare domains like 'example.com' (no scheme, no 'www'). Domains already on the blacklist are reported in Failed with reason 'Duplicate' and are NOT hard errors. Failure modes: InvalidArguments (provide at least one domain); Forbidden (workspace cannot modify the blacklist; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user). Already-blacklisted domains appear in Failed with reason 'Duplicate'.
reply_add_blacklist_domains
Writes a free-text note onto one account (company) and returns the stored note with its numeric ID. Mutation. Use it to persist company-level context gathered elsewhere (CRM facts, funding rounds, hiring signals, research) so people and later agent runs can read it back with reply_list_account_notes. REQUIRES the exact numeric account ID from a prior reply_search_accounts result and the note text (1-512 characters; longer text must be shortened before calling). Never invent the ID, and never ask the user for it. Every call appends a new note; it never edits or replaces an existing one, so do not resend the same text to update it. Does NOT change the account's fields; use reply_update_account for that. For a fact about one person, use reply_add_contact_note instead. Failure modes: InvalidArguments (AccountId must be greater than 0; Notes must be 1-512 characters); NotFound (no account with that ID in this workspace, or the user is not allowed to see it; search for it instead of retrying); InvalidInput (the note was empty once trimmed and sanitized); Forbidden (the notes API is not enabled for this team; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_add_account_note
Writes a free-text note onto one contact's timeline and returns the stored note with its numeric ID. Mutation. Use it to persist context gathered elsewhere (CRM facts, funding news, call summaries, research) so people and later agent runs can read it back with reply_list_contact_notes. REQUIRES the exact numeric contact ID and the note text (1-512 characters; longer text must be shortened before calling). Do NOT guess, fabricate, or estimate the ID. If only the email or LinkedIn URL is known, call reply_search_contacts first. Do NOT ask the user for a numeric contact ID; users do not know internal IDs. Every call appends a new note; it never edits or replaces an existing one, so do not resend the same text to update it. Does NOT change the contact's fields or sequence status; use reply_update_contact for profile edits. Failure modes: InvalidArguments (ContactId must be > 0; Notes must be 1-512 characters); NotFound (the contact does not exist in this workspace; re-fetch via reply_search_contacts); InvalidInput (the note was empty once trimmed); Forbidden (the notes API is not enabled for this team; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_add_contact_note
Adds one or more existing contacts to a sequence so they begin receiving its steps. Mutation, high-stakes: starting outreach to people. REQUIRES the exact numeric sequence ID and a non-empty list of contact IDs. All must come from prior tool output (reply_search_sequences, reply_search_contacts, reply_filter_contacts). Never invent, estimate, or ask the user. ContactIds is ALWAYS a JSON array, even for a single contact, e.g. {"sequenceId":1,"contactIds":[123]}. It takes numeric contact IDs only, never emails or names; when only an email or name is known, call reply_search_contacts first and pass the returned Id. To start contacts at a specific step instead of the first one, pass that step's numeric Id as StartStepId; otherwise omit it to begin at the first step. Per-contact failures (already in sequence, opted out, etc.) are returned in NotProcessed; the call as a whole still succeeds. Accepts up to 100 contact IDs per call. Does NOT change the sequence's active/paused state; pair with reply_start_sequence when the sequence is paused. Failure modes: InvalidArguments (SequenceId > 0; ContactIds non-empty and <= 100 entries, all > 0; StartStepId > 0 when supplied; split into batches if needed); SequenceNotFound (re-fetch via reply_search_sequences); ContactNotFound (re-fetch contact IDs via reply_search_contacts); NoStepsInSequence (the sequence has no steps; tell the user to add steps before retrying); ContactLimitExceeded (the workspace plan has hit its sequence-contact limit; tell the user, do not retry); SequenceArchived (the sequence is archived; tell the user before retrying); Forbidden (workspace cannot operate on this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user). Per-contact reasons (e.g. ContactAlreadyInSequence, ContactInBlackList) appear in NotProcessed and are NOT hard failures.
reply_add_contact_to_sequence
Appends one or more new steps with content to the end of an existing sequence, in the order given. Mutation. Supported Type values: 'Email' (automatic email; Subject + Message), 'LinkedInConnect' (automatic LinkedIn connection request; optional note in Message, max 300 chars), 'LinkedInMessage' (automatic LinkedIn message; Message). Other step types (calls, tasks, SMS, conditions) are not supported here; tell the user to add them in the sequence editor. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences or reply_create_sequence result. Never invent, estimate, default, or ask the user for it. DelayInMinutes is the wait after the previous step (1 day = 1440); use 0 for the first step. The first email step of a sequence must have a Subject; follow-up emails may leave it empty to reply in the same thread. Message may contain merge tags like {{FirstName}}. Adding steps to an Active sequence is allowed and takes effect immediately: contacts still in progress will also receive the new steps, so confirm with the user before adding steps to a running sequence. Each step gets one variant; add more variants with reply_create_sequence_step_variant. Per-step failures are returned in NotProcessed (by Index, with a Reason code and a Details explanation) and are NOT hard failures; later steps are still appended. Common reasons: MissingEmailSubject (the first email needs a Subject), InvalidInput (the sequence contains Condition steps, which this tool cannot append to, or the step content was rejected), InvalidStep (the step would leave the sequence invalid); any other reason means the step could not be saved, e.g. the sequence is archived or not accessible. If every step lands in NotProcessed, re-resolve the sequence via reply_search_sequences. Failure modes: InvalidArguments (SequenceId must be > 0; Steps non-empty and <= 100 entries; each Type must be one of the supported values; Message required for Email and LinkedInMessage; LinkedInConnect Message max 300 chars; DelayInMinutes >= 0); NotFound (the sequence does not exist or is not accessible in this workspace; re-resolve it via reply_search_sequences, do not retry with the same ID; nothing was added); Forbidden (the user's role, plan or sequence ownership does not allow editing this sequence or one of the step types; tell the user, do not retry; nothing was added); ServiceUnavailable (transient; retry once, then tell the user).
reply_add_sequence_steps
Approves a single AI SDR draft and sends it to the contact immediately. Mutation, high-stakes: the message goes out as soon as the call succeeds. Identify the draft by the exact numeric SequenceId and ContactId from a prior reply_list_pending_approvals result. Never invent, estimate, default, or ask the user for these values. Optionally override the drafted Body and/or Subject; omit them to send exactly what Jason drafted. Only call this after the user has explicitly approved sending. Failure modes: InvalidArguments (SequenceId and ContactId must be > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no pending approval exists for this sequence and contact, e.g. it was already sent, rejected, or is regenerating; re-list via reply_list_pending_approvals); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_approve_message
Archives a sequence so it is hidden from the active list and can no longer send. Mutation, high-stakes. REQUIRES the exact numeric sequence ID. Do NOT guess, fabricate, or estimate it. Must come from a prior reply_search_sequences result. Do NOT ask the user for a numeric ID; users do not know internal IDs. Archiving removes every contact from the sequence, so no contact receives further steps; reply_unarchive_sequence restores the sequence but does NOT re-enroll those contacts. Confirm with the user before calling. An active sequence cannot be archived: pause it with reply_pause_sequence first. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (the user cannot archive this sequence; tell the user, do not retry); Archived (the sequence is already archived; nothing to do, tell the user); Active (the sequence is running; pause it with reply_pause_sequence, then retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_archive_sequence
Links an email account (mailbox) to a sequence so the sequence can send from it. Mutation. REQUIRES both the exact numeric sequence ID and email account ID. Both must come from prior tool output (reply_search_sequences / reply_list_email_accounts). Never invent, estimate, or ask the user. Idempotent: re-linking an already-linked account is a no-op. Does NOT unlink other accounts; the sequence can be linked to multiple mailboxes. Failure modes: InvalidArguments (SequenceId > 0, EmailAccountId > 0); NotFound (the sequence or email account does not exist or is not accessible to this user; re-fetch via reply_search_sequences or reply_list_email_accounts); Forbidden (either the user lacks permission to modify this sequence, or only the sequence owner can link mailboxes to this sequence and the user is not its owner; tell the user, do not retry); LimitReached (sequence has hit the maximum number of linked email accounts; tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_assign_email_account_to_sequence
Repoints contacts ALREADY enrolled in a sequence at a specific sending mailbox. Mutation: it changes which mailbox future emails to those contacts are sent from. This is the fix for contacts left without a sender after their mailbox was removed or disconnected, and the only way to move a subset of contacts rather than the whole sequence. Identify everything by name: the sequence by its exact name, the mailbox by its email address, the contacts by their email addresses. The mailbox must already be linked to the sequence (link it first with reply_assign_email_account_to_sequence). Contacts that are not in the sequence are reported back in notInSequence and are left untouched; a contact already sending from that mailbox counts as reassigned, so repeating the same call is safe. Failure modes: InvalidArguments (no contact emails, more than 100 of them, the sequence name is unknown or ambiguous, or the mailbox address is unknown); SequenceNotFound (the sequence does not exist); InvalidInput (the mailbox is not linked to the sequence - link it first, then retry); SequenceArchived (the sequence is archived; nothing can be reassigned in it); Forbidden (you are not the owner of this sequence, and only the owner can do this; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_assign_email_account_to_sequence_contacts
Links a LinkedIn account to a sequence so the sequence can run LinkedIn steps from it. Mutation. REQUIRES both the exact numeric sequence ID and LinkedIn account ID. Both must come from prior tool output (reply_search_sequences / reply_list_linkedin_accounts). Never invent, estimate, or ask the user. Idempotent: re-linking an already-linked account is a no-op. Does NOT unlink other accounts; the sequence can be linked to multiple LinkedIn accounts. Failure modes: InvalidArguments (SequenceId > 0, LinkedInAccountId > 0); NotFound (the sequence or LinkedIn account does not exist; re-fetch via reply_search_sequences or reply_list_linkedin_accounts); Forbidden (workspace cannot link this LinkedIn account; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_assign_linkedin_account_to_sequence
Sets the sending schedule (business-hours window) on a sequence. Mutation. REQUIRES both the exact numeric sequence ID and schedule ID. Both must come from prior tool output (reply_search_sequences / reply_list_schedules). Never invent, estimate, or ask the user. Replaces the sequence's current schedule with the supplied one; does not modify other sequence settings. Failure modes: InvalidArguments (SequenceId > 0, ScheduleId > 0); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); ScheduleNotFound (the schedule does not exist; re-fetch via reply_list_schedules); Archived (the sequence is archived; tell the user); Forbidden (workspace cannot modify this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_assign_schedule_to_sequence
Attaches a knowledge base to an AI SDR sequence so Jason uses it when answering prospects in that sequence. Mutation. Replaces whatever knowledge base the sequence currently uses. REQUIRES the exact numeric SequenceId (from reply_search_sequences) and the exact numeric KnowledgeBaseId (from reply_list_knowledge_bases). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (SequenceId and KnowledgeBaseId must be > 0); Forbidden (the AI SDR feature is not enabled or you cannot access this sequence; tell the user, do not retry); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); InvalidParameter (the sequence is not an AI SDR sequence; tell the user); InvalidKnowledgeBase (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_attach_knowledge_base_to_sequence
Attaches an offer to an AI SDR sequence so Jason pitches it for that sequence's outreach. Mutation. Replaces whatever offer the sequence currently uses. REQUIRES the exact numeric SequenceId (from reply_search_sequences) and the exact numeric OfferId (from reply_list_offers). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (SequenceId and OfferId must be > 0); Forbidden (the AI SDR feature is not enabled or you cannot access this sequence; tell the user, do not retry); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); InvalidParameter (the sequence is not an AI SDR sequence; tell the user); InvalidOffer (no offer with this id; re-fetch via reply_list_offers); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_attach_offer_to_sequence
Attaches a playbook to an AI SDR sequence so Jason follows it for that sequence's outreach. Mutation. Replaces whatever playbook the sequence currently uses. REQUIRES the exact numeric SequenceId (from reply_search_sequences) and the exact playbook ID (from reply_list_playbooks). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (SequenceId must be > 0; PlaybookId must be non-empty); Forbidden (the AI SDR feature is not enabled or you cannot access this sequence; tell the user, do not retry); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); InvalidParameter (the sequence is not an AI SDR sequence; tell the user); InvalidIdFormat (the PlaybookId is malformed; re-fetch via reply_list_playbooks); InvalidPlaybook (no playbook with this id; re-fetch via reply_list_playbooks); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_attach_playbook_to_sequence
Adds the contact's email and LinkedIn profile URL (or the contact's whole email domain) to the workspace blacklist so future outreach to that contact (or to any address on that domain) is blocked at send time on every channel. Mutation, high-stakes. REQUIRES the exact numeric contact ID. Must come from a prior reply_search_contacts or reply_filter_contacts result. Never invent, estimate, default, or ask the user. When BlockEntireDomain is true, every contact on the same email domain becomes blocked, including ones not yet in the workspace. Use the per-email default unless the user explicitly asks to block the whole company. Different from "opting out": opt-out is a per-prospect flag that stops sending; the blacklist is a workspace-wide email/domain/LinkedIn-URL pattern list that prevents sending even to new contacts matching the pattern. Does NOT delete the contact; their profile and history remain visible. Failure modes: InvalidArguments (ContactId must be > 0; business rejections also arrive under this code with the reason in the message: 'NotFound' means the contact does not exist, re-fetch via reply_search_contacts; 'Forbidden' means blacklisting is not allowed for this workspace, tell the user and do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_blacklist_contact
Approves multiple AI SDR drafts at once and sends them all immediately. Mutation, high-stakes: every listed message goes out as soon as the call succeeds. Pass the exact SequenceId and ContactId pairs from a prior reply_list_pending_approvals result. To approve everything matching a sequence, owner, or channel, first call reply_list_pending_approvals with those filters, show the user the matching drafts and the count, get explicit confirmation, then pass those references here. The batch is atomic: if any reference is not a current pending approval, the whole batch is rejected and nothing is sent. Up to 100 references per call. Failure modes: InvalidArguments (Items must be non-empty, at most 100, each with SequenceId and ContactId > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (at least one reference is not a current pending approval, e.g. already sent, rejected, or regenerating; nothing was sent, the message names every reference that was not found, so retry with the remaining references only); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_bulk_approve_messages
Adds and/or removes tags on one or more email accounts (mailboxes) in a single call. Mutation. REQUIRES the exact numeric email account IDs from a prior reply_list_email_accounts result. Do NOT invent them or ask the user for numeric IDs. Provide emailAccountIds plus at least one of addTags or removeTags (tag NAMES, not IDs). A tag that does not exist yet is created. Every listed mailbox gets the same add/remove applied. Mailboxes are processed in order; if one fails partway, mailboxes earlier in the list have already been updated and are not rolled back. Failure modes: InvalidArguments (emailAccountIds must be non-empty with IDs > 0; provide at least one of addTags or removeTags); NotFound (a mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot modify a mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_bulk_tag_email_accounts
Reassigns one or more contacts to a different Reply.io user. Mutation, high-stakes: changes who sees the contacts and can act on their behalf. REQUIRES a non-empty list of numeric contact IDs and the numeric UserId of the new owner. ContactIds must come from reply_search_contacts or reply_filter_contacts; NewOwnerUserId must come from reply_search_team_members. Never invent, estimate, or ask the user. ReassignTasks: when true, open tasks attached to those contacts are reassigned to the new owner too; when false (default), tasks keep their existing assignee. Accepts up to 100 contact IDs per call. When confirming completion to the user, refer to the new owner by their FullName (from reply_search_team_members), not by the numeric UserId. PARTIAL-SUCCESS HANDLING: AffectedContactIds is the authoritative list of contacts whose owner actually changed. Never claim that an input ContactId was reassigned unless it appears in AffectedContactIds. If AffectedContactIds.Count is less than the number of input ContactIds, report the exact counts (e.g. 'reassigned 48 of 50'). Contact IDs that do not exist, or whose per-contact owner could not be changed, are not reported as errors: they are simply absent from AffectedContactIds. Failure modes: InvalidArguments (ContactIds must be non-empty and <= 100 entries, all > 0; NewOwnerUserId must be > 0; split into batches if needed); NotFound (the target user is not a member of this workspace; re-fetch via reply_search_team_members); LimitExceeded (the reassignment would exceed the contact limit; tell the user, do not retry); Forbidden (workspace cannot reassign these contacts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_change_contact_owner
Sets the per-sequence status of a single contact inside one sequence. Mutation. Use this to pause a contact in a sequence, mark them as Finished, etc. REQUIRES the exact numeric sequence ID and contact ID. Both must come from prior tool output. Do NOT guess, fabricate, or estimate. Do NOT ask the user for numeric IDs; users do not know internal IDs. Allowed status values: 'Active', 'Paused', 'Finished', 'Inactive', 'OutOfOffice'. Does NOT change the contact's overall opt-out state; use a dedicated blacklist tool for that. Does NOT remove the contact from the sequence; use a removal tool for that. Failure modes: InvalidArguments (SequenceId and ContactId must be > 0; Status must be one of the five allowed values); SequenceNotFound (re-fetch via reply_search_sequences); ContactNotFound (re-fetch via reply_search_contacts); NotInSequence (the contact is not in this sequence; add it first via reply_add_contact_to_sequence); InvalidStatusTransition (this status change is not allowed from the current state; read the contact's current status first); SequenceArchived (the sequence is archived; tell the user before retrying); Forbidden (workspace cannot operate on that sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_change_status_in_sequence
Assigns (or clears) the workspace-defined category on one inbox thread. Mutation. REQUIRES the exact numeric thread ID. Must come from a prior reply_get_inbox_emails result. Never invent, estimate, default, or ask the user. Pass CategoryId = null/omit to clear the category. Categories are workspace-scoped; CategoryId must match a category the workspace has defined (e.g. via the inbox UI). Failure modes: InvalidArguments (ThreadId must be > 0; CategoryId must be > 0 when set); NotFound (the thread or category does not exist; re-fetch thread via reply_get_inbox_emails); Forbidden (workspace cannot modify this thread; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_change_inbox_category
Transfers ownership of a sequence to another teammate. Mutation, high-stakes: the new owner's permissions then govern the sequence, its enrolled contacts are reassigned to the new owner within the sequence, and every mailbox linked to the sequence is unlinked, so it cannot send email until a mailbox is linked again with reply_assign_email_account_to_sequence. Tell the user about the unlinked mailboxes when confirming. REQUIRES the exact numeric sequence ID and the numeric UserId of the new owner. SequenceId must come from reply_search_sequences; NewOwnerUserId must come from reply_search_team_members. Never invent, estimate, or ask the user; users do not know internal IDs. Outside organization workspaces only the team owner may change a sequence owner. When confirming completion to the user, refer to the new owner by their FullName (from reply_search_team_members), not by the numeric UserId. Failure modes: InvalidArguments (SequenceId must be > 0, NewOwnerUserId must be > 0); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); TeamMemberNotFound (the new owner is not a member of this team; re-fetch via reply_search_team_members); OwnerLimitExceeded (the new owner would exceed their contact limit; tell the user, do not retry); Forbidden (the user is not allowed to change this sequence's owner; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_change_sequence_owner
Returns side-by-side email + LinkedIn performance metrics for multiple sequences in a single call. REQUIRES the exact numeric sequence IDs. Do NOT guess, fabricate, or estimate them. Each ID must come from a prior reply_search_sequences result or another tool's output earlier in this conversation. Do NOT ask the user for numeric IDs; users do not know internal IDs. Use this when the caller wants to compare two or more sequences directly. For a single sequence, call reply_get_sequence_stats instead. Accepts up to 100 sequence IDs per call; to compare more, split the IDs into several calls and merge Items by SequenceId. Date window defaults to all-time; pass From/To (UTC ISO-8601) for a custom range. Sequences with no activity in the window, or that you cannot access, are omitted from Items. Align by SequenceId (not by index) and treat a missing row as 'no data'. Does NOT include step content or prospect-level data. Failure modes: InvalidArguments (SequenceIds non-empty and <= 100 entries, each > 0, otherwise split the IDs into several calls and merge Items by SequenceId; From must be <= To); ServiceUnavailable (the stats backend is temporarily offline; retry once, then tell the user). Inaccessible or empty-window sequences silently drop out of Items rather than causing an error.
reply_compare_sequence_performance
Marks an existing task as completed. Mutation. REQUIRES the exact numeric task ID. Must come from a prior reply_list_my_tasks result. Never invent, estimate, default, or ask the user. For Call tasks, CallResolution is recommended ('Positive', 'ToCall', 'Negative'). FinishProspectInSequence, when true, also marks the contact as Finished in the related sequence. Failure modes: InvalidArguments (TaskId > 0; CallResolution one of Positive/ToCall/Negative if supplied. Business rejections also arrive under this code with the reason in the message: 'NotFound' means the task does not exist, re-fetch via reply_list_my_tasks; 'CannotComplete' means the task is in a state from which it cannot be completed, e.g. already Finished or Cancelled, tell the user; 'Forbidden' means the workspace cannot complete this task, tell the user and do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_complete_task
Creates a new AI SDR (Jason) knowledge base. Mutation. Name is required. Instructions is optional free text telling Jason how to use this knowledge when answering prospects. Add URL sources afterwards with reply_add_knowledge_base_source, then attach it to a sequence with reply_attach_knowledge_base_to_sequence. Failure modes: InvalidArguments (Name must be non-empty); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); Conflict (a knowledge base with this name already exists; choose another name); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_knowledge_base
Creates a new AI SDR (Jason) offer that Jason can pitch. Mutation. Name is required; the other fields are optional and describe what Jason sells: company context, ideal customer profile (Icp), reason for outreach, and lists of case studies, pain points, proof points, value propositions, and calls to action. To draft these fields automatically from a company website, use reply_generate_offer_from_website first, then pass the results here. Failure modes: InvalidArguments (Name must be non-empty); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); InvalidParameter (the offer content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_offer
Creates a new AI SDR (Jason) playbook: a named set of selling instructions. Mutation. Name and Description are short labels; Body is the actual instruction text (the prompt) that tells Jason how to sell. Visibility controls who can use it: 'Team' (default) or 'Organization'. Global playbooks cannot be created here. Failure modes: InvalidArguments (Name, Description, and Body must be non-empty; Visibility must be 'Team' or 'Organization'; the Body must not contain unrecognized personalization variables, the message lists them); Forbidden (the AI SDR feature is not enabled, or you lack permission to create organization playbooks; tell the user, do not retry); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_playbook
Adds a reengagement card to the default re-engagement flow of an AI SDR (Jason) knowledge base so Jason knows how to win back a prospect who went quiet. Mutation. Name is a short label; Instructions tells Jason how to re-engage; SendAfter is the number of days after the last contact before Jason reaches out. SampleAnswer, ToneOfVoice, ResponseLength, and link URLs are optional. ToneOfVoice (case-insensitive): 'Confident', 'Persuasive', 'Witty', 'Straightforward', 'Empathetic'. ResponseLength (case-insensitive): 'SuperShort', 'Short', 'Medium', 'Long'. IsEnabled turns the card on (default on); DeliveryMode (case-insensitive): 'Draft' (Jason drafts the message for a human to review), 'Auto' (Jason sends automatically without review), defaults to Draft. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; Name and Instructions must be non-empty; SendAfter must be >= 0; ToneOfVoice and ResponseLength must be allowed values); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); Conflict (the SendAfter window overlaps an existing reengagement card in this flow; pick a different SendAfter value); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_reengagement_card
Adds a reply handler to an AI SDR (Jason) knowledge base so Jason knows how to answer a specific kind of prospect question. Mutation. TypeOfQuestion is the kind of question it covers (for example 'Pricing' or 'Security'); Instructions tells Jason how to respond. SampleAnswer, ToneOfVoice, ResponseLength, and link URLs are optional. ToneOfVoice (case-insensitive): 'Confident', 'Persuasive', 'Witty', 'Straightforward', 'Empathetic'. ResponseLength (case-insensitive): 'SuperShort', 'Short', 'Medium', 'Long'. DeliveryMode (case-insensitive): 'Draft' (Jason drafts the answer for a human to review), 'Auto' (Jason sends automatically without review), 'StopAndNotify' (Jason does not reply — it pauses the contact and emails a rep); defaults to Draft. AdditionalNotificationEmail (only for StopAndNotify): by default the alert goes to the account used to reach the prospect (the sending email account, or the LinkedIn account for LinkedIn steps), and this address is notified in addition to it. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; TypeOfQuestion and Instructions must be non-empty; ToneOfVoice and ResponseLength must be allowed values; AdditionalNotificationEmail must be a valid email); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_reply_handler
Creates an automation trigger: an event, optional conditions, and one or more actions that run on the matching contact. Mutation with wide blast radius, it acts on every contact that matches from now on, so read back what you created and confirm it with the user. New triggers are created switched OFF unless enabled=true is passed; switch one on later with reply_set_trigger_enabled. event is one of 'contactCreated', 'contactUpdated', 'contactOpenedEmail', 'contactClickedLink', 'emailWasReplied', 'emailWasSent', 'emailWasBounced', 'contactOptedOut', 'callWasLogged', 'inboxCategoryWasSet'. actions support 'updateContactField' (contactField + value, plus customFieldId when contactField is 'customField'), 'setContactStage' (stageId from reply_list_contact_stages) and 'addToList' (listId from reply_search_lists). conditions support only 'contactField' (contactField + value, plus customFieldId when contactField is 'customField') with a clause of 'equals', 'notEquals' or 'contains'. Each event accepts only the actions and conditions the app's trigger editor offers for it: 'contactUpdated' accepts 'setContactStage' and 'addToList' but not 'updateContactField'. COVERAGE LIMIT: Reply supports more action and condition types than the sets above (Pipedrive actions, sequence moves, owner assignment, and the long tail of conditions). If the user asks for one of those, say it must be built in the app under Automations, Triggers, and do NOT substitute a different action. A condition on contact stage, contact list or company size is not available on these events, here or in the app: say so instead of building a workaround. Failure modes: InvalidArguments (name, event and at least one action are required; ids must be > 0); InvalidOperation (an unsupported or malformed event, action, condition, clause or field, or one the event does not accept; the message names the allowed values, fix the call or tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_trigger
Creates a custom call resolution (a workspace-wide call-outcome label). Mutation. Provide name and resolutionBucket ('positive', 'toCall' or 'negative') that the new resolution rolls up to. Names must be unique across all resolutions. The three system defaults cannot be duplicated. Failure modes: InvalidArguments (name must not be empty; resolutionBucket must be 'positive', 'toCall' or 'negative'); InvalidOperation (a resolution with this name already exists, or the settings service rejected the change; tell the user); Forbidden (workspace cannot change these settings; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_call_resolution
Creates an account (company) in the workspace and returns it with its numeric ID. Mutation. REQUIRES Name. Every other field is optional; pass what the user or the external tool gave, do not invent values. Duplicates are NOT prevented: a second account with a name that already exists is created anyway, so search with reply_search_accounts first and update the existing account instead of adding another one. To put a company that came from a connected external tool into Reply together with its contacts, and to keep it updatable on a later run, use reply_sync_mcp_records instead: it remembers which external record each Reply row came from. Failure modes: InvalidArguments (Name is empty or longer than 128 characters, or another field exceeds its cap: DomainName, Country, State and City 128, Industry, Phone and Email 256, LinkedInUrl 512, Description 4000); Forbidden (this workspace or user is not allowed to create accounts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_account
Creates a new contact in the workspace. Mutation. REQUIRES the contact's name: at least one of FirstName or LastName must be non-empty. If the user did not give a name, ask them for it ("What is the contact's full name?") BEFORE calling this tool; do not invent or default a name. REQUIRES at least one of Email or LinkedInUrl. Other fields are optional. Returns the newly created contact's full profile, including its numeric ID, which can be used in subsequent tool calls. Does NOT add the contact to any sequence; use a dedicated sequence-add tool for that. Does NOT validate or normalize phone / LinkedIn URL formats; pass them as the user provided. On workspaces with the Accounts feature enabled, a supplied Company (with optional Industry) is used to link the contact to a matching Account — found by company name and email domain, or created if none exists — instead of being stored on the contact directly; just pass the company name as Company. When the Accounts feature is off, Company and Industry are stored on the contact directly. CustomFields sets custom field values by name: call reply_list_contact_custom_fields first and pass the field's exact Label as Name (case-insensitive). A Name made only of digits is read as a FieldId on create, so for a Label like '2024' pass that field's FieldId instead. A Name that matches no custom field is silently skipped with no error; check the returned CustomFields (keyed by numeric field ID) before confirming it was set. Failure modes: InvalidArguments (FirstName or LastName must be non-empty, ask the user for the name; Email or LinkedInUrl is required; every CustomFields entry needs a non-empty Name; respect string length caps: Email 256, LinkedInUrl 512, names 128, Title/Industry/Phone 256, City 180, State 100, Country 90, TimeZoneId 90, Notes 512); InvalidInput (upstream rejected the payload after our checks; surface the message); Forbidden (workspace cannot create contacts; tell the user, do not retry); PERMISSION_DENIED (the user lacks permission to create Accounts, needed to link a new Company; surfaced as PERMISSION_DENIED on MCP and as Forbidden on other surfaces; either way do not retry, tell the user to use an existing company/Account or request the permission); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_contact
Creates a new contact custom field for the workspace. Mutation. type must be 'text' or 'number'. The field is created workspace-wide for contacts. Failure modes: InvalidArguments (label must not be empty; type must be 'text' or 'number'); InvalidInput (the workspace rejected the field, e.g. an unsupported label format; tell the user); DuplicateName (a field with this label already exists; tell the user); LimitExceeded (the workspace hit its custom-field limit; tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_contact_custom_field
Creates a new sending schedule with its per-weekday time windows. Mutation. timezoneId is an IANA timezone like 'America/New_York'. Each weekday timing has an active flag and time ranges (hour 0-23, minute 0-59). Set useFollowUpSchedule=true only if you also provide followUpTimings. Failure modes: InvalidArguments (name and timezoneId must not be empty; time ranges must be valid); DuplicateName (a schedule with this name exists; tell the user); Forbidden (workspace cannot create schedules; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_schedule
Creates a new, empty sequence with the given name and returns its numeric ID. Mutation. The sequence is created in status 'New' with no steps and no contacts, so it sends nothing until steps and contacts are added and it is started with reply_start_sequence. It gets the user's default schedule, the user's default mailbox and first LinkedIn account when available, the workspace's default daily email limit unless EmailsPerDay is given, and the standard default settings (plain-text emails, open tracking off, link tracking off, contact finished on reply). Next steps: reply_add_sequence_steps to add Email/LinkedIn steps, reply_update_sequence_accounts or reply_assign_schedule_to_sequence to change accounts or schedule, reply_update_sequence_general_settings to change sending settings, reply_add_contact_to_sequence to enroll contacts. Before creating, check with reply_search_sequences whether a sequence with that name already exists; names are not unique and a second call creates a second sequence. Failure modes: InvalidArguments (Name must be non-empty and at most 255 chars; EmailsPerDay must be 1-10000 when supplied); Forbidden (the user's plan or role cannot create sequences; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_sequence
Adds one new text content variant (an A/B variation) to an existing sequence step. Mutation: the new variant is enabled by default and becomes eligible to be sent to contacts on that step. Works only for steps whose SupportsVariants is true in reply_get_sequence_steps, except LinkedIn voice-message steps (they need an audio recording). Existing variants are left unchanged; there is no tool to edit an existing variant's content. REQUIRES the exact numeric step ID from a prior reply_get_sequence_steps result. SequenceId is optional: pass it when known, otherwise it is resolved from the step. Never invent, estimate, default, or ask the user for either ID. Message is the body text and may contain merge tags like {{FirstName}}. Subject applies to email and LinkedIn InMail steps only; the first email step of a sequence must have a subject, follow-up emails may leave it empty to reply in the same thread. To create a whole new step use reply_add_sequence_steps instead. Failure modes: InvalidArguments (StepId must be > 0; SequenceId must be > 0 when supplied; Message must not be empty); NotFound (the step or sequence does not exist, is not accessible, or the sequence is archived; re-resolve via reply_get_sequence_steps, and tell the user an archived sequence must be unarchived first); Forbidden (the user's role, plan or sequence ownership does not allow editing this sequence; tell the user, do not retry); UnsupportedOperation (this step type takes no text variants; tell the user, do not retry); MissingEmailSubject (this is the first email step and the variant needs a Subject; retry with one); InvalidInput (the step rejected the variant, e.g. AI SDR template settings; tell the user); InvalidStep (the step would become invalid; tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_sequence_step_variant
Creates a new task (ToDo / Call / Meeting / LinkedIn / ManualEmail / Sms / WhatsApp) for the user. Mutation. REQUIRES TaskType, StartAt, DueTo, Subject, and Body. If TaskType is 'LinkedIn', LinkedInTaskType is required ('Message', 'Connect', 'InMail', 'ViewProfile'). ContactId, if supplied, must come from prior tool output. Never invent, estimate, default, or ask the user. Does NOT schedule the task inside a sequence; this is a standalone (manual) task. Failure modes: InvalidArguments (TaskType and LinkedInTaskType must be from the allowed sets; Subject non-empty and <= 1024 chars; Body non-empty and <= 32000 chars; StartAt must be <= DueTo; ContactId > 0 if set; LinkedInTaskType required when TaskType is LinkedIn. Business rejections also arrive under this code with the reason in the message: 'InvalidInput' means V3 rejected the create payload; 'InvalidDates' means V3 rejected the date window, e.g. dates in the past; 'ContactNotAccessible' means the contact does not exist or this workspace cannot see it, re-fetch via reply_search_contacts; 'RenderError' means the Subject/Body template failed to render, check for stray placeholders; 'Forbidden' means the workspace cannot create tasks, tell the user and do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_create_task
Removes a URL source from an AI SDR (Jason) knowledge base. Mutation. REQUIRES the exact numeric knowledge base ID and the source id, both from a prior reply_get_knowledge_base result. Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; SourceId must be a valid source id from reply_get_knowledge_base); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or source does not exist; re-fetch via reply_get_knowledge_base); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_delete_knowledge_base_source
Removes a reengagement card from an AI SDR (Jason) knowledge base by card id (the card may live in any re-engagement flow). Mutation. REQUIRES the exact numeric knowledge base ID (from reply_list_knowledge_bases) and the exact reengagement card id (from reply_list_reengagement_cards). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; ReengagementCardId must be a valid id from reply_list_reengagement_cards); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or reengagement card does not exist; re-fetch via reply_list_reengagement_cards); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_delete_reengagement_card
Removes a reply handler from an AI SDR (Jason) knowledge base. Mutation. REQUIRES the exact numeric knowledge base ID (from reply_list_knowledge_bases) and the exact reply handler id (from reply_list_reply_handlers). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; ReplyHandlerId must be a valid id from reply_list_reply_handlers); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or reply handler does not exist; re-fetch via reply_list_reply_handlers); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_delete_reply_handler
Permanently deletes an automation trigger. Mutation, irreversible. REQUIRES the exact trigger ID (a GUID) from a prior reply_list_triggers result. Do NOT invent it or ask the user for an ID. Failure modes: InvalidArguments (TriggerId must be a valid GUID); NotFound (the trigger does not exist; re-fetch via reply_list_triggers); ServiceUnavailable (transient; retry once, then tell the user).
reply_delete_trigger
Deletes a custom call resolution. Mutation, irreversible. REQUIRES the exact numeric resolution ID from a prior reply_list_call_resolutions result. Do NOT invent it or ask the user for a numeric ID. System default resolutions (Positive, To Call, Negative) cannot be deleted. Failure modes: InvalidArguments (ResolutionId must be > 0; there is no custom resolution with this ID (re-fetch via reply_list_call_resolutions); or the resolution is a system default and cannot be deleted); Forbidden (workspace cannot change these settings; tell the user, do not retry); ServiceUnavailable (transient, or the settings service could not complete the change; retry once, then tell the user).
reply_delete_call_resolution
Permanently removes a contact custom field and its data across all contacts. Mutation, irreversible. REQUIRES the exact numeric field ID from a prior reply_list_contact_custom_fields result. Do NOT invent it or ask the user for a numeric ID. Failure modes: InvalidArguments (FieldId must be > 0); NotFound (the field does not exist; re-fetch via reply_list_contact_custom_fields); Forbidden (workspace cannot delete custom fields; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_delete_contact_custom_field
Permanently removes an email account (mailbox) from the workspace. Mutation, irreversible. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Failure modes: InvalidArguments (EmailAccountId must be > 0); NotFound (the mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot delete this mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_delete_email_account
Permanently removes a sending schedule. Mutation, irreversible. REQUIRES the exact numeric schedule ID from a prior reply_list_schedules result. Do NOT invent it or ask the user for a numeric ID. Fails if the schedule is the default or is still used by a sequence. Failure modes: InvalidArguments (ScheduleId must be > 0); NotFound (the schedule does not exist; re-fetch via reply_list_schedules); DeleteRejected (the schedule is the default or is in use; reassign or set another default first); Forbidden (workspace cannot delete this schedule; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).
reply_delete_schedule
Explains WHY a Reply.io entity is not sending or not making progress, and WHICH settings the user should change to fix it. Use this when the caller asks things like "why isn't my sequence sending", "why did emails stop", "what's wrong with this sequence", "why aren't messages going out". Returns an overall status ('Healthy', 'Degraded', 'Blocked'), a primary blocking reason, and a list of findings; each finding carries a recommended action code and a plain-language fix. EntityType currently supports only 'sequence'. EntityId is the entity's numeric ID passed as a string. Do NOT guess, fabricate, or estimate it. For a sequence, obtain the ID from a prior reply_search_sequences result; do NOT ask the user for a numeric ID, users do not know internal IDs. A 'Healthy' status with findings is the normal answer to "it is Active but nothing goes out": the sequence is fine and sending is merely deferred. Report the deferral rather than saying nothing is wrong. Contact counts, schedule window and throttling describe the sequence right now; findings taken from the sequence log cover the last 30 days. Two causes this tool does NOT cover, follow up with another call when the user asks about them: a contact stuck on a manual Call/Task/LinkedIn step or an approval-required step (reply_list_my_tasks, reply_list_pending_approvals), and why one specific contact was paused (reply_get_contact_activity). Failure modes: InvalidArguments (EntityType is not a supported value, or EntityId is empty or over 64 characters; fix the call); InvalidEntityId (EntityId is not a valid id for that entity type); NotFound (the entity does not exist or is not in your workspace); Forbidden (delivery diagnostics is not enabled for your team, or you lack access to the entity); ServiceUnavailable (transient backend failure; retry once, then tell the user).
reply_diagnose
Disconnects one connected integration account, so Reply stops syncing with it. Mutation, DESTRUCTIVE: the connection and its sync configuration are removed and reconnecting requires authorizing the integration again. REQUIRES the exact numeric integrationAccountId from a prior reply_list_integrations result. Do NOT invent it, do NOT pass a system-type name, and do NOT ask the user for a numeric ID. For Pipedrive this also disables that workspace's Pipedrive triggers and removes its service filter, matching what the app does. The Slack app cannot be disconnected here: send the user to the Integrations page. Failure modes: InvalidArguments (IntegrationAccountId must be > 0); NotFound (no connected integration account with this id in the workspace; re-fetch via reply_list_integrations); InvalidOperation (the integration could not be disconnected; tell the user to disconnect it on the Integrations page); ServiceUnavailable (transient; retry once, then tell the user).
reply_disconnect_integration
Disconnects the connected meeting account for one provider: 'googleCalendar' clears the Google Calendar connection, 'calendly' revokes the Calendly OAuth connection. Mutation, irreversible: reconnecting requires the user to re-run the provider OAuth flow in Reply. Failure modes: InvalidArguments (provider must be exactly 'googleCalendar' or 'calendly'); InvalidOperation (the meetings service could not disconnect the account; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_disconnect_meetings_calendar_account
Duplicates an existing AI SDR (Jason) playbook into a new one with the same description and instruction Body. Mutation. Use this when the user wants a copy of a playbook to tweak. The copy is named '<original> (copy)' unless you pass NewName. Visibility of the copy defaults to the original's (Team or Organization); a Global playbook is copied as Team since Global playbooks cannot be created. Pass Visibility to override ('Team' or 'Organization'). Style files are NOT copied. REQUIRES the exact playbook ID from a prior reply_list_playbooks result. Never invent, estimate, default, or ask the user for this value. Failure modes: InvalidArguments (PlaybookId must be non-empty; Visibility must be 'Team' or 'Organization' when provided; the original Body must not contain unrecognized personalization variables, the message lists them); Forbidden (the AI SDR feature is not enabled, or you lack permission to create organization playbooks; tell the user, do not retry); NotFound (no playbook with this id; re-fetch via reply_list_playbooks); InvalidIdFormat (the id is malformed; re-fetch via reply_list_playbooks); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).
reply_duplicate_playbook
Reply.io ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Reply.io's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Reply.io alternatives on ChatGPT?
As of 2026-11-02, Reply.io competes with Outreach, ACA, Amplemarket, BoothIQ, Business Follow-up Assistant, Crono, Expandi, FirstTouch and 24 more in ChatGPT Sales Engagement & Outreach Automation, ranked by public Discoverability Score.
Where does Reply.io rank in Sales Engagement & Outreach Automation on ChatGPT?
As of 2026-11-02, Reply.io ranks #22 of 33 in ChatGPT Sales Engagement & Outreach Automation with a Discoverability Score of 0/100 (Invisible).
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.