{
  "openapi": "3.1.0",
  "info": {
    "title": "FirstTouch Public CRM Tool API",
    "version": "1.0.0.0",
    "description": "FirstTouch\u0027s Public CRM Tool API exposes the same operations and business rules as the full CRM MCP server.\n\n## Authentication\n\nSend your user-scoped key for the selected team in the \u0060X-API-Key\u0060 header. Every active team member can create and manage only their own keys from **Settings \u003E MCP \u0026 API** in FirstTouch.\n\n## Calling a tool\n\nEvery tool uses \u0060POST /api/public/tools/{tool_name}\u0060 with a JSON object request body. Successful calls return the tool result directly as JSON.\n\nUse the gateway origin that serves this document. Do not copy a URL for a different environment.\n\n\u0060\u0060\u0060bash\ncurl -X POST \u0022\u003Cgateway-origin\u003E/api/public/tools/get_current_user\u0022 \\\n  -H \u0022X-API-Key: ftpublic_your_key\u0022 \\\n  -H \u0022Content-Type: application/json\u0022 \\\n  -d \u0027{}\u0027\n\u0060\u0060\u0060\n\nTool schemas and descriptions below are the source of truth for inputs, outputs, costs, and side effects.\n\n## MCP agent integration guidance\n\nThese rules are sourced from the MCP server instructions. They are primarily intended for agents that coordinate several tools; expand only the topics relevant to your workflow.\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EChoosing the right workflow\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ETreat tool schemas and descriptions as the source of truth.\u003C/li\u003E\n\u003Cli\u003EBasic structure: external contacts become an Audience; an Audience is the source for a reusable Flow Plan; source mode is different from enrollment mode; publishing a Manual Mode Flow Plan does not enroll awaiting contacts by itself.\u003C/li\u003E\n\u003Cli\u003EWhen the user has multiple external contacts, for example pasted rows, a CSV file, or a CRM export, create or select an Audience before creating or attaching a Flow Plan. Do not enrich or add dynamic actions one contact at a time unless the user explicitly asks for single-contact work.\u003C/li\u003E\n\u003Cli\u003EHard override: a request to send, schedule, draft, approve, or follow up with one named person is a single-contact dynamic action request, even when the user asks for human approval, AI-generated text, variables, or a specific email/LinkedIn/call/manual action. Do not create an Audience or Flow Plan for this.\u003C/li\u003E\n\u003Cli\u003EChoose dynamic actions vs flow plans by asking one question: is the user describing recipients or describing actions? Describing recipients, such as a list, segment, filter, or everyone who matches criteria, means normal flow-plan/audience tools. Describing actions, such as \u0026quot;send a connect, then in 3 days follow up about X\u0026quot;\u003Cbr /\u003Eor \u0026quot;send a follow-up email to Brittany Tapparo with human approval and AI text\u0026quot;\u003Cbr /\u003Emeans add_dynamic_action. When still unsure, single contact means dynamic action and multiple contacts means flow plan. Tell the user in one line what you picked.\u003C/li\u003E\n\u003Cli\u003EHard override: if the user names an existing flow, use add_manual_flow_enrollment or enroll_awaiting_flow_items;\u003Cbr /\u003Edo not create a new flow plan or dynamic action. For add_manual_flow_enrollment, pass enrollmentMode=enroll when the user explicitly wants immediate enrollment;\u003Cbr /\u003Eotherwise it follows the flow plan mode.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003ESocial Engagement\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ESocial Engagement structure: when the user asks to monitor/listen to LinkedIn profile or company page likes/comments and route engagers, for example \u0026quot;monitor this profile and send connection requests to everyone who engaged\u0026quot;, call manage_social_engagement_monitored_profile action=add first. Use response.socialEngagement.flowPlan.id as the existing linked Social Engagement flow to inspect/update/publish;\u003Cbr /\u003Edo not create a separate Social Engagement flow and do not relink config. If the user wants listening to start now, pass enableSocialEngagement=true during add or use write_social_engagement_config isEnabled=true;\u003Cbr /\u003Epublish the linked flow before expecting collected engagers to enter it.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EContact discovery and enrichment\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFor contact discovery, assemble ProspectSearchFiltersDto directly from the user\u0026#39;s request. Include only fields clearly requested or strongly implied; do not invent unsupported filters.\u003C/li\u003E\n\u003Cli\u003EBefore contact discovery, call get_guide with topic=contact_discovery. Filter rules: use one two-letter Alpha-2 country code, bare company domains, concise titles, region/city with region_mode/city_mode=exclude for location exclusions, current_company_name with current_company_name_mode=exclude for company-name exclusions, current_company_primary_industry for strict company industry filters, and exclude_current_company_primary_industry for strict company industry exclusions. Use current_company_industry/exclude_current_company_industry only when broader inferred or secondary company industry matches are acceptable. Use common exact industry values from the guide;\u003Cbr /\u003Ecall get_contact_discovery_industry_values when the needed exact supported industry is not listed there.\u003C/li\u003E\n\u003Cli\u003EFor contact discovery previews, suggest discover_contacts with pageSize=1. It returns totalResultCount plus the first matching contact, reserves 1 credit, and charges 1 FirstTouch credit if a profile row is returned.\u003C/li\u003E\n\u003Cli\u003EA discover_contacts pageSize=1 preview is the first page of the same search, not a separate count-only call. If the customer wants more contacts after a preview, call discover_contacts with nextToken=response.nextPage and request only the additional contacts needed. For example, after previewing 1 contact for a target of 3, use pageSize=2 with nextToken;\u003Cbr /\u003Edo not restart the same search without nextToken.\u003C/li\u003E\n\u003Cli\u003Ediscover_contacts reserves pageSize credits and charges 1 FirstTouch credit per returned profile row, with pageSize limited to 10.\u003C/li\u003E\n\u003Cli\u003EAny cost returned by MCP tools is in FirstTouch credits, not USD. Do not present MCP cost fields as dollar prices unless a response explicitly returns a Team Plan Subscription price in USD.\u003C/li\u003E\n\u003Cli\u003EAfter discover_contacts, use response.nextSteps to offer a larger page, audience creation, another page, background import, flow attachment, or enrollment.\u003C/li\u003E\n\u003Cli\u003Estart_contact_discovery_audience_import can fetch up to 100 total profiles asynchronously and requires confirmedMaxCredits for additional rows.\u003C/li\u003E\n\u003Cli\u003ECharged enrichment tools consume FirstTouch credits when called. enrich_email, enrich_phone, enrich_contact, and enrich_company do not automatically apply or synchronize their returned data to any existing enrollment, Awaiting candidate, audience, HubSpot record, or saved prospect record. After using an enrichment result, explicitly tell the customer that nothing was injected automatically. Use the data in an Audience, enrollment, or other write only when the customer explicitly requests that separate action and the relevant tool permits it.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003ESingle-contact identity and enrollment\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFor one-contact dynamic actions, call get_guide with topic=dynamic_actions before add_dynamic_action. The guide is the preflight for contact lookup, existing enrollment choice, variable usage, approval behavior, enrichment choice, LinkedIn branch handling, and multi-step sequencing. Use topic=flow_plan_creation instead for reusable flow-plan creation.\u003C/li\u003E\n\u003Cli\u003EHard override: before find_mcp_enrollment or add_dynamic_action for a single contact, call find_contact_data with every known identity unless a verified enrich_contact, enrich_email, enrich_phone, or enrich_company result was returned earlier in this conversation. Do this even for a manual task or when the supplied identity seems sufficient. Use the lookup/enrichment result plus customer-supplied values to populate add_dynamic_action.contact and add_dynamic_action.company;\u003Cbr /\u003Edo not rely on chat memory.\u003C/li\u003E\n\u003Cli\u003EFor a single-contact action request, send enrollmentId when continuing an existing sequence, and put every known person field in add_dynamic_action.contact and company field in add_dynamic_action.company: prospectId, email, linkedInUrl, phone, firstName, lastName, role, location, company domain, and other company context. Exact identifiers such as enrollmentId, contact.prospectId, contact.email, contact.linkedInUrl, and contact.phone are strongest;\u003Cbr /\u003Enames and company.domain provide useful fallback matching. You do not need to resolve a prospectId when another supported identity is available.\u003C/li\u003E\n\u003Cli\u003EWhen the customer asks where contacts appear across FirstTouch, first use find_contact_data for name-only or ambiguous input. For the selected contact, call get_contact_trace with every supported identity already known as a separate identities item, up to 10: include each known email, LinkedIn URL, phone, HubSpot contact id, and a firstName, lastName, and companyDomain item when all three are known. Do not omit a known supported identity just because another exact identity is available. Each item contains exactly one direct identifier or the complete name-and-domain identity. The trace is a union of matches, not one canonical contact;\u003Cbr /\u003Euse each returned item\u0026#39;s matchedBy values to understand why it was included. Do not pass prospectId or enrollmentId, partial name data, or several identity kinds in one identities item.\u003C/li\u003E\n\u003Cli\u003EEvery single-contact dynamic action requires contact.firstName and contact.lastName in its effective identity. For a new sequence, provide both names in contact with the strongest exact target: contact.email, contact.linkedInUrl, contact.phone, or company.domain. A contact.prospectId is supported when it resolves to a full name. When continuing a selected enrollment that lacks either name, ask the customer for both names and pass them in contact;\u003Cbr /\u003Edo not invoke an enrichment tool just to obtain a name. Use enrollmentId to continue an existing sequence.\u003C/li\u003E\n\u003Cli\u003ETreat a customer-supplied exact action target, such as contact.email, contact.linkedInUrl, or contact.phone, as authoritative. A later weaker lookup by name, company, or partial identity must not replace that target. If lookup or enrichment returns a different exact email, LinkedIn URL, or phone, show the mismatch and ask which value to use before calling add_dynamic_action.\u003C/li\u003E\n\u003Cli\u003EAfter find_contact_data or verified same-conversation enrichment, call find_mcp_enrollment for a named or resolved contact with the known identifiers. If no candidate is returned and all required identity and action data is available, create the new dynamic action immediately: the customer\u0026#39;s original request is sufficient confirmation, so do not ask them to confirm the same action again. If any candidate is returned, show its sourceDescription when present, then ask the customer whether to continue a specific enrollment or start a new sequence. Do not infer this from status or sourceDescription: completed, canceled, failed, pending, and in-progress enrollments all require explicit customer choice before add_dynamic_action.\u003C/li\u003E\n\u003Cli\u003EHard override: after the customer chooses to continue a returned MCP Dynamic Actions enrollment, extend it with add_dynamic_action by passing the selected enrollmentId. Existing enrollment identity wins;\u003Cbr /\u003Einclude newly known contact/company fields only to fill missing enrollment data, never to change the person. If the selected enrollment lacks either name, ask the customer for both before appending them in contact. If a new exact contact.email, contact.linkedInUrl, contact.phone, or contact.prospectId differs from the selected enrollment, ask whether to start a new sequence instead.\u003C/li\u003E\n\u003Cli\u003EWhen creating a new single-contact dynamic sequence after a lookup returned a candidate, carry forward all useful known candidate fields into add_dynamic_action.contact and add_dynamic_action.company. This is especially required when action.message, action.prompt, action.subject, or action.name uses variables such as {ft.flow.prospect_first_name};\u003Cbr /\u003Epass the corresponding contact field instead of relying on chat memory.\u003C/li\u003E\n\u003Cli\u003EMCP Dynamic Actions do not enrich missing request inputs before adding an action: they use data already known in the request, saved prospect identity, contact-channel data returned by lookup sources such as enrollments or audience contacts, or the selected MCP enrollment. HubSpot contact/company enrichment after enrollment creation is separately controlled by the shared MCP Flow Plan\u0026#39;s is_enrich_hubspot setting, which is enabled by default. It does not replace the required contact.firstName, contact.lastName, or action target. For a missing contact.firstName or contact.lastName, ask the customer first;\u003Cbr /\u003Euse explicit lookup/enrichment only after customer confirmation.\u003C/li\u003E\n\u003Cli\u003EMCP Dynamic Actions do not use AI to generate email content or subjects. When enrollmentId is omitted, the new email enrollment defaults to new_thread and requires the final action.subject;\u003Cbr /\u003Eaction.subjectType is optional. When extending an existing enrollment, action.subjectType is required: use find_mcp_enrollment candidate.root to trace the requested append branch and choose new_thread (provide action.subject) or reply (only with a prior email on that branch;\u003Cbr /\u003Eomit action.subject so it is inherited). If the root has a prior email on the requested branch but the customer has not said whether this email is a reply or a separate conversation, ask before calling add_dynamic_action. Use get_flow_enrollment after selecting an enrollment when complete enrollment/action/task details or inbound reply content is needed;\u003Cbr /\u003Elist enrollment tools expose reply counts and latest timestamp only.\u003C/li\u003E\n\u003Cli\u003EBefore calling add_dynamic_action with contact fields merged from lookup/enrichment and customer-provided data, summarize the final prospect identity and exact action target and ask the customer to confirm. For example: \u0026quot;I will send the email to person@example.com for Artem Fokin;\u003Cbr /\u003Eis that okay?\u0026quot;\u003Cbr /\u003EDo not ask this extra confirmation when all required exact targets came directly from the customer and no lookup/enrichment data was merged.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDynamic Action sequencing and cleanup\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFor a multi-step dynamic action sequence for one contact, call add_dynamic_action once per step in order, with the returned enrollmentId, requested delays, and action.appendTarget when the user wants a LinkedIn accepted or timeout branch. Do not call get_guide with topic=flow_plan_creation, create_flow_plan, create_audience, attach_audience_to_flow, replace_flow_root, or manage_flow_publication for one-contact action requests. list_team_members is allowed only to resolve a requested sender or assignee. The only exception is update_flow_plan when the customer explicitly asks to change the shared MCP Dynamic Actions HubSpot settings.\u003C/li\u003E\n\u003Cli\u003EMCP Dynamic Actions support one LinkedIn connect action per enrollment, up to five linkedin_inmail actions per branch, and one linkedin_profile_view action per default, accepted, or timeout branch. linkedin_connect waits 14 days for acceptance by default;\u003Cbr /\u003Ewhen the customer requests another timeout, set action.connectionTimeout to a positive TimeSpan in d.hh:mm:ss or hh:mm:ss format. linkedin_inmail requires a non-empty action.prompt and action.subject;\u003Cbr /\u003Eaction.message is unsupported. After the first LinkedIn chat step on the same branch, every linkedin_inmail or linkedin_message step must keep at least three hours of total delay since the previous LinkedIn chat step, including intermediate blocking delays and its own action.delay. linkedin_profile_view requires a LinkedIn URL, has no content or human approval, and runs without a user task. A follow-up after an unresolved linkedin_connect defaults to the accepted branch. Use action.appendTarget=connection_timeout for timeout fallback, and action.appendTarget=connection_accepted when the user explicitly says accepted/after they accept.\u003C/li\u003E\n\u003Cli\u003EAfter add_dynamic_action returns nodeAppended=true, treat enrollmentId and nodeId as the write receipt for that requested step. Empty taskIds or temporarily empty get_flow_enrollment actions/tasks can mean async task materialization is still pending, or that a delayed/branched task is expected later;\u003Cbr /\u003Echeck taskIdsPending and taskMaterializationStatus, poll list_user_tasks/get_flow_enrollment only when taskIdsPending=true, and do not retry add_dynamic_action for the same step.\u003C/li\u003E\n\u003Cli\u003EUse remove_dynamic_action_prospect only to clean up or cancel one MCP Dynamic Actions enrollment. Prefer the returned enrollmentId;\u003Cbr /\u003Euse prospectId only when enrollmentId is not available and it identifies exactly one non-canceled MCP Dynamic Actions enrollment. If multiple enrollments may exist for the same prospect, call find_mcp_enrollment and ask which enrollmentId to cancel. Do not use it for normal flow-plan enrollments.\u003C/li\u003E\n\u003Cli\u003EHard override: do not modify the MCP Dynamic Actions flow plan structure, name, AI qualification, candidates, publication, audience, or enrollments. The only permitted direct mutation is update_flow_plan for its shared HubSpot settings: mcpDynamicActionsOptions.is_enrich_hubspot and mcpDynamicActionsOptions.is_push_to_hubspot_tasks. is_push_to_hubspot_tasks controls call, manual, and approval task sync together. These are shared Flow Plan settings, not add_dynamic_action parameters and not per-enrollment overrides. Do not pass the MCP flowPlanId to replace_flow_root, manage_flow_publication, attach_audience_to_flow, add_manual_flow_enrollment, enroll_awaiting_flow_items, cancel_flow_enrollments, or other normal flow-plan mutation tools. For LinkedIn connection accepted/timeout paths, use add_dynamic_action with action.appendTarget;\u003Cbr /\u003Edo not rewrite the shared MCP flow plan.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003ETasks and human approval\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFor a general request to view pending user or team tasks, or tasks the customer can approve, review, or act on, call list_user_tasks without types. types is an exact stored task-kind filter: call tasks require logging a call, manual tasks require marking manual work done, and section_approval tasks require approving grouped actions. All three can contain tasks for the customer to review or act on. Use types only when the customer explicitly requests a particular task kind.\u003C/li\u003E\n\u003Cli\u003EAfter add_dynamic_action, tell the customer which created actions require human approval or user task completion before they can run. Do not say the whole sequence will run automatically when any response has requiresHumanApproval=true or createsUserTask=true.\u003C/li\u003E\n\u003Cli\u003EAfter add_dynamic_action, offer the returned uiLinks. If \u0026quot;Open task\u0026quot;\u003Cbr /\u003Eis present, show it first;\u003Cbr /\u003Eotherwise offer \u0026quot;Open tasks\u0026quot;\u003Cbr /\u003Ewhen a task is expected, plus \u0026quot;Open flow activity\u0026quot;\u003Cbr /\u003Eso the customer can review the enrollment/actions in FirstTouch.\u003C/li\u003E\n\u003Cli\u003EAfter add_dynamic_action creates an immediate action that requires human approval, ask the customer to review and confirm the created task. For team owners/admins, use list_user_tasks with flowIds=[enrollmentId], statuses=[todo], types=[section_approval], includeTeamTasks=true, then preview_task. For regular users, use get_flow_enrollment to find the pending section_approval task;\u003Cbr /\u003Ecomplete it only if the caller has access, otherwise ask the assignee or a team owner/admin to approve it. Call complete_task only after the customer explicitly approves.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EReusable flows and audiences\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFor flow-plan creation, call get_guide with topic=flow_plan_creation. create_flow_plan requires a complete reusable root tree. Omit options, AI qualification, and candidates unless the user explicitly wants to override the server defaults.\u003C/li\u003E\n\u003Cli\u003EFor a flow workspace, use candidateDetails.items as the live source of truth for configured flow-plan and reassignment candidates. Match by userId. Never infer LinkedIn availability from reassignment payload candidates[].linkedin_account_id: it is a deprecated, ignored field and may be null even when the candidate has a usable LinkedIn account. Check candidateDetails.items[].linkedinAccount.status and synchronization fields instead.\u003C/li\u003E\n\u003Cli\u003EBefore creating or publishing a reusable flow, directly ask whether the user wants Manual Mode or Auto-Enrollment when they have not already specified it. Manual Mode uses processingStrategy=manual and requires explicit enrollment later. Standard Auto-Enrollment uses processingStrategy=default;\u003Cbr /\u003Euse processingStrategy=new_members_only only when the user explicitly asks for new source members only.\u003C/li\u003E\n\u003Cli\u003EFor complex Flow/Audience interactions, first present a short plan of the exact flow, audience, attachment, publish, and enrollment actions you intend to perform, then ask the customer to confirm before calling write tools.\u003C/li\u003E\n\u003Cli\u003EFor flow updates, prefer update_flow_plan for settings, replace_flow_root for node-tree replacement, and manage_flow_publication for publish/unpublish.\u003C/li\u003E\n\u003Cli\u003EAfter create_flow_plan or get_flow_workspace, use response.nextSteps to offer a test enrollment, all awaiting users, or selected users. For Manual Mode, suggest enrolling one selected test user before broader rollout when appropriate.\u003C/li\u003E\n\u003Cli\u003EPublishing a Manual Mode flow does not enroll awaiting contacts. Use enroll_awaiting_flow_items when the user asks to start awaiting contacts or signals in an attached flow.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003ESenders and capabilities\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EWhen a customer specifies a sender or action assignee by email, name, or user id, call list_team_members and compare the supplied identity with the returned members. Select the clearly intended member, even when one supplied character is likely wrong;\u003Cbr /\u003Eask the customer only when more than one member is plausible or none fits. Pass the selected returned userId as action.assignedUserId. For a LinkedIn action, inspect isLinkedinReady;\u003Cbr /\u003Eif the requested sender is not ready, explain that and ask before using allowUnreadyLinkedInAccount. Never infer a sender from the current user, a LinkedIn account name, or a LinkedIn Unibox conversation account.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EExecution queues and messaging\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EA null enrollment prospect.linkedinUrl is current data, not a prediction that a pending or delayed LinkedIn action will fail. LinkedIn actions attempt a fresh prospect LinkedIn lookup when they activate. Report a missing LinkedIn URL as the cause only when the LinkedIn action has actually failed with the corresponding action error;\u003Cbr /\u003Efor active/current LinkedIn execution state, use list_linkedin_outreach_queue.\u003C/li\u003E\n\u003Cli\u003EUse list_linkedin_outreach_queue when the customer asks for active/current LinkedIn actions, LinkedIn actions waiting to run, LinkedIn action/request status, LinkedIn queue, why a LinkedIn action has not sent yet, or LinkedIn actions needing review. Prefer view=active for active/current/waiting requests because it excludes terminal history;\u003Cbr /\u003Euse view=all for normal outreach rows across all statuses, and view=diagnostic_all only for expanded debug/show-everything inspection across non-standard/internal LinkedIn request types. Use list_enrollments/list_flow_plan_enrollments for broader flow/enrollment pages, not as the first tool for LinkedIn execution queue questions. When the customer asks for enrollments/activities and specifically mentions LinkedIn actions, check list_linkedin_outreach_queue as well because enrollment rows do not expose provider request status, awaiting requirements, or request gates.\u003C/li\u003E\n\u003Cli\u003EUse LinkedIn Unibox tools for synchronized conversation state: get_linkedin_unibox_counts and list_linkedin_unibox_conversations inspect counts and conversation summaries;\u003Cbr /\u003Eget_linkedin_unibox_conversation reads full messages without marking them read. To inspect one team member\u0026#39;s Unibox conversations, use that member\u0026#39;s linkedinAccount.id from list_team_members as linAccountId. These read tools never trigger synchronization. Call update_linkedin_unibox_conversation_state only for an explicit request to change read, archive, or tag state. It updates only supplied fields;\u003Cbr /\u003Etag=hot or nurture sets the one tag and tag=none clears it.\u003C/li\u003E\n\u003Cli\u003ECall send_linkedin_unibox_message only when the customer explicitly requested the exact text to be sent or approved an exact draft. Do not treat inspection, summarization, or drafting as approval. Do not override the sender account\u0026#39;s manual reply mode, and never retry automatically. On an ambiguous failure or timeout, re-fetch the conversation and ask the customer whether to retry.\u003C/li\u003E\n\u003Cli\u003EUse list_email_send_queue when the customer asks for submitted email sends, email queue status, sent/failed/canceled history, or why an email has not sent. Select view=in_queue, awaiting, done, canceled, or failed;\u003Cbr /\u003Eomitted userIds always means the current caller, while admins/team owners may select other team members explicitly. The response includes all five counts for the same filters. Treat estimated_execution_time_utc as FirstTouch\u0026#39;s expected send time, never inbox delivery. Phase 1 includes only actions submitted to the email sending service, so inspect get_flow_enrollment, list_enrollments, and list_user_tasks when an expected future or pre-dispatch action is absent.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EMetrics\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EUse get_team_metrics when the customer asks for team performance, actions sent, email/LinkedIn metrics, engagement, replies, sentiment, opportunities, meetings booked, or metrics filtered by date range, flow/source, or sender/team member. It supports flowPlanIds, userIds, fromUtc, toUtc, and optional email/LinkedIn chart buckets. Use list_flow_plans with includeMetrics=true for ranking or comparing individual flow plans, and use enrollment tools only when the customer asks for the underlying contacts/activities behind the counts.\u003C/li\u003E\n\u003Cli\u003EWhen finding the top/most/highest flow plan by a metric, use list_flow_plans with the relevant orderBy/orderDirection and limit=5 unless the customer asks for more. Set includeMetrics/includeCost only when the customer needs those values.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E"
  },
  "paths": {
    "/api/public/tools/add_audience_contacts": {
      "post": {
        "operationId": "add_audience_contacts",
        "summary": "Add Audience Contacts",
        "description": "Add one or more contacts to an existing manual, HubSpot-list, or Sales Navigator audience.\n\n**Usage notes**\n\n- Each contact must have email, linkedinUrl, or all of firstName, lastName, and companyDomain.\n- Duplicate contacts are skipped.\n- Adding contacts does not immediately enroll them; linked auto-enrollment flows may process them in the background, while manual flows require a separate enrollment action.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/add_audience_contacts_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/add_audience_contacts_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Add Audience Contacts",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/add_dynamic_action": {
      "post": {
        "operationId": "add_dynamic_action",
        "summary": "Add Dynamic Action",
        "description": "Create or extend one MCP Dynamic Actions enrollment for exactly one contact.\n\n**Required preflight**\n\n- Call get_guide with topic=dynamic_actions before this tool.\n- Before calling this tool, call find_contact_data with every known identity unless verified enrichment was returned earlier in the conversation.\n- Then call find_mcp_enrollment with the known identifiers; if candidates are returned, ask which enrollment to continue or whether to start a new sequence, and if none is returned, continue with the requested new action.\n- Resolve action.assignedUserId with get_current_user and list_team_members before calling this tool.\n- When content uses variables, use only fully qualified templates such as {ft.flow.prospect_first_name}; do not use aliases such as {{firstName}}.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EWorkflow and write receipt\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EThis tool adds one action step per call and returns flowPlanId, enrollmentId, nodeId, assignedUserId, approval/task flags, taskIds when task rows are available, taskIdsPending/taskMaterializationStatus for async task materialization, uiLinks, and nextSteps.\u003C/li\u003E\n\u003Cli\u003ETreat enrollmentId \u002B nodeId as the write receipt; if nodeAppended=true, do not retry add_dynamic_action for the same requested step just because taskIds is empty or get_flow_enrollment has not materialized actions/tasks yet.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EContact identity\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EEvery appended action requires contact.firstName and contact.lastName in its effective identity.\u003C/li\u003E\n\u003Cli\u003EFor a new sequence, provide both names in contact plus contact.email, contact.linkedInUrl, contact.phone, or company.domain; contact.prospectId is also supported when it resolves to a full name.\u003C/li\u003E\n\u003Cli\u003EWhen continuing a selected enrollment that lacks either name, provide both names in contact to backfill it.\u003C/li\u003E\n\u003Cli\u003EAsk the customer for missing names and do not invoke an enrichment tool automatically.\u003C/li\u003E\n\u003Cli\u003EUse the optional contact and company objects for verified context returned by find_contact_data or explicit enrichment; their fields are all optional.\u003C/li\u003E\n\u003Cli\u003EPopulate every other verified known field.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EContent and email behavior\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EThis tool does not enrich request inputs or generate content; pass final email, LinkedIn send, call, or task text written by the MCP client.\u003C/li\u003E\n\u003Cli\u003Elinkedin_profile_view has no content and only supports delay, appendTarget, and assignedUserId.\u003C/li\u003E\n\u003Cli\u003EMCP Dynamic Actions do not use AI to generate email subjects.\u003C/li\u003E\n\u003Cli\u003EFor a new email enrollment, omit action.subjectType: it defaults to new_thread and action.subject is required.\u003C/li\u003E\n\u003Cli\u003EFor an existing enrollment, action.subjectType is required: choose new_thread and provide action.subject for a separate conversation, or choose reply only when the selected append branch has a prior email;\u003Cbr /\u003Ereply inherits that subject and must omit action.subject.\u003C/li\u003E\n\u003Cli\u003EUse find_mcp_enrollment candidate.root to trace the requested append branch.\u003C/li\u003E\n\u003Cli\u003EUse get_flow_enrollment after selecting an enrollment only when complete enrollment/action/task details are needed.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EExisting enrollment and priority\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ETo continue an existing MCP Dynamic Actions enrollment, pass enrollmentId;\u003Cbr /\u003Eexisting enrollment identity wins, and supplied contact.email, contact.linkedInUrl, contact.phone, or contact.prospectId can only backfill missing values, not retarget the enrollment.\u003C/li\u003E\n\u003Cli\u003EOther contact and company context only fills missing enrollment properties and never overwrites an existing value.\u003C/li\u003E\n\u003Cli\u003ESet whole-enrollment scheduling priority only when the customer explicitly asks: use 1 for High, 0 or omit for normal, and -1 for Low.\u003C/li\u003E\n\u003Cli\u003EPriority on an existing enrollment updates it.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003ESender eligibility\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EResolve and pass action.assignedUserId before every call: use the current MCP user when no sender is requested, a named member when requested, or one eligible team member when the customer asks for any capable sender.\u003C/li\u003E\n\u003Cli\u003EEmail requires Email actions permission and a connected email account.\u003C/li\u003E\n\u003Cli\u003ELinkedIn connect/message/profile requires Social permission plus a live synced LinkedIn account; InMail additionally requires an eligible Premium or Sales Navigator plan.\u003C/li\u003E\n\u003Cli\u003EA linkedin_connect requires the selected sender not to be a saved 1st-degree connection of the contact; if already connected, use linkedin_message instead.\u003C/li\u003E\n\u003Cli\u003EA linkedin_message outside a connection_accepted branch requires the selected sender to be a saved 1st-degree connection; when another team member is connected instead, the validation error identifies that member for reassignment.\u003C/li\u003E\n\u003Cli\u003EWhen the selected sender is not connected, use linkedin_connect followed by a message on connection_accepted, or use linkedin_inmail if the sender has an eligible Premium or Sales Navigator plan.\u003C/li\u003E\n\u003Cli\u003ECall and manual tasks require their matching permissions.\u003C/li\u003E\n\u003Cli\u003EIf the selected user lacks a required capability, this tool rejects the action instead of silently assigning another user.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EAction requirements and scheduling\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EPass exactly one action with type email, linkedin_connect, linkedin_message, linkedin_inmail, linkedin_profile_view, manual_task, or call_task.\u003C/li\u003E\n\u003Cli\u003EEach action type exposes only its supported fields.\u003C/li\u003E\n\u003Cli\u003EEmail requires action.prompt and an effective recipient email.\u003C/li\u003E\n\u003Cli\u003ELinkedIn messages require action.message and an effective linkedInUrl.\u003C/li\u003E\n\u003Cli\u003Elinkedin_inmail requires non-empty action.prompt and action.subject, and does not accept action.message.\u003C/li\u003E\n\u003Cli\u003Elinkedin_profile_view supports one action per default, connection accepted, or connection timeout branch and cannot have content or human approval.\u003C/li\u003E\n\u003Cli\u003EManual tasks require action.name.\u003C/li\u003E\n\u003Cli\u003ECall tasks require action.message and an effective phone; action.name is not a call script.\u003C/li\u003E\n\u003Cli\u003EEmail, LinkedIn send actions, InMail, and call actions default to no human approval; set action.isHumanApprovalRequired=true only when the customer explicitly asks for review/approval.\u003C/li\u003E\n\u003Cli\u003EOmit action.delay or use 00:00:00 for no delay/immediate execution.\u003C/li\u003E\n\u003Cli\u003EFor a delay, use d.hh:mm:ss or hh:mm:ss, for example 5.00:00:00 for 5 days; do not use natural language such as \u0026#39;5 days\u0026#39;.\u003C/li\u003E\n\u003Cli\u003EUse action.appendTarget only for LinkedIn connection accepted/timeout branches.\u003C/li\u003E\n\u003Cli\u003EFor linkedin_connect, action.connectionTimeout optionally sets the acceptance window using a positive d.hh:mm:ss or hh:mm:ss TimeSpan; omit it for the 14-day default.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EShared Flow Plan settings\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EThis tool has no per-action HubSpot enrichment or task-sync flags: those are shared MCP Flow Plan settings configured only with update_flow_plan as mcpDynamicActionsOptions.is_enrich_hubspot and mcpDynamicActionsOptions.is_push_to_hubspot_tasks.\u003C/li\u003E\n\u003Cli\u003EThe task setting updates call, manual, and approval task sync together.\u003C/li\u003E\n\u003Cli\u003EThe returned flowPlanId is read-only for its name, flow structure, and other normal mutations; do not use it with flow-root, publication, audience, or enrollment mutation tools.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/add_dynamic_action_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/add_dynamic_action_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Add Dynamic Action",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/add_manual_flow_enrollment": {
      "post": {
        "operationId": "add_manual_flow_enrollment",
        "summary": "Add Manual Flow Enrollment",
        "description": "Add one contact/prospect to an existing flow.\n\n**Usage notes**\n\n- For a plain request such as \u0026#39;Add contact X to flow Y\u0026#39;, omit enrollmentMode so the flow plan\u0026#39;s processing strategy determines the outcome; a draft flow adds the contact to Awaiting.\n- Set enrollmentMode=enroll only when the user explicitly asks to enroll or start the contact immediately; the flow must be published.\n- Set enrollmentMode=manual only when the user explicitly asks for manual enrollment or to add the contact to Awaiting without starting it.\n- The flow plan is specified only by top-level flowPlanId.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/add_manual_flow_enrollment_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/add_manual_flow_enrollment_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Add Manual Flow Enrollment",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/attach_audience_to_flow": {
      "post": {
        "operationId": "attach_audience_to_flow",
        "summary": "Attach Audience To Flow",
        "description": "Attach an existing audience to an existing flow plan.\n\n**Usage notes**\n\n- Use get_flow_workspace after attaching when you need the refreshed flow state.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/attach_audience_to_flow_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/attach_audience_to_flow_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Attach Audience To Flow",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/cancel_flow_enrollments": {
      "post": {
        "operationId": "cancel_flow_enrollments",
        "summary": "Cancel Flow Enrollments",
        "description": "Cancel specific enrollment queue items in a flow, or all cancellable queue items when queueItemIds is omitted.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/cancel_flow_enrollments_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/cancel_flow_enrollments_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Cancel Flow Enrollments",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/complete_task": {
      "post": {
        "operationId": "complete_task",
        "summary": "Complete Task",
        "description": "Execute the primary action for a todo task: Log Call for call tasks, Mark as done for manual tasks, or Approve \u0026 Run for section approval tasks.\n\n**Usage notes**\n\n- Use preview_task first and do not call when readiness.canExecute=false.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/complete_task_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/complete_task_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Complete Task",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/create_audience": {
      "post": {
        "operationId": "create_audience",
        "summary": "Create Audience",
        "description": "Call get_guide with topic=audience_management before creating or linking an audience.\n\n**Usage notes**\n\n- Create an audience/source for Flow Plan creation from manual/external contacts, a HubSpot list, or Sales Navigator.\n- Can link to an existing flowPlanId during creation.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/create_audience_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/create_audience_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Create Audience",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/create_audience_from_profiles": {
      "post": {
        "operationId": "create_audience_from_profiles",
        "summary": "Create Audience From Profiles",
        "description": "Create a manual audience from already fetched persisted prospect ids, for example selected prospectId values returned by enrichment/discovery tools.\n\n**Usage notes**\n\n- For a contact-discovery workflow, call get_guide with topic=contact_discovery first.\n- Does not continue search and does not charge discovery credits.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/create_audience_from_profiles_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/create_audience_from_profiles_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Create Audience From Profiles",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/create_flow_plan": {
      "post": {
        "operationId": "create_flow_plan",
        "summary": "Create Flow Plan",
        "description": "Create a reusable flow plan for an audience, list, segment, or multiple recipients.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ECall get_guide with topic=flow_plan_creation before this tool.\u003C/li\u003E\n\u003Cli\u003Eflow.root is required; omitted options, AI qualification, and candidates use server defaults.\u003C/li\u003E\n\u003Cli\u003EDo not use this for actions on one specific prospect; call add_dynamic_action once per requested step instead.\u003C/li\u003E\n\u003Cli\u003EDo not use this when the user names an existing flow; enroll into that flow instead.\u003C/li\u003E\n\u003Cli\u003EIf content uses variables, call get_flow_available_variables first.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/create_flow_plan_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/create_flow_plan_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Create Flow Plan",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/delete_audience": {
      "post": {
        "operationId": "delete_audience",
        "summary": "Delete Audience",
        "description": "Delete an existing audience.\n\n**Usage notes**\n\n- Before calling this tool, warn the user that deletion cannot be undone.\n- Ask whether to cancel awaiting enrollments and whether to cancel enrollments already in progress if the user did not explicitly specify each choice.\n- Both options default to true only after the user has been asked.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/delete_audience_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/delete_audience_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Delete Audience",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/delete_flow_plan": {
      "post": {
        "operationId": "delete_flow_plan",
        "summary": "Delete Flow Plan",
        "description": "Permanently remove an existing flow plan.\n\n**Usage notes**\n\n- This tool cannot delete the MCP Dynamic Actions or HubSpot Custom Actions flow plans because they are system-managed.\n- Before calling this tool, warn the user and obtain explicit confirmation: all enrollments in the flow will be canceled, the flow plan cannot be restored, and its audience will continue to exist.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/delete_flow_plan_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/delete_flow_plan_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Delete Flow Plan",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/discover_contacts": {
      "post": {
        "operationId": "discover_contacts",
        "summary": "Discover Contacts",
        "description": "CHARGED TOOL.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ECall get_guide with topic=contact_discovery before this tool.\u003C/li\u003E\n\u003Cli\u003ELoad one contact discovery page and return nextSteps for audience creation, pagination, background import, flow attachment, or enrollment.\u003C/li\u003E\n\u003Cli\u003EFor general discovery, suggest pageSize=1 first to return totalResultCount plus a preview contact.\u003C/li\u003E\n\u003Cli\u003EAfter a preview or prior page, use returned nextPage as nextToken and request only additional rows; do not restart the same search without nextToken.\u003C/li\u003E\n\u003Cli\u003EReserves pageSize credits and charges 1 credit per returned profile row, up to 10 rows per call.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/discover_contacts_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/discover_contacts_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Discover Contacts",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/edit_task_action": {
      "post": {
        "operationId": "edit_task_action",
        "summary": "Edit Task Action",
        "description": "Edit one grouped action inside a todo section-approval task.\n\n**Usage notes**\n\n- Use preview_task first; use branchContext to distinguish Dynamic Actions paths and only send fields listed in actionGroup.actions[].editableFields.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/edit_task_action_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/edit_task_action_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Edit Task Action",
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/enrich_company": {
      "post": {
        "operationId": "enrich_company",
        "summary": "Enrich Company",
        "description": "CHARGED TOOL.\n\n**Usage notes**\n\n- Find enriched company data by domain, website URL, or LinkedIn company URL.\n- This consumes FirstTouch company enrichment credits.\n- The enrichment result is not automatically applied or synchronized to any existing enrollment, Awaiting candidate, audience, HubSpot record, or saved prospect record.\n- Tell the customer that nothing was injected automatically; a separate customer-requested write action is required to use the data elsewhere.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/enrich_company_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/enrich_company_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Enrich Company",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/enrich_contact": {
      "post": {
        "operationId": "enrich_contact",
        "summary": "Enrich Contact",
        "description": "CHARGED TOOL.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFind an enriched contact profile.\u003C/li\u003E\n\u003Cli\u003EProvide linkedInUrl, email, or firstName, lastName, and companyDomain.\u003C/li\u003E\n\u003Cli\u003EThis consumes FirstTouch contact credits.\u003C/li\u003E\n\u003Cli\u003EThe enrichment result is not automatically applied or synchronized to any existing enrollment, Awaiting candidate, audience, HubSpot record, or saved prospect record.\u003C/li\u003E\n\u003Cli\u003ETell the customer that nothing was injected automatically; a separate customer-requested write action is required to use the data elsewhere.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/enrich_contact_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/enrich_contact_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Enrich Contact",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/enrich_email": {
      "post": {
        "operationId": "enrich_email",
        "summary": "Enrich Email",
        "description": "CHARGED TOOL.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFind a prospect\u0026#39;s work email.\u003C/li\u003E\n\u003Cli\u003EProvide firstName, lastName, and companyDomain, or provide linkedInUrl.\u003C/li\u003E\n\u003Cli\u003EThis consumes FirstTouch email credits.\u003C/li\u003E\n\u003Cli\u003EThe enrichment result is not automatically applied or synchronized to any existing enrollment, Awaiting candidate, audience, HubSpot record, or saved prospect record.\u003C/li\u003E\n\u003Cli\u003ETell the customer that nothing was injected automatically; a separate customer-requested write action is required to use the data elsewhere.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/enrich_email_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/enrich_email_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Enrich Email",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/enrich_phone": {
      "post": {
        "operationId": "enrich_phone",
        "summary": "Enrich Phone",
        "description": "CHARGED TOOL.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFind a prospect\u0026#39;s phone number.\u003C/li\u003E\n\u003Cli\u003EProvide linkedInUrl, or companyDomain with firstName or email.\u003C/li\u003E\n\u003Cli\u003EThis consumes FirstTouch phone credits.\u003C/li\u003E\n\u003Cli\u003EThe enrichment result is not automatically applied or synchronized to any existing enrollment, Awaiting candidate, audience, HubSpot record, or saved prospect record.\u003C/li\u003E\n\u003Cli\u003ETell the customer that nothing was injected automatically; a separate customer-requested write action is required to use the data elsewhere.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/enrich_phone_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/enrich_phone_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Enrich Phone",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/enroll_awaiting_flow_items": {
      "post": {
        "operationId": "enroll_awaiting_flow_items",
        "summary": "Enroll Awaiting Flow Items",
        "description": "Enroll awaiting items from an attached published flow source.\n\n**Usage notes**\n\n- Use this when the user names an existing flow and wants already-awaiting contact(s) or signal(s) started in that plan.\n- First call get_flow_workspace for the flow, then pass awaiting.items[].candidate_id values; ids look like enrollment_candidate_*.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/enroll_awaiting_flow_items_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/enroll_awaiting_flow_items_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Enroll Awaiting Flow Items",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/find_contact_data": {
      "post": {
        "operationId": "find_contact_data",
        "summary": "Find Contact Data",
        "description": "Call get_guide with topic=contact_identity for matching, identifier, conflict, trace, enrichment, and persistence guidance.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFind free existing contact data for the current team from saved FirstTouch contacts, enrollments, awaiting Flow Plan candidates, and audience contacts.\u003C/li\u003E\n\u003Cli\u003ESaved-contact matches identify existing prospects but may not return stored email, LinkedIn, or phone fields; enrollment, awaiting-candidate, and audience matches can return stored channel data when available.\u003C/li\u003E\n\u003Cli\u003EUse when the user names a contact or provides partial identity.\u003C/li\u003E\n\u003Cli\u003ESend every identity detail already known (for example firstName and lastName alongside email or linkedInUrl): exact identifiers are preferred, while the other details provide fallback matching.\u003C/li\u003E\n\u003Cli\u003EThis does not enrich, spend credits, or create enrollments.\u003C/li\u003E\n\u003Cli\u003EDuplicate contact data across sources is collapsed.\u003C/li\u003E\n\u003Cli\u003EFor action workflows, a customer-supplied exact email, LinkedIn URL, or phone is a constraint; do not replace it with candidate data unless the customer confirms the final action target.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/find_contact_data_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/find_contact_data_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Find Contact Data",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/find_mcp_enrollment": {
      "post": {
        "operationId": "find_mcp_enrollment",
        "summary": "Find MCP Enrollment",
        "description": "Call get_guide with topic=dynamic_actions for the complete one-contact workflow.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFind existing MCP Dynamic Actions enrollments for one contact, including completed or canceled history, so the customer can decide whether to continue an enrollment or start a new one.\u003C/li\u003E\n\u003Cli\u003EIf no candidate is returned and the requested action has all required identity and target data, create the new action without asking the customer to confirm the same request again.\u003C/li\u003E\n\u003Cli\u003EIf any candidate is returned, the MCP client must stop and ask the customer which enrollment to continue or whether to start a new sequence;\u003Cbr /\u003Enever infer that choice from status or flowPlanDisplayStatus, even when the match is completed, canceled, failed, pending, or in-progress.\u003C/li\u003E\n\u003Cli\u003ESearch by enrollmentId, prospectId, email, LinkedIn URL, phone, HubSpot contact id, or name with optional companyDomain.\u003C/li\u003E\n\u003Cli\u003EThis searches MCP Dynamic Actions enrollments across dynamic action flow plans;\u003Cbr /\u003Ecandidates include sourceDescription when known, flowPlanId, raw runtime status, hasFailedAction, flowPlanDisplayStatus, and a lightweight root with nodeId, type, payload.subject, payload.subjectType, next, onConnectionAccepted, and onConnectionTimeout.\u003C/li\u003E\n\u003Cli\u003EUse sourceDescription as helpful context when asking whether to continue or start a new sequence, but never infer that decision.\u003C/li\u003E\n\u003Cli\u003EUse root to choose an email reply or new thread on the requested branch.\u003C/li\u003E\n\u003Cli\u003EUse get_flow_enrollment after selecting an enrollment only when complete enrollment/action/task details are needed.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/find_mcp_enrollment_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/find_mcp_enrollment_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Find MCP Enrollment",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_auth_scopes": {
      "post": {
        "operationId": "get_auth_scopes",
        "summary": "Get Auth Scopes",
        "description": "Returns capability scopes inferred from the current request headers and team subscription.\n\n**Usage notes**\n\n- Contains no access tokens, raw auth headers, or secret values.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_auth_scopes_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_auth_scopes_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Auth Scopes",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_contact_discovery_audience_import_status": {
      "post": {
        "operationId": "get_contact_discovery_audience_import_status",
        "summary": "Get Contact Discovery Audience Import Status",
        "description": "Get status for a contact discovery audience import.\n\n**Usage notes**\n\n- Saved prospect ids are omitted by default; set includeProspectIds when you need to recover partial results after a failed import.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_contact_discovery_audience_import_status_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_contact_discovery_audience_import_status_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Contact Discovery Audience Import Status",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_contact_discovery_industry_values": {
      "post": {
        "operationId": "get_contact_discovery_industry_values",
        "summary": "Get Contact Discovery Industry Values",
        "description": "Return exact industry enum values for discover_contacts filters.current_company_primary_industry, filters.exclude_current_company_primary_industry, filters.current_company_industry, and filters.exclude_current_company_industry.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_contact_discovery_industry_values_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_contact_discovery_industry_values_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Contact Discovery Industry Values",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_contact_trace": {
      "post": {
        "operationId": "get_contact_trace",
        "summary": "Get Contact Trace",
        "description": "Return a compact cross-system trace for a supplied identities array of at most 10 items: Flow Plans where a matching contact is awaiting or enrolled, audience memberships, enrollments, and readable tasks.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EFor a selected contact, include every known supported identity as a separate array item: email, LinkedIn URL, phone, HubSpot contact id, and firstName, lastName, and companyDomain together when all three are known.\u003C/li\u003E\n\u003Cli\u003EDo not choose only one known identity.\u003C/li\u003E\n\u003Cli\u003EEach array item must contain exactly one direct identifier (email, LinkedIn URL, phone, or HubSpot contact id), or all of firstName, lastName, and companyDomain.\u003C/li\u003E\n\u003Cli\u003EThis tool searches every item and returns the union of matching records, not one canonical contact.\u003C/li\u003E\n\u003Cli\u003EEvery Flow Plan, audience, and enrollment includes matchedBy, showing the identity values that produced it.\u003C/li\u003E\n\u003Cli\u003EUse find_contact_data first for name-only searches or multiple matches.\u003C/li\u003E\n\u003Cli\u003EFirstTouch prospectId and enrollmentId are not accepted because they do not identify a contact across all trace sources.\u003C/li\u003E\n\u003Cli\u003EEach enrollment, awaiting-candidate, and audience-contact lookup is capped at 50 rows per identity; notes warns when a source reaches that cap and the trace may be incomplete.\u003C/li\u003E\n\u003Cli\u003EThis is read-only and does not enrich, spend credits, or create an enrollment.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_contact_trace_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_contact_trace_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Contact Trace",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_credits_usage": {
      "post": {
        "operationId": "get_credits_usage",
        "summary": "Get Credits Usage",
        "description": "Returns the current team credits account values.\n\n**Usage notes**\n\n- Reads the same billing account source used by the gateway credits balance API; contains no tokens or secret values.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_credits_usage_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_credits_usage_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Credits Usage",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_current_user": {
      "post": {
        "operationId": "get_current_user",
        "summary": "Get Current User",
        "description": "Returns the current FirstTouch user and team names, ids, permissions, and active teams for future workspace switching.\n\n**Usage notes**\n\n- Contains no access tokens, raw auth headers, or secret values.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_current_user_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_current_user_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Current User",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_feature_costs": {
      "post": {
        "operationId": "get_feature_costs",
        "summary": "Get Feature Costs",
        "description": "Returns the current billing feature cost table.\n\n**Usage notes**\n\n- Contains no account balance, access tokens, or secret values.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_feature_costs_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_feature_costs_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Feature Costs",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_flow_available_variables": {
      "post": {
        "operationId": "get_flow_available_variables",
        "summary": "Get Flow Available Variables",
        "description": "Returns canonical fully qualified variable names for flow prompts, dynamic action prompts/messages, task text, email subjects, and branch expressions.\n\n**Usage notes**\n\n- Use returned templates exactly and do not use aliases or shorthand like {email} or {prospect_email}.\n- Calling this tool does not mean a Flow Plan should be created; for one named contact, still use find_contact_data before add_dynamic_action.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_flow_available_variables_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_flow_available_variables_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Flow Available Variables",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_flow_enrollment": {
      "post": {
        "operationId": "get_flow_enrollment",
        "summary": "Get Flow Enrollment",
        "description": "Get one enrollment/activity by id, including individual inbound email and LinkedIn replies with message content, tone, and received time; compact actions, tasks, warnings, interpretation notes, required follow-up action, and links.\n\n**Usage notes**\n\n- The notes explain how to assess deferred LinkedIn prospect enrichment and candidate account availability.\n- Set includeFlowTree=true to inspect the root/tree stored on the enrollment; this snapshot can differ from the current flow-plan root after later edits.\n- Omits the tree and enrollment.properties by default; action operationStatus is execution state, while taskStatus is the user-facing pending/done state.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_flow_enrollment_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_flow_enrollment_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Flow Enrollment",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_flow_source_modes": {
      "post": {
        "operationId": "get_flow_source_modes",
        "summary": "Get Flow Source Modes",
        "description": "Returns supported source modes and required request fields for flow creation.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_flow_source_modes_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_flow_source_modes_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Flow Source Modes",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_flow_workspace": {
      "post": {
        "operationId": "get_flow_workspace",
        "summary": "Get Flow Workspace",
        "description": "Get the current workspace for an existing flow: flow details, live details for its configured candidates, linked source status, estimated single-enrollment credit cost, awaiting contacts or signal events, enrollment counts/statistics, variable guidance, and available enrollment actions.\n\n**Usage notes**\n\n- candidateDetails is the source of truth for candidate account state; do not infer LinkedIn availability from the deprecated reassignment payload linkedin_account_id.\n- Use this for flow-level enrollment statistics; use list_flow_plan_enrollments for this flow\u0026#39;s page-style rows, list_enrollments for advanced multi-flow enrollment search, and get_flow_enrollment for one enrollment\u0026#39;s actions/warnings.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_flow_workspace_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_flow_workspace_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Flow Workspace",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_guide": {
      "post": {
        "operationId": "get_guide",
        "summary": "Get Guide",
        "description": "Returns FirstTouch documentation as Markdown.\n\n**Usage notes**\n\n- Topics cover the domain overview, reusable flow creation, one-contact Dynamic Actions, contact discovery, audiences, enrollments, tasks and approvals, contact identity, and senders and capabilities.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_guide_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_guide_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Guide",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_linkedin_unibox_conversation": {
      "post": {
        "operationId": "get_linkedin_unibox_conversation",
        "summary": "Get LinkedIn Unibox Conversation",
        "description": "Returns one synchronized FirstTouch LinkedIn Unibox conversation, its sender and participant context, and complete messages.\n\n**Usage notes**\n\n- Reading always uses mark_read=false, so inspection never changes unread state and does not trigger synchronization.\n- Message output includes direction, timestamp, text, type, send status, and event/edit/delete/hidden indicators.\n- Enrollment details, tasks, and activity-history payloads are intentionally excluded from this v1 response.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_linkedin_unibox_conversation_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_linkedin_unibox_conversation_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get LinkedIn Unibox Conversation",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_linkedin_unibox_counts": {
      "post": {
        "operationId": "get_linkedin_unibox_counts",
        "summary": "Get LinkedIn Unibox Counts",
        "description": "Returns LinkedIn Unibox count buckets within the same accessible sender, search, and latest-message date scope.\n\n**Usage notes**\n\n- It returns allCount, hotCount, nurtureCount, unreadCount, and archiveCount.\n- It does not accept tags, unreadOnly, or archived filters because those values are separate count buckets.\n- This reads synchronized FirstTouch Unibox state and does not trigger synchronization.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_linkedin_unibox_counts_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_linkedin_unibox_counts_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get LinkedIn Unibox Counts",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_outreach_queue_insights": {
      "post": {
        "operationId": "get_outreach_queue_insights",
        "summary": "Get Outreach Queue Insights",
        "description": "Explains the canonical causes, resolution ownership, affected action counts, and reliable timing across the filtered active Social Outreach Queue.\n\n**Usage notes**\n\n- Use status_category and resolution_mode to determine whether human action is required or FirstTouch expects work to resume automatically;\u003Cbr /\u003Enull timing means no reliable estimate exists, and ready for processing does not mean immediate send because queue order, Work Schedule, and safety spacing still apply.\n- The response preserves the canonical queue insight fields and authorized sender identities unchanged.\n- This reads stored FirstTouch data only and performs no external requests.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_outreach_queue_insights_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_outreach_queue_insights_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Outreach Queue Insights",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_social_engagement_config": {
      "post": {
        "operationId": "get_social_engagement_config",
        "summary": "Get Social Engagement Config",
        "description": "Returns the current FirstTouch Social Engagement setup for the team.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ERequires team owner/admin access.\u003C/li\u003E\n\u003Cli\u003EIncludes whether linkedin_engagement is enabled/unlocked, the existing UI-linked Social Engagement flow plan, and monitored profile counts.\u003C/li\u003E\n\u003Cli\u003EUse this to refresh or inspect current state when no profile mutation was just performed; manage_social_engagement_monitored_profile already returns socialEngagement.flowPlan.\u003C/li\u003E\n\u003Cli\u003EAdding a monitored profile does not require this tool.\u003C/li\u003E\n\u003Cli\u003ELike the UI config read, this may initialize missing default signal config; it does not relink the signal flow.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_social_engagement_config_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_social_engagement_config_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Social Engagement Config",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/get_team_metrics": {
      "post": {
        "operationId": "get_team_metrics",
        "summary": "Get Team Metrics",
        "description": "Returns FirstTouch team metrics using the same core filters as the metrics endpoints: UTC date range, flow plan/source ids, and team member user ids.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EUse this when the customer asks for team performance, actions sent, manual task counts, email or LinkedIn engagement, replies, sentiment, opportunities, meetings booked, or email/LinkedIn chart trends.\u003C/li\u003E\n\u003Cli\u003EBy default it returns totals, actions, engagement, and opportunity metrics; request emailChart or linkedinChart only when the customer asks for trend/chart/bucket data.\u003C/li\u003E\n\u003Cli\u003EflowPlanIds map to the API source_ids filter.\u003C/li\u003E\n\u003Cli\u003ETeam owners can omit userIds to include all team users; non-owners are scoped by the service to their own user.\u003C/li\u003E\n\u003Cli\u003EThis does not export CSV rows or return individual opportunities.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_team_metrics_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_team_metrics_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get Team Metrics",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/get_user_credit_usage": {
      "post": {
        "operationId": "get_user_credit_usage",
        "summary": "Get User Credit Usage",
        "description": "Returns credits spent by one user in the current team, with a breakdown by billing feature.\n\n**Usage notes**\n\n- Requires team billing access.\n- The UTC date bounds are inclusive.\n- Optionally filter attributed transactions by source: Mcp, WebApp, Extension, PublicApi, or Unknown.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_user_credit_usage_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/get_user_credit_usage_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Get User Credit Usage",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_audiences": {
      "post": {
        "operationId": "list_audiences",
        "summary": "List Audiences",
        "description": "Returns existing audiences that can be inspected or attached to a flow.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_audiences_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_audiences_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Audiences",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_credit_transactions": {
      "post": {
        "operationId": "list_credit_transactions",
        "summary": "List Credit Transactions",
        "description": "Lists the current team\u0027s committed credits transaction history with UTC date, billing feature, user, and source filters.\n\n**Usage notes**\n\n- Requires team billing access.\n- Use userId to return the exact transactions attributed to one user.\n- Results can include committed spend, purchases, or administrative adjustments; inspect transaction type before describing an item as spent credits.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_credit_transactions_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_credit_transactions_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Credit Transactions",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_email_send_queue": {
      "post": {
        "operationId": "list_email_send_queue",
        "summary": "List Email Send Queue",
        "description": "Lists FirstTouch email send queue rows that have already been submitted to the email sending service.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EUse this for queued or awaiting submitted email sends, sent email history, failed or canceled attempts, and as the first execution-state check when a customer asks why an email has not sent.\u003C/li\u003E\n\u003Cli\u003EView is one of in_queue, awaiting, done, canceled, or failed and defaults to in_queue.\u003C/li\u003E\n\u003Cli\u003EThe response includes the selected keyset page plus all five view counts using the same sender, search, and Flow Plan filters.\u003C/li\u003E\n\u003Cli\u003Eexpected send times describe FirstTouch sending, not inbox delivery.\u003C/li\u003E\n\u003Cli\u003EOmitted userIds always scopes to the current caller, including admins and team owners; elevated callers must select other team members explicitly.\u003C/li\u003E\n\u003Cli\u003EIf an expected email is absent, follow response.nextSteps because phase 1 excludes actions that have not reached mail-service submission.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_email_send_queue_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_email_send_queue_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Email Send Queue",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_enrollments": {
      "post": {
        "operationId": "list_enrollments",
        "summary": "List Enrollments",
        "description": "Call get_guide with topic=enrollment_management for enrollment, Awaiting, queue-item, identifier, and status guidance.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EAdvanced search for lightweight real enrollment rows.\u003C/li\u003E\n\u003Cli\u003EUses the enrollment read model and returns source=flow rows only; it does not return queue-only rows or UI page rows.\u003C/li\u003E\n\u003Cli\u003EDo not use this for active/current LinkedIn actions, LinkedIn action/request status, LinkedIn queue diagnostics, or why a LinkedIn action has not sent; use list_linkedin_outreach_queue instead.\u003C/li\u003E\n\u003Cli\u003EIf the customer asks for enrollments/activities and specifically mentions LinkedIn actions, check list_linkedin_outreach_queue as well because enrollment rows do not expose provider request status, awaiting requirements, or request gates.\u003C/li\u003E\n\u003Cli\u003EUse this, rather than list_flow_plan_enrollments, when filtering completed, failed, or canceled enrollments by when that terminal status happened\u2014for example, \u0026#39;canceled enrollments for this flow in the last 12 hours\u0026#39;.\u003C/li\u003E\n\u003Cli\u003EPass flowPlanId, statuses, and finishedFrom/finishedTo; from/to filter enrollment creation time only.\u003C/li\u003E\n\u003Cli\u003EFor a simple one-flow status page without a terminal-date range, use list_flow_plan_enrollments.\u003C/li\u003E\n\u003Cli\u003ERows include replySummary with counts and latest timestamp, but not reply bodies; use enrollmentId with get_flow_enrollment only when canInspectEnrollment is true to read individual replies.\u003C/li\u003E\n\u003Cli\u003EOmits root, tasks, and action payloads.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_enrollments_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_enrollments_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Enrollments",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_flow_plan_credits_usage": {
      "post": {
        "operationId": "list_flow_plan_credits_usage",
        "summary": "List Flow Plan Credits Usage",
        "description": "Lists credits spent by the current team\u0027s flow plans from the same source as the flow-plan/credits-usage-cursor UI endpoint.\n\n**Usage notes**\n\n- Requires team billing access.\n- Use fromUtc and toUtc for the reporting period.\n- Follow cursor pages to calculate a complete total across all matching plans.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_flow_plan_credits_usage_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_flow_plan_credits_usage_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Flow Plan Credits Usage",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_flow_plan_enrollments": {
      "post": {
        "operationId": "list_flow_plan_enrollments",
        "summary": "List Flow Plan Enrollments",
        "description": "List enrollment page rows for one flow plan and one status bucket.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EUse this for a simple request in a specific flow, such as \u0026#39;show in-progress enrollments for this flow\u0026#39;.\u003C/li\u003E\n\u003Cli\u003EIt does not filter by when an enrollment completed, failed, or was canceled.\u003C/li\u003E\n\u003Cli\u003EFor a terminal-status time range, such as \u0026#39;canceled enrollments for this flow in the last 12 hours\u0026#39;, use list_enrollments with flowPlanId, statuses, and finishedFrom/finishedTo.\u003C/li\u003E\n\u003Cli\u003EUses the flow-plan enrollment page service and can return both source=flow rows and source=queue rows.\u003C/li\u003E\n\u003Cli\u003ERows include replySummary with counts and latest timestamp, but not reply bodies; use get_flow_enrollment with enrollmentId to read individual replies.\u003C/li\u003E\n\u003Cli\u003EQueue rows do not have enrollmentId yet; use queueItemId for queue actions, not get_flow_enrollment.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_flow_plan_enrollments_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_flow_plan_enrollments_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Flow Plan Enrollments",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_flow_plans": {
      "post": {
        "operationId": "list_flow_plans",
        "summary": "List Flow Plans",
        "description": "List compact flow plans for the caller\u0027s team.\n\n**Usage notes**\n\n- Does not return the flow root/tree.\n- Metrics and estimated per-enrollment cost are optional; request includeMetrics/includeCost only when needed.\n- Supports sorting by created, name, enrollments, replies, opportunities, or awaiting.\n- For top/most/highest flow questions, sort by the requested metric and use limit=5 unless the customer asks for more.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_flow_plans_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_flow_plans_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Flow Plans",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_hubspot_lists": {
      "post": {
        "operationId": "list_hubspot_lists",
        "summary": "List HubSpot Lists",
        "description": "Returns HubSpot contact lists available to the current team.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_hubspot_lists_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_hubspot_lists_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List HubSpot Lists",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": true,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_linkedin_outreach_queue": {
      "post": {
        "operationId": "list_linkedin_outreach_queue",
        "summary": "List LinkedIn Outreach Queue",
        "description": "Lists FirstTouch LinkedIn outreach queue rows.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EUse this when the customer asks for active LinkedIn actions, current LinkedIn actions, LinkedIn actions waiting to run, LinkedIn action status, where a LinkedIn request/action/outreach step stands, why a LinkedIn action has not sent yet, what needs review or approval, what is pending for a sender/source/contact, or which LinkedIn actions completed, failed, or were canceled.\u003C/li\u003E\n\u003Cli\u003EUse view for common slices: active returns pending provider requests plus pre-provider-request blockers and excludes terminal history;\u003Cbr /\u003Ereview_required returns only pre-provider-request actions blocked by requirements;\u003Cbr /\u003Ein_queue returns created provider requests still pending;\u003Cbr /\u003Edone, canceled, and failed return terminal provider requests;\u003Cbr /\u003Eall returns normal outreach rows across pending, blocked, and terminal states for view_profile, send_connection, and send_message;\u003Cbr /\u003Ediagnostic_all returns an expanded debug view across all LinkedIn request types, including non-standard/internal requests;\u003Cbr /\u003Ecustom uses the explicit advanced filters.\u003C/li\u003E\n\u003Cli\u003EAdvanced filters can narrow by sender users, LinkedIn account ids, flow plans, action/request types, ids, search text, and date ranges.\u003C/li\u003E\n\u003Cli\u003EAfter calling, follow response.nextSteps for task approval, activity inspection, scheduler/limit delays, account blockers, and pagination.\u003C/li\u003E\n\u003Cli\u003EThis reads stored FirstTouch data only and performs no external requests.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_linkedin_outreach_queue_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_linkedin_outreach_queue_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List LinkedIn Outreach Queue",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_linkedin_team_connections": {
      "post": {
        "operationId": "list_linkedin_team_connections",
        "summary": "List LinkedIn Team Connections",
        "description": "Returns saved LinkedIn connection data from the FirstTouch database only.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EWith no filters, returns paginated known connections for the current team.\u003C/li\u003E\n\u003Cli\u003EWhen the user asks to find, show, or search connections by a role, job title, profession, department, or specialty, you MUST populate headlineKeywords and MUST NOT make an unfiltered call.\u003C/li\u003E\n\u003Cli\u003EExamples: \u0026#39;Sales Persons in my team connections\u0026#39;, \u0026#39;people in sales\u0026#39;, \u0026#39;CFOs\u0026#39;, \u0026#39;marketing leaders\u0026#39;, or \u0026#39;React developers\u0026#39;.\u003C/li\u003E\n\u003Cli\u003EFirst extract the role-bearing word or phrase; ignore generic group words such as person, people, contacts, and connections.\u003C/li\u003E\n\u003Cli\u003EFor \u0026#39;Sales Persons\u0026#39;, sales is the role-bearing term: include \u0026#39;sales\u0026#39; as a fallback, not only \u0026#39;salesperson\u0026#39;.\u003C/li\u003E\n\u003Cli\u003EDerive up to nine precise literal title alternatives plus one broad, meaningful role fallback (ten keywords maximum) and pass them together through headlineKeywords; it matches any alternative only against saved connection headlines.\u003C/li\u003E\n\u003Cli\u003EWhen the request limits when the LinkedIn connection was made, populate connectedFromUtc and/or connectedToUtc.\u003C/li\u003E\n\u003Cli\u003EResolve relative periods before calling: \u0026#39;last week\u0026#39; is the prior Monday 00:00 UTC (inclusive) through the current Monday 00:00 UTC (exclusive); \u0026#39;past 7 days\u0026#39; is a rolling seven-day range.\u003C/li\u003E\n\u003Cli\u003EUse other filters for a known person, owner, LinkedIn URL, or public identifier.\u003C/li\u003E\n\u003Cli\u003EDo not use weak standalone words such as \u0026#39;person\u0026#39;, \u0026#39;manager\u0026#39;, or \u0026#39;director\u0026#39; as keywords; expand abbreviations where possible.\u003C/li\u003E\n\u003Cli\u003EThis is deterministic keyword matching over saved data, not semantic/RAG search, reads stored FirstTouch data only, and performs no external requests.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_linkedin_team_connections_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_linkedin_team_connections_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List LinkedIn Team Connections",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_linkedin_unibox_conversations": {
      "post": {
        "operationId": "list_linkedin_unibox_conversations",
        "summary": "List LinkedIn Unibox Conversations",
        "description": "Lists synchronized FirstTouch LinkedIn Unibox conversations ordered by latest message descending.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ESearch covers participant name, LinkedIn URL, company name, company domain, and latest-message preview.\u003C/li\u003E\n\u003Cli\u003Etags accepts hot and nurture; supplying both uses OR semantics, while omitted or empty tags applies no tag filter.\u003C/li\u003E\n\u003Cli\u003EunreadOnly=true returns only unread conversations.\u003C/li\u003E\n\u003Cli\u003Earchived=true returns archived only, archived=false non-archived only, and omitted archived returns both.\u003C/li\u003E\n\u003Cli\u003EDate boundaries are inclusive and apply to latest-message time, falling back to conversation creation time.\u003C/li\u003E\n\u003Cli\u003EDefaults to 20 rows, caps at 100, and uses opaque nextCursor pagination.\u003C/li\u003E\n\u003Cli\u003EThis does not trigger synchronization.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_linkedin_unibox_conversations_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_linkedin_unibox_conversations_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List LinkedIn Unibox Conversations",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_purchases": {
      "post": {
        "operationId": "list_purchases",
        "summary": "List Purchases",
        "description": "Lists the current team\u0027s purchase history from the same billing source and with the same UTC date filters as the charge/cursor Billing UI endpoint.\n\n**Usage notes**\n\n- Requires team billing access.\n- Results include subscription, additional-credits, and manual charges.\n- Follow cursor pages to read the complete history.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_purchases_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_purchases_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Purchases",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_social_engagement_engagers": {
      "post": {
        "operationId": "list_social_engagement_engagers",
        "summary": "List Social Engagement Engagers",
        "description": "Lists stored Social Engagement engagers for a monitored LinkedIn profile or company page using FirstTouch data only.\n\n**Usage notes**\n\n- Requires team owner/admin access.\n- Use this to inspect who liked/commented on posts for a profile or company page after polling has run.\n- Defaults uniqueOnly=true to answer \u0026#39;who engaged\u0026#39;; set uniqueOnly=false to inspect every captured engagement row.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_social_engagement_engagers_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_social_engagement_engagers_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Social Engagement Engagers",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_social_engagement_monitored_profiles": {
      "post": {
        "operationId": "list_social_engagement_monitored_profiles",
        "summary": "List Social Engagement Monitored Profiles",
        "description": "Lists Social Engagement monitored LinkedIn profiles or company pages for the current team.\n\n**Usage notes**\n\n- Requires team owner/admin access.\n- This corresponds to the UI section Monitored profiles / Profiles to monitor.\n- Filter by status when the customer asks for active or inactive monitored profiles.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_social_engagement_monitored_profiles_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_social_engagement_monitored_profiles_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Social Engagement Monitored Profiles",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_team_members": {
      "post": {
        "operationId": "list_team_members",
        "summary": "List Team Members",
        "description": "Call get_guide with topic=senders_and_capabilities before selecting flow candidates or Dynamic Action assignees.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ELists active members of the current team with their FirstTouch user id, email, role, ownership, user-facing access level (Paid sender or View-only), connected email accounts, LinkedIn account state, and flow-assignment permissions.\u003C/li\u003E\n\u003Cli\u003EPaid sender seats allow account connections and sender actions.\u003C/li\u003E\n\u003Cli\u003EViewers can access the product, but cannot connect accounts, act as senders, or be assigned flow work.\u003C/li\u003E\n\u003Cli\u003EFor reusable flow plans, call this before choosing candidates: email requires isEmailConnected and isEmailSendingEnabled;\u003Cbr /\u003ELinkedIn requires isLinkedinReady and isLinkedinActionsEnabled;\u003Cbr /\u003Ecalls and manual tasks require their matching assignment permission;\u003Cbr /\u003Eevery flow needs at least one selected candidate with isApprovalEnabled.\u003C/li\u003E\n\u003Cli\u003EUse exact returned userIds in flow.candidates.\u003C/li\u003E\n\u003Cli\u003EFor dynamic actions, resolve every sender before calling add_dynamic_action: when no sender was requested, find the current user and select that member;\u003Cbr /\u003Ewhen named, compare the supplied identity with returned names, emails, and user ids;\u003Cbr /\u003Ewhen any capable sender is requested, select one eligible returned member and report who was chosen.\u003C/li\u003E\n\u003Cli\u003EPass that userId as action.assignedUserId.\u003C/li\u003E\n\u003Cli\u003EEmail requires isEmailConnected and Email actions permission.\u003C/li\u003E\n\u003Cli\u003ELinkedIn connect/message/profile requires isLinkedinReady and Social actions permission; InMail also requires an eligible linkedinAccount.plan_type (Premium or Sales Navigator, subject to the team\u0026#39;s Premium setting).\u003C/li\u003E\n\u003Cli\u003ECalls and manual tasks require their matching permissions.\u003C/li\u003E\n\u003Cli\u003EDo not use LinkedIn Unibox tools to choose a flow or dynamic-action sender.\u003C/li\u003E\n\u003Cli\u003EisEmailConnected, isLinkedinConnected, and isLinkedinReady filters use AND semantics when combined.\u003C/li\u003E\n\u003Cli\u003ELinkedIn ready means the account is alive and its relations sync has completed; dynamic actions validate the remaining capability requirements before creation.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_team_members_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_team_members_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List Team Members",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/list_user_tasks": {
      "post": {
        "operationId": "list_user_tasks",
        "summary": "List User Tasks",
        "description": "Call get_guide with topic=tasks_and_approvals for task kinds, readiness, approval, editing, completion, and skipping guidance.\n\n**Usage notes**\n\n- List slim task summaries.\n- Defaults to todo tasks assigned to the current user; callers can set includeTeamTasks=true to read tasks owned by active members of the current team, or assignedUserId for one user.\n- For a general request to view pending tasks, omit types.\n- Use preview_task for payload, properties, warnings, and action details.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/list_user_tasks_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/list_user_tasks_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "List User Tasks",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/manage_flow_publication": {
      "post": {
        "operationId": "manage_flow_publication",
        "summary": "Manage Flow Publication",
        "description": "Publish or unpublish an existing flow.\n\n**Usage notes**\n\n- Publishing activates the flow plan but does not enroll awaiting contacts.\n- If validation fails, the tool fails with validation errors and links.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/manage_flow_publication_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/manage_flow_publication_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Manage Flow Publication",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/manage_social_engagement_monitored_profile": {
      "post": {
        "operationId": "manage_social_engagement_monitored_profile",
        "summary": "Manage Social Engagement Monitored Profile",
        "description": "Adds, activates, deactivates, or deletes one Social Engagement monitored LinkedIn profile or company page for the current team.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ERequires team owner/admin access.\u003C/li\u003E\n\u003Cli\u003EUse action=add with linkedinUrl as the first write when the user asks to listen to or monitor a person\u0026#39;s LinkedIn post likes/comments or a company page\u0026#39;s LinkedIn post likes/comments.\u003C/li\u003E\n\u003Cli\u003EFor requests like monitor this profile or company page and send connection requests to everyone who engaged, add the monitored target first and then follow the response nextSteps.\u003C/li\u003E\n\u003Cli\u003ESet enableSocialEngagement=true when the user wants to start collecting engagers in the same tool; collected engagers wait until the linked Social Engagement flow is published before entering it.\u003C/li\u003E\n\u003Cli\u003EThe response includes socialEngagement.flowPlan for the existing linked flow to inspect/edit/publish, so a separate get_social_engagement_config call is only needed when current state may have changed.\u003C/li\u003E\n\u003Cli\u003EUse write_social_engagement_config as the backup/follow-up enablement tool.\u003C/li\u003E\n\u003Cli\u003EUse activate/deactivate/delete with profileId from list_social_engagement_monitored_profiles.\u003C/li\u003E\n\u003Cli\u003EAdding or activating requires paid non-trial Social Engagement access.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/manage_social_engagement_monitored_profile_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/manage_social_engagement_monitored_profile_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Manage Social Engagement Monitored Profile",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/preview_hubspot_list": {
      "post": {
        "operationId": "preview_hubspot_list",
        "summary": "Preview HubSpot List",
        "description": "Returns preview contacts for one HubSpot contact list.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/preview_hubspot_list_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/preview_hubspot_list_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Preview HubSpot List",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": true,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/preview_task": {
      "post": {
        "operationId": "preview_task",
        "summary": "Preview Task",
        "description": "Preview a single task by id, including payload, task status, blocking enrollment warnings, approval readiness, task.properties, and links.\n\n**Usage notes**\n\n- For MCP Dynamic Actions approval tasks, task.payload.actions[].branch_context and actionGroup.actions[].branchContext identify actions on the main, connection_accepted, and connection_timeout paths.\n- task.properties is the task PropertyValueDto[] used for data variables and readiness checks, including prospect, company, routing, and enriched values when present.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/preview_task_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/preview_task_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Preview Task",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/reenroll_flow_enrollments": {
      "post": {
        "operationId": "reenroll_flow_enrollments",
        "summary": "Reenroll Flow Enrollments",
        "description": "Reenroll failed enrollment queue items, optionally applying field overrides.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/reenroll_flow_enrollments_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/reenroll_flow_enrollments_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Reenroll Flow Enrollments",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/remove_dynamic_action_prospect": {
      "post": {
        "operationId": "remove_dynamic_action_prospect",
        "summary": "Remove Dynamic Action Prospect",
        "description": "Cancel one MCP Dynamic Actions enrollment.\n\n**Usage notes**\n\n- Use enrollmentId when available because add_dynamic_action always returns it, including email-/LinkedIn-/phone-only enrollments where prospectId can be null.\n- prospectId is only a fallback when it identifies exactly one non-canceled MCP Dynamic Actions enrollment; otherwise call find_mcp_enrollment and pass the selected enrollmentId.\n- This does not modify normal flow plans.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/remove_dynamic_action_prospect_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/remove_dynamic_action_prospect_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Remove Dynamic Action Prospect",
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/replace_flow_root": {
      "post": {
        "operationId": "replace_flow_root",
        "summary": "Replace Flow Root",
        "description": "Replace an existing reusable flow-plan root with a complete node tree.\n\n**Usage notes**\n\n- Call get_guide with topic=flow_plan_creation before building root JSON, and call get_flow_available_variables before using variables in prompts or expressions.\n- Do not use this for one-prospect action requests; use add_dynamic_action once per step.\n- Never use this for the MCP Dynamic Actions flow plan; it is managed only by add_dynamic_action/remove_dynamic_action_prospect.\n- The flow becomes a draft after replacement.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/replace_flow_root_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/replace_flow_root_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Replace Flow Root",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/send_linkedin_unibox_message": {
      "post": {
        "operationId": "send_linkedin_unibox_message",
        "summary": "Send LinkedIn Unibox Message",
        "description": "Sends one exact LinkedIn Unibox reply through the sender account configured for the conversation.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EUse only when the customer explicitly requested this exact text or approved a presented draft.\u003C/li\u003E\n\u003Cli\u003EA summary, inspection, or draft does not authorize sending.\u003C/li\u003E\n\u003Cli\u003EconversationId must be exact and text must be non-empty.\u003C/li\u003E\n\u003Cli\u003EThe configured manual_reply_send_mode is always used; this tool has no reply-mode override.\u003C/li\u003E\n\u003Cli\u003ENever retry automatically.\u003C/li\u003E\n\u003Cli\u003EIf an ambiguous failure or timeout occurs, re-fetch the conversation and ask the customer whether to retry.\u003C/li\u003E\n\u003Cli\u003EBlocked results are not successful.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/send_linkedin_unibox_message_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/send_linkedin_unibox_message_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Send LinkedIn Unibox Message",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/skip_task": {
      "post": {
        "operationId": "skip_task",
        "summary": "Skip Task",
        "description": "Skip a todo call or manual task.\n\n**Usage notes**\n\n- This matches the skip action and does not cancel the whole enrollment.\n- For section approval flow cancellation, use the flow enrollment cancellation tools.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/skip_task_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/skip_task_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Skip Task",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/start_contact_discovery_audience_import": {
      "post": {
        "operationId": "start_contact_discovery_audience_import",
        "summary": "Start Contact Discovery Audience Import",
        "description": "Call get_guide with topic=contact_discovery before starting an async contact discovery import.\n\n**Usage notes**\n\n- Fetches up to 100 total profiles and creates a manual audience when complete.\n- Costs 1 credit per additional profile row requested beyond initialProspectIds.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/start_contact_discovery_audience_import_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/start_contact_discovery_audience_import_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Start Contact Discovery Audience Import",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/update_flow_plan": {
      "post": {
        "operationId": "update_flow_plan",
        "summary": "Update Flow Plan",
        "description": "Update an existing reusable flow\u0027s name, options, AI qualification, or candidates without replacing the flow root.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EA name-only or no-op update preserves the current published/draft state.\u003C/li\u003E\n\u003Cli\u003EAny configuration change moves a published reusable flow to Draft (paused for new enrollments); tell the user that it must be published again before new contacts can enter.\u003C/li\u003E\n\u003Cli\u003EFor the MCP Dynamic Actions Flow Plan, this tool may update only mcpDynamicActionsOptions.is_enrich_hubspot and mcpDynamicActionsOptions.is_push_to_hubspot_tasks.\u003C/li\u003E\n\u003Cli\u003EThe task setting updates call, manual, and approval task sync together.\u003C/li\u003E\n\u003Cli\u003EThese are shared Flow Plan settings, not per-action or per-enrollment overrides; all other MCP Flow Plan fields are rejected.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/update_flow_plan_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/update_flow_plan_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Update Flow Plan",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/update_linkedin_unibox_conversation_state": {
      "post": {
        "operationId": "update_linkedin_unibox_conversation_state",
        "summary": "Update LinkedIn Unibox Conversation State",
        "description": "Updates explicit state on one synchronized FirstTouch LinkedIn Unibox conversation.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003EUse only when the customer explicitly asks to mark it read or unread, archive or unarchive it, or change its tag.\u003C/li\u003E\n\u003Cli\u003EisRead=true marks read and false marks unread.\u003C/li\u003E\n\u003Cli\u003EisArchived=true archives and false unarchives.\u003C/li\u003E\n\u003Cli\u003Etag accepts hot, nurture, or none: hot and nurture replace the tag, while none clears it.\u003C/li\u003E\n\u003Cli\u003EOmit any state field that should remain unchanged.\u003C/li\u003E\n\u003Cli\u003EMCP supports at most one tag on a conversation.\u003C/li\u003E\n\u003Cli\u003EAt least one of tag, isRead, or isArchived must be supplied.\u003C/li\u003E\n\u003Cli\u003EThis changes FirstTouch state only; it does not send a message or trigger synchronization.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/update_linkedin_unibox_conversation_state_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/update_linkedin_unibox_conversation_state_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Update LinkedIn Unibox Conversation State",
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    },
    "/api/public/tools/validate_flow_reenroll": {
      "post": {
        "operationId": "validate_flow_reenroll",
        "summary": "Validate Flow Reenroll",
        "description": "Validate failed enrollment queue items before reenrolling them.",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/validate_flow_reenroll_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/validate_flow_reenroll_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Validate Flow Reenroll",
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": true
        }
      }
    },
    "/api/public/tools/write_social_engagement_config": {
      "post": {
        "operationId": "write_social_engagement_config",
        "summary": "Write Social Engagement Config",
        "description": "Enables or disables FirstTouch Social Engagement for the current team.\n\n\u003Cdetails\u003E\n\u003Csummary\u003E\u003Cstrong\u003EDetailed usage guidance\u003C/strong\u003E\u003C/summary\u003E\n\u003Cul\u003E\n\u003Cli\u003ERequires team owner/admin access.\u003C/li\u003E\n\u003Cli\u003EUse this as the backup/follow-up enablement tool when enableSocialEngagement was not used during profile add.\u003C/li\u003E\n\u003Cli\u003EEnabling can start collecting engagers before the linked Social Engagement flow is published; publish the linked flow before expecting collected engagers to enter it.\u003C/li\u003E\n\u003Cli\u003EDo not use it as the first step for a listen-to-likes request.\u003C/li\u003E\n\u003Cli\u003EUse socialEngagement.flowPlan from manage_social_engagement_monitored_profile as the normal linked-flow source.\u003C/li\u003E\n\u003Cli\u003EThis mirrors the UI: it only changes linkedin_engagement.is_enabled and preserves the existing linked Social Engagement flow plan; it reads existing config internally and never accepts or changes a flowPlanId.\u003C/li\u003E\n\u003Cli\u003EEnabling requires paid non-trial Social Engagement access.\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/details\u003E",
        "tags": [
          "FirstTouch tools"
        ],
        "security": [
          {
            "X-API-Key": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/write_social_engagement_config_input"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/write_social_engagement_config_output"
                }
              }
            }
          },
          "400": {
            "description": "Malformed tool input or validation failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller cannot perform this operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "409": {
            "description": "The operation conflicts with current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "429": {
            "description": "The operation was rate limited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "499": {
            "description": "The client canceled the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected tool failure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                }
              }
            }
          }
        },
        "x-mcp-annotations": {
          "title": "Write Social Engagement Config",
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "X-API-Key": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    },
    "schemas": {
      "PublicApiError": {
        "type": "object",
        "required": [
          "error",
          "message",
          "traceId"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "traceId": {
            "type": "string"
          }
        }
      },
      "add_audience_contacts_input": {
        "type": "object",
        "properties": {
          "audienceId": {
            "description": "Existing audience id. Manual, HubSpot-list, and Sales Navigator audiences are supported. Use the exact id returned by list_audiences or create_audience.",
            "type": [
              "string",
              "null"
            ]
          },
          "contacts": {
            "description": "One or more contacts to add. Each contact requires email, linkedinUrl, or all of firstName, lastName, and companyDomain.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "firstName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "lastName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "companyDomain": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "linkedinUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "email": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "phone": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "role": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "default": null
                },
                "companyName": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "default": null
                }
              },
              "required": [
                "firstName",
                "lastName",
                "companyDomain",
                "linkedinUrl",
                "email",
                "phone"
              ]
            }
          }
        },
        "required": [
          "audienceId",
          "contacts"
        ]
      },
      "add_audience_contacts_output": {},
      "add_dynamic_action_input": {
        "type": "object",
        "properties": {
          "action": {
            "description": "Action to add. Select exactly one typed variant. email requires prompt; linkedin_message and call_task require message; linkedin_inmail requires prompt and subject; manual_task requires name. Every variant requires assignedUserId.",
            "type": [
              "object",
              "null"
            ],
            "required": [
              "type"
            ],
            "anyOf": [
              {
                "properties": {
                  "type": {
                    "const": "email"
                  },
                  "prompt": {
                    "description": "Final email body. MCP Dynamic Actions do not generate email content.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "subject": {
                    "description": "Email subject. Required for a new thread and omitted for a reply, which reuses the previous subject.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "subjectType": {
                    "description": "For an existing enrollment, choose new_thread or reply. Omit for a new enrollment, which defaults to new_thread.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "reply",
                      "new_thread",
                      null
                    ]
                  },
                  "isHumanApprovalRequired": {
                    "description": "Set true only when the customer explicitly requests review before sending.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "recipientEmail": {
                    "description": "Recipient email when contact or enrollment data does not already contain it.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this action runs after its selected append target becomes active.\n\n- Omit or use 00:00:00 for no delay/immediate execution.\n- Use a TimeSpan string in d.hh:mm:ss or hh:mm:ss format, for example 03:00:00 for 3 hours or 5.00:00:00 for 5 days.\n- Natural-language values such as \u0026#39;5 days\u0026#39; are not accepted.\n- After the first LinkedIn chat step on the same branch, every linkedin_inmail or linkedin_message action must keep at least 03:00:00 of total delay since the previous LinkedIn chat step, including intermediate blocking delays and its own action delay.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "appendTarget": {
                    "description": "Append branch. Use default unless targeting an existing LinkedIn connection\u0027s accepted or timeout branch.",
                    "type": "string",
                    "enum": [
                      "default",
                      "connection_accepted",
                      "connection_timeout"
                    ]
                  },
                  "assignedUserId": {
                    "description": "FirstTouch user ID assigned to execute this action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "prompt",
                  "assignedUserId"
                ]
              },
              {
                "properties": {
                  "type": {
                    "const": "linkedin_connect"
                  },
                  "message": {
                    "description": "Optional final LinkedIn connection note.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "connectionTimeout": {
                    "description": "How long to wait for the connection request to be accepted before activating the connection timeout branch.\n\n- Omit to use the default of 14 days.\n- Use a positive TimeSpan string in d.hh:mm:ss or hh:mm:ss format, for example 7.00:00:00 for 7 days.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "isHumanApprovalRequired": {
                    "description": "Set true only when the customer explicitly requests review before sending.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this action runs after its selected append target becomes active.\n\n- Omit or use 00:00:00 for no delay/immediate execution.\n- Use a TimeSpan string in d.hh:mm:ss or hh:mm:ss format, for example 03:00:00 for 3 hours or 5.00:00:00 for 5 days.\n- Natural-language values such as \u0026#39;5 days\u0026#39; are not accepted.\n- After the first LinkedIn chat step on the same branch, every linkedin_inmail or linkedin_message action must keep at least 03:00:00 of total delay since the previous LinkedIn chat step, including intermediate blocking delays and its own action delay.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "appendTarget": {
                    "description": "Append branch. Use default unless targeting an existing LinkedIn connection\u0027s accepted or timeout branch.",
                    "type": "string",
                    "enum": [
                      "default",
                      "connection_accepted",
                      "connection_timeout"
                    ]
                  },
                  "assignedUserId": {
                    "description": "FirstTouch user ID assigned to execute this action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "assignedUserId"
                ]
              },
              {
                "properties": {
                  "type": {
                    "const": "linkedin_message"
                  },
                  "message": {
                    "description": "Final LinkedIn message. MCP Dynamic Actions do not generate message content.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "isHumanApprovalRequired": {
                    "description": "Set true only when the customer explicitly requests review before sending.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this action runs after its selected append target becomes active.\n\n- Omit or use 00:00:00 for no delay/immediate execution.\n- Use a TimeSpan string in d.hh:mm:ss or hh:mm:ss format, for example 03:00:00 for 3 hours or 5.00:00:00 for 5 days.\n- Natural-language values such as \u0026#39;5 days\u0026#39; are not accepted.\n- After the first LinkedIn chat step on the same branch, every linkedin_inmail or linkedin_message action must keep at least 03:00:00 of total delay since the previous LinkedIn chat step, including intermediate blocking delays and its own action delay.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "appendTarget": {
                    "description": "Append branch. Use default unless targeting an existing LinkedIn connection\u0027s accepted or timeout branch.",
                    "type": "string",
                    "enum": [
                      "default",
                      "connection_accepted",
                      "connection_timeout"
                    ]
                  },
                  "assignedUserId": {
                    "description": "FirstTouch user ID assigned to execute this action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "message",
                  "assignedUserId"
                ]
              },
              {
                "properties": {
                  "type": {
                    "const": "linkedin_inmail"
                  },
                  "prompt": {
                    "description": "Final LinkedIn InMail body, limited to 1900 characters.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "subject": {
                    "description": "Final LinkedIn InMail subject, limited to 200 characters.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "isHumanApprovalRequired": {
                    "description": "Set true only when the customer explicitly requests review before sending.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this action runs after its selected append target becomes active.\n\n- Omit or use 00:00:00 for no delay/immediate execution.\n- Use a TimeSpan string in d.hh:mm:ss or hh:mm:ss format, for example 03:00:00 for 3 hours or 5.00:00:00 for 5 days.\n- Natural-language values such as \u0026#39;5 days\u0026#39; are not accepted.\n- After the first LinkedIn chat step on the same branch, every linkedin_inmail or linkedin_message action must keep at least 03:00:00 of total delay since the previous LinkedIn chat step, including intermediate blocking delays and its own action delay.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "appendTarget": {
                    "description": "Append branch. Use default unless targeting an existing LinkedIn connection\u0027s accepted or timeout branch.",
                    "type": "string",
                    "enum": [
                      "default",
                      "connection_accepted",
                      "connection_timeout"
                    ]
                  },
                  "assignedUserId": {
                    "description": "FirstTouch user ID assigned to execute this action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "prompt",
                  "subject",
                  "assignedUserId"
                ]
              },
              {
                "properties": {
                  "type": {
                    "const": "linkedin_profile_view"
                  },
                  "delay": {
                    "description": "Delay before this action runs after its selected append target becomes active.\n\n- Omit or use 00:00:00 for no delay/immediate execution.\n- Use a TimeSpan string in d.hh:mm:ss or hh:mm:ss format, for example 03:00:00 for 3 hours or 5.00:00:00 for 5 days.\n- Natural-language values such as \u0026#39;5 days\u0026#39; are not accepted.\n- After the first LinkedIn chat step on the same branch, every linkedin_inmail or linkedin_message action must keep at least 03:00:00 of total delay since the previous LinkedIn chat step, including intermediate blocking delays and its own action delay.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "appendTarget": {
                    "description": "Append branch. Use default unless targeting an existing LinkedIn connection\u0027s accepted or timeout branch.",
                    "type": "string",
                    "enum": [
                      "default",
                      "connection_accepted",
                      "connection_timeout"
                    ]
                  },
                  "assignedUserId": {
                    "description": "FirstTouch user ID assigned to execute this action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "assignedUserId"
                ]
              },
              {
                "properties": {
                  "type": {
                    "const": "manual_task"
                  },
                  "name": {
                    "description": "Manual task display name.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "message": {
                    "description": "Optional final task instructions. When omitted, the task name is used as its content.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "isBlockingTask": {
                    "description": "Whether this task blocks later actions until completed.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this action runs after its selected append target becomes active.\n\n- Omit or use 00:00:00 for no delay/immediate execution.\n- Use a TimeSpan string in d.hh:mm:ss or hh:mm:ss format, for example 03:00:00 for 3 hours or 5.00:00:00 for 5 days.\n- Natural-language values such as \u0026#39;5 days\u0026#39; are not accepted.\n- After the first LinkedIn chat step on the same branch, every linkedin_inmail or linkedin_message action must keep at least 03:00:00 of total delay since the previous LinkedIn chat step, including intermediate blocking delays and its own action delay.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "appendTarget": {
                    "description": "Append branch. Use default unless targeting an existing LinkedIn connection\u0027s accepted or timeout branch.",
                    "type": "string",
                    "enum": [
                      "default",
                      "connection_accepted",
                      "connection_timeout"
                    ]
                  },
                  "assignedUserId": {
                    "description": "FirstTouch user ID assigned to execute this action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "name",
                  "assignedUserId"
                ]
              },
              {
                "properties": {
                  "type": {
                    "const": "call_task"
                  },
                  "message": {
                    "description": "Final call script or instructions. MCP Dynamic Actions do not generate call content.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "isHumanApprovalRequired": {
                    "description": "Set true only when the customer explicitly requests review before completing the call task.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this action runs after its selected append target becomes active.\n\n- Omit or use 00:00:00 for no delay/immediate execution.\n- Use a TimeSpan string in d.hh:mm:ss or hh:mm:ss format, for example 03:00:00 for 3 hours or 5.00:00:00 for 5 days.\n- Natural-language values such as \u0026#39;5 days\u0026#39; are not accepted.\n- After the first LinkedIn chat step on the same branch, every linkedin_inmail or linkedin_message action must keep at least 03:00:00 of total delay since the previous LinkedIn chat step, including intermediate blocking delays and its own action delay.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "appendTarget": {
                    "description": "Append branch. Use default unless targeting an existing LinkedIn connection\u0027s accepted or timeout branch.",
                    "type": "string",
                    "enum": [
                      "default",
                      "connection_accepted",
                      "connection_timeout"
                    ]
                  },
                  "assignedUserId": {
                    "description": "FirstTouch user ID assigned to execute this action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "message",
                  "assignedUserId"
                ]
              }
            ]
          },
          "contact": {
            "description": "Optional verified contact context, normally forwarded from find_contact_data or a customer-requested enrichment result in this conversation.\n\n- All fields are optional.\n- On an existing enrollment, prospectId, email, linkedInUrl, and phone may only fill blanks and reject conflicts; firstName, lastName, role, and location only fill missing properties.\n- Do not use this tool to enrich missing data.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "prospectId": {
                "description": "Optional persisted FirstTouch prospect id returned by a lookup or enrichment tool.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "firstName": {
                "description": "Optional verified prospect first name.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "lastName": {
                "description": "Optional verified prospect last name.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "email": {
                "description": "Optional verified prospect work email.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "linkedInUrl": {
                "description": "Optional verified prospect LinkedIn profile URL.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "phone": {
                "description": "Optional verified prospect phone number.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "role": {
                "description": "Optional verified prospect role or title.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "location": {
                "description": "Optional verified prospect location.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              }
            },
            "default": null
          },
          "company": {
            "description": "Optional verified company context related to contact.\n\n- All fields are optional.\n- It is stored as enrollment context only and does not prove that the contact works for this company.\n- On an existing enrollment, every company field only fills a missing property and never overwrites an existing value.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "name": {
                "description": "Optional verified company name.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "domain": {
                "description": "Optional verified company domain, for example winrate.com.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "linkedInUrl": {
                "description": "Optional verified LinkedIn company profile URL.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "linkedInId": {
                "description": "Optional verified numeric LinkedIn company id.",
                "type": [
                  "integer",
                  "null"
                ],
                "default": null
              },
              "industry": {
                "description": "Optional verified company industry.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "size": {
                "description": "Optional verified company size, for example 51-200.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "location": {
                "description": "Optional verified company location.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "website": {
                "description": "Optional verified company website URL.",
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              }
            },
            "default": null
          },
          "enrollmentId": {
            "description": "Optional existing MCP Dynamic Actions enrollment/activity id to extend.\n\n- Use the exact enrollmentId returned by find_mcp_enrollment for the customer-selected candidate.\n- If the selected enrollment lacks firstName or lastName, also pass both names in contact before appending an action.\n- If find_mcp_enrollment returned any candidates, do not choose this value or omit it until the customer explicitly decides whether to continue one of those enrollments or start a new sequence.\n- Omit when no MCP enrollment candidate was found to create a new enrollment; when the original request already specifies the action and all required identity data, do this without asking the customer to confirm the same action again.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "ownerId": {
            "description": "Optional default owner user id for the dynamic enrollment.\n\n- Use the exact current userId from get_current_user or a userId returned by list_team_members.\n- Omit to keep the existing owner when extending an enrollment, or use the current MCP user for a new enrollment.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "priority": {
            "description": "Optional scheduling priority for the whole dynamic enrollment.\n\n- Use 1 for High, 0 or omit for normal, and -1 for Low.\n- Higher values are preferred first.\n- Omit for priority 0 on a new enrollment or to preserve priority when extending an existing enrollment.\n- When supplied with enrollmentId, this updates the selected enrollment priority.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "sourceDescription": {
            "description": "Optional UI context for the dynamic enrollment, limited to 500 characters.\n\n- When useful context is known, write one to three concise sentences describing how this contact came to the sender and their relevant relationship; do not invent facts or merely repeat the action.\n- Omit when no useful context is known, which preserves the existing description when extending an enrollment.\n- Supplying a value for an existing enrollment replaces its prior sourceDescription.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "allowUnreadyLinkedInAccount": {
            "description": "Allow creating a LinkedIn action, or appending a follow-up to a LinkedIn connection outcome branch, even when the assigned team member\u0027s LinkedIn account is missing, disconnected, not alive, relations sync is incomplete, or the existing connection action is failed/canceled due account readiness.\n\n- Use only after the customer explicitly asks to create the action despite LinkedIn account readiness problems.\n- Social actions permission and contact.linkedInUrl are still required for LinkedIn actions.\n- For InMail, an already connected account must still have an eligible Premium or Sales Navigator plan; this flag only permits authoring before account readiness is available.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "action"
        ]
      },
      "add_dynamic_action_output": {},
      "add_manual_flow_enrollment_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace; do not use the read-only MCP Dynamic Actions flowPlanId here.",
            "type": [
              "string",
              "null"
            ]
          },
          "manualEnrollment": {
            "description": "Contact and optional first-email details. The flow plan is set only through the top-level flowPlanId. Omit or pass null for options to use normal exclusion checks and priority 0.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "company": {
                "description": "Company identity for the contact. Supply any known domain, LinkedIn URL, or LinkedIn company id.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "domain": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "linkedinUrl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "linkedinId": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                },
                "required": [
                  "domain",
                  "linkedinUrl",
                  "linkedinId"
                ]
              },
              "prospect": {
                "description": "Contact identity. Supply any known first name, last name, LinkedIn URL, email, or phone number.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "firstName": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "lastName": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "linkedinUrl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "phone": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "firstName",
                  "lastName",
                  "linkedinUrl",
                  "email",
                  "phone"
                ]
              },
              "options": {
                "description": "Optional enrollment controls. Omit or pass null to use normal exclusion checks and priority 0.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "ignoreExclusionCheck": {
                    "description": "Set true only to bypass this contact\u0027s exclusion and do-not-contact checks. Defaults to false.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "priority": {
                    "description": "Scheduling priority for this contact. Higher values are preferred first. Defaults to 0, which uses the flow plan priority when the contact is enrolled.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                }
              },
              "firstMessage": {
                "description": "Optional exact content for the first email action. It applies only to the first email; later email steps use the flow definition.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "subject": {
                    "description": "Exact email subject for the first email action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "content": {
                    "description": "Exact email body for the first email action.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "subject",
                  "content"
                ]
              }
            },
            "required": [
              "company",
              "prospect"
            ]
          },
          "enrollmentMode": {
            "description": "Optional override of the flow plan\u0027s enrollment behavior.\n\n- For a plain request such as \u0026#39;Add contact X to flow Y\u0026#39;, do not set this field.\n- A draft flow always adds an omitted mode to Awaiting.\n- Set enroll only when the user explicitly asks to enroll or start the contact immediately; this requires a published flow.\n- Set manual only when the user explicitly asks for manual enrollment or to add the contact to Awaiting without starting it.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "manual",
              "enroll",
              null
            ],
            "default": null
          },
          "includeWorkspaceRefresh": {
            "description": "Include refreshed counts and first awaiting page in the response.",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "flowPlanId",
          "manualEnrollment"
        ]
      },
      "add_manual_flow_enrollment_output": {},
      "attach_audience_to_flow_input": {
        "type": "object",
        "properties": {
          "audienceId": {
            "description": "Existing audience id. Use the exact id returned by list_audiences or create_audience.",
            "type": "string"
          },
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace.",
            "type": "string"
          }
        },
        "required": [
          "audienceId",
          "flowPlanId"
        ]
      },
      "attach_audience_to_flow_output": {},
      "cancel_flow_enrollments_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace.",
            "type": [
              "string",
              "null"
            ]
          },
          "queueItemIds": {
            "description": "Enrollment queue item ids to cancel. Use exact queueItemId values from list_flow_plan_enrollments or get_flow_workspace required actions; omit to cancel all cancellable queue items in the flow.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          }
        },
        "required": [
          "flowPlanId"
        ]
      },
      "cancel_flow_enrollments_output": {},
      "complete_task_input": {
        "type": "object",
        "properties": {
          "taskId": {
            "description": "Task id returned by list_user_tasks or preview_task. Example: task_123. Use a taskId value, not actionId or enrollmentId.",
            "type": [
              "string",
              "null"
            ]
          },
          "includeProperties": {
            "description": "When true, include response.preview.task.properties. Defaults to false because complete_task is normally called after preview_task.",
            "type": "boolean",
            "default": false
          }
        },
        "required": [
          "taskId"
        ]
      },
      "complete_task_output": {},
      "create_audience_input": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Audience name.",
            "type": [
              "string",
              "null"
            ]
          },
          "mode": {
            "description": "Audience source mode: manual, hubspot_list, or sales_navigator. Defaults to manual.",
            "type": "string",
            "enum": [
              "manual",
              "hubspot_list",
              "sales_navigator"
            ],
            "default": "manual"
          },
          "flowPlanId": {
            "description": "Optional existing flow plan id to link during audience creation. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "aiContext": {
            "description": "Optional AI context to store on the audience.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "contacts": {
            "description": "Optional external contacts to add for manual mode, such as pasted rows, CSV rows, or CRM exports.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "firstName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "lastName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "companyDomain": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "linkedinUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "email": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "phone": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "role": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "default": null
                },
                "companyName": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "default": null
                }
              },
              "required": [
                "firstName",
                "lastName",
                "companyDomain",
                "linkedinUrl",
                "email",
                "phone"
              ]
            },
            "default": null
          },
          "hubspotListId": {
            "description": "HubSpot list id for hubspot_list mode. Use the exact listId/id returned by list_hubspot_lists; do not pass an audienceId here.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "salesNavigator": {
            "description": "Sales Navigator source configuration for sales_navigator mode.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "linAccountId": {
                "description": "LinkedIn account id to use for Sales Navigator import. Example: linkedin_account_123. Use the linAccountId associated with the selected Sales Navigator-capable candidate.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "salesNavigatorUrl": {
                "description": "Sales Navigator search or list URL to import from.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "maxItems": {
                "description": "Maximum number of prospects to import.",
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "default": null
          }
        },
        "required": [
          "name"
        ]
      },
      "create_audience_output": {},
      "create_audience_from_profiles_input": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Audience name.",
            "type": [
              "string",
              "null"
            ]
          },
          "prospectIds": {
            "description": "Persisted prospect ids to add to the audience. Use exact prospectId/id values returned by find_contact_data, enrich_contact, discover_contacts, or contact discovery import status; do not provide LinkedIn URLs here.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "aiContext": {
            "description": "Optional AI context to store on the audience.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "flowPlanId": {
            "description": "Optional existing flow plan id to link during audience creation. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "name",
          "prospectIds"
        ]
      },
      "create_audience_from_profiles_output": {},
      "create_flow_plan_input": {
        "type": "object",
        "properties": {
          "flow": {
            "description": "Flow definition. A complete root is required. Options, AI qualification, and candidates are optional and use server defaults when omitted.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "name": {
                "description": "Display name for the flow plan.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "root": {
                "description": "Required root node for the flow.\n\n- Must be a complete node tree with id, type, delay, and node-specific payload; never send placeholders such as Signature:root.\n- If prompts or expressions use variables, call get_flow_available_variables first and always use returned fully qualified names such as {ft.flow.prospect_email}, not aliases or shorthand such as {email} or {prospect_email}.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "id": {
                    "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "type": {
                    "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                    "type": "string",
                    "enum": [
                      "email",
                      "call",
                      "branch",
                      "manual",
                      "reassignment",
                      "ai_research",
                      "ai_research_advance",
                      "hs_enrichment",
                      "linkedin_send_connect_v3",
                      "linkedin_send_message_v3",
                      "linkedin_visit_profile_v3",
                      "linkedin_send_inmail_v3"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "payload": {
                    "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "next": {
                    "description": "Normal linear continuation for operation/directive nodes.",
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "id": {
                        "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "type": {
                        "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                        "type": "string",
                        "enum": [
                          "email",
                          "call",
                          "branch",
                          "manual",
                          "reassignment",
                          "ai_research",
                          "ai_research_advance",
                          "hs_enrichment",
                          "linkedin_send_connect_v3",
                          "linkedin_send_message_v3",
                          "linkedin_visit_profile_v3",
                          "linkedin_send_inmail_v3"
                        ]
                      },
                      "delay": {
                        "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "payload": {
                        "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                        "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/payload"
                      },
                      "next": {
                        "description": "Normal linear continuation for operation/directive nodes.",
                        "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next"
                      },
                      "expression": {
                        "description": "Branch expression. Required for type=branch.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "on_true": {
                        "description": "Branch path when expression evaluates true. Used for type=branch.",
                        "type": [
                          "object",
                          "null"
                        ],
                        "properties": {
                          "id": {
                            "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "type": {
                            "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                            "type": "string",
                            "enum": [
                              "email",
                              "call",
                              "branch",
                              "manual",
                              "reassignment",
                              "ai_research",
                              "ai_research_advance",
                              "hs_enrichment",
                              "linkedin_send_connect_v3",
                              "linkedin_send_message_v3",
                              "linkedin_visit_profile_v3",
                              "linkedin_send_inmail_v3"
                            ]
                          },
                          "delay": {
                            "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "payload": {
                            "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                            "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/payload"
                          },
                          "next": {
                            "description": "Normal linear continuation for operation/directive nodes.",
                            "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next"
                          },
                          "expression": {
                            "description": "Branch expression. Required for type=branch.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "on_true": {
                            "description": "Branch path when expression evaluates true. Used for type=branch.",
                            "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next/properties/on_true"
                          },
                          "on_false": {
                            "description": "Branch path when expression evaluates false. Used for type=branch.",
                            "type": [
                              "object",
                              "null"
                            ],
                            "properties": {
                              "id": {
                                "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "type": {
                                "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                                "type": "string",
                                "enum": [
                                  "email",
                                  "call",
                                  "branch",
                                  "manual",
                                  "reassignment",
                                  "ai_research",
                                  "ai_research_advance",
                                  "hs_enrichment",
                                  "linkedin_send_connect_v3",
                                  "linkedin_send_message_v3",
                                  "linkedin_visit_profile_v3",
                                  "linkedin_send_inmail_v3"
                                ]
                              },
                              "delay": {
                                "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "payload": {
                                "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                                "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/payload"
                              },
                              "next": {
                                "description": "Normal linear continuation for operation/directive nodes.",
                                "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next"
                              },
                              "expression": {
                                "description": "Branch expression. Required for type=branch.",
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "on_true": {
                                "description": "Branch path when expression evaluates true. Used for type=branch.",
                                "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next/properties/on_true"
                              },
                              "on_false": {
                                "description": "Branch path when expression evaluates false. Used for type=branch.",
                                "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next/properties/on_true/properties/on_false"
                              },
                              "on_null": {
                                "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "enum": [
                                  "fail",
                                  "false",
                                  null
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "type"
                            ]
                          },
                          "on_null": {
                            "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "fail",
                              "false",
                              null
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "type"
                        ]
                      },
                      "on_false": {
                        "description": "Branch path when expression evaluates false. Used for type=branch.",
                        "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next/properties/on_true/properties/on_false"
                      },
                      "on_null": {
                        "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "enum": [
                          "fail",
                          "false",
                          null
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "type"
                    ]
                  },
                  "expression": {
                    "description": "Branch expression. Required for type=branch.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "on_true": {
                    "description": "Branch path when expression evaluates true. Used for type=branch.",
                    "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next/properties/on_true"
                  },
                  "on_false": {
                    "description": "Branch path when expression evaluates false. Used for type=branch.",
                    "$ref": "#/components/schemas/create_flow_plan_input/properties/flow/properties/root/properties/next/properties/on_true/properties/on_false"
                  },
                  "on_null": {
                    "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "fail",
                      "false",
                      null
                    ]
                  }
                },
                "required": [
                  "id",
                  "type"
                ]
              },
              "options": {
                "description": "Optional flow settings. Omitted properties use defaults based on the team\u0027s HubSpot connection status; supply only settings the user explicitly wants to change.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "is_exclusion_check_required": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "use_hubspot_if_connected": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_click_tracking_enabled": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_open_tracking_enabled": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_enrich_phone_if_not_provided": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "push_call_tasks_only_if_phone_exists": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "ignore_personal_email_accounts": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "assignment_strategy": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "default",
                      "crm_company_owner",
                      "crm_contact_owner",
                      null
                    ]
                  },
                  "crm_on_empty_owner_strategy": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "ignore",
                      "process",
                      null
                    ]
                  },
                  "crm_owner_update_strategy": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "do_not_update",
                      "update_company",
                      "update_contact",
                      "update_company_and_contact",
                      null
                    ]
                  },
                  "prompt": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "is_push_to_hubspot_call_tasks": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_push_to_hubspot_manual_tasks": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_push_to_hubspot_approve_tasks": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_enrich_hubspot": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_enrich_prospects": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_enrich_companies": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_enrich_email_if_not_provided": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_track_emails_in_hubspot": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "only_enrich_phone_if_call_task_present": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "priority": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                }
              },
              "aiQualification": {
                "description": "Optional flow-level AI qualification settings. Omit to keep AI qualification disabled by default.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "is_enabled": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "threshold": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "prospect_criteria": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "company_criteria": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "disqualify_criteria": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "candidates": {
                "description": "Optional candidate assignees. When provided, create_flow_plan preserves this exact candidate list and any non-empty emailAccountIds selections. Omit or pass an empty list to use the current user and their connected inboxes.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "userId": {
                      "description": "Team member user id. Use the exact userId returned by list_team_members.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "emailAccountIds": {
                      "description": "Optional email account ids for the candidate. Example item: email_account_123. Use emailAccounts returned by list_team_members. Empty means all active inboxes for this candidate; non-empty means only the listed inboxes.",
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    }
                  },
                  "required": [
                    "userId"
                  ]
                }
              }
            },
            "required": [
              "root"
            ]
          },
          "audienceId": {
            "description": "Optional existing audience id to attach to the new flow during creation. Use the exact id returned by list_audiences or create_audience.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "processingStrategy": {
            "description": "Optional enrollment processing mode override.\n\n- Use manual for Manual Mode, where contacts/signals wait for explicit enrollment.\n- Use default for standard Auto-Enrollment, or new_members_only only when the user explicitly asks for new source members only.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "publish": {
            "description": "Publish the flow immediately after creation when validation succeeds. If validation fails, the response returns the draft flow with validation errors and links.",
            "type": "boolean",
            "default": false
          },
          "extendedResponse": {
            "description": "Include operational data after creation: cost, enrollment counts, a limited awaiting-contact page, source status, and available enrollment actions. Defaults to false.",
            "type": "boolean",
            "default": false
          },
          "awaitingLimit": {
            "description": "Maximum awaiting contacts to include when extendedResponse is true.",
            "type": "integer",
            "default": 10
          }
        },
        "required": [
          "flow"
        ]
      },
      "create_flow_plan_output": {},
      "delete_audience_input": {
        "type": "object",
        "properties": {
          "audienceId": {
            "description": "Existing audience id. Use the exact id returned by list_audiences or create_audience.",
            "type": [
              "string",
              "null"
            ]
          },
          "cancelAwaitingEnrollments": {
            "description": "Cancel awaiting enrollments from this audience. Defaults to true. Ask the user for this choice if they did not mention it.",
            "type": "boolean",
            "default": true
          },
          "cancelInProgressEnrollments": {
            "description": "Cancel enrollments already in progress for flows linked to this audience. Defaults to true. Ask the user for this choice if they did not mention it.",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "audienceId"
        ]
      },
      "delete_audience_output": {},
      "delete_flow_plan_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing non-system flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace; do not use the MCP Dynamic Actions or HubSpot Custom Actions flowPlanId here.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "flowPlanId"
        ]
      },
      "delete_flow_plan_output": {},
      "discover_contacts_input": {
        "type": "object",
        "properties": {
          "filters": {
            "description": "Structured filters assembled directly from the user request. Use only supported fields; do not invent unsupported filters.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "country": {
                "description": "People located in this country. Use a single two-letter Alpha-2 ISO3166 code, for example us, ca, or gb.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "education_field_of_study": {
                "description": "Education fields of study to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "education_degree_name": {
                "description": "Education degree names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "education_school_name": {
                "description": "Education school names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_role_title": {
                "description": "Current role titles to include. Keep concise and human-readable, for example VP Sales or Chief Technology Officer.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "past_role_title": {
                "description": "Past role titles to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_name": {
                "description": "Current company names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_name_mode": {
                "description": "Current company name mode. Allowed values: include or exclude. Set only when a current company name filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "past_company_name": {
                "description": "Past company names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_domain": {
                "description": "Current company domains as bare domains, for example example.com. Do not infer domains unless explicitly mentioned.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "region": {
                "description": "Regions or states to include or exclude according to region_mode.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "region_mode": {
                "description": "Region mode. Allowed values: include or exclude. Set only when a region filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "city": {
                "description": "Cities to include or exclude according to city_mode.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "city_mode": {
                "description": "City mode. Allowed values: include or exclude. Set only when a city filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "headline": {
                "description": "LinkedIn headline keywords to include. Use only when the user asks for headline/profile text matching.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "summary": {
                "description": "LinkedIn summary/about keywords to include. Use only when the user asks for summary/profile text matching.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_role_before": {
                "description": "Current role start date upper bound, as an ISO8601 date such as 2019-12-30.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_role_after": {
                "description": "Current role start date lower bound, as an ISO8601 date such as 2019-12-30.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_company_profile_url": {
                "description": "Current company LinkedIn profile URLs to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_profile_url_mode": {
                "description": "Current company profile URL mode. Allowed values: include or exclude. Set only when a current company profile URL filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "past_company_profile_url": {
                "description": "Past company LinkedIn profile URLs to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_job_description": {
                "description": "Current job description keywords to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "past_job_description": {
                "description": "Past job description keywords to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "groups": {
                "description": "LinkedIn group names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "languages": {
                "description": "Languages listed on the profile to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "interests": {
                "description": "Profile interest keywords to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "skills": {
                "description": "Profile skill keywords to include. Do not combine with skills_all_in_list.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "skills_all_in_list": {
                "description": "Skills that all must be present on the profile. Do not combine with skills.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_type": {
                "description": "Current company type. Allowed values: EDUCATIONAL, GOVERNMENT_AGENCY, NON_PROFIT, PARTNERSHIP, PRIVATELY_HELD, PUBLIC_COMPANY, SELF_EMPLOYED, or SELF_OWNED.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_company_domain_mode": {
                "description": "Current company domain mode. Allowed values: include or exclude. Set only when a current company domain filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_company_follower_count_min": {
                "description": "Minimum current company LinkedIn follower count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_follower_count_max": {
                "description": "Maximum current company LinkedIn follower count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_industry": {
                "description": "Broad current company industries to include; FirstTouch may match inferred or secondary classifications. Use current_company_primary_industry for strict company-industry requests.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_current_company_industry": {
                "description": "Current company industries to exclude from broad inferred or secondary classification matches.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_primary_industry": {
                "description": "Current company primary industries to include. Prefer this for strict company-industry requests, for example people at real estate companies. Use exact FirstTouch-supported industry values.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_current_company_primary_industry": {
                "description": "Current company primary industries to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_specialities": {
                "description": "Current company specialties/specialities to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_employee_count_min": {
                "description": "Minimum current company employee count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_employee_count_max": {
                "description": "Maximum current company employee count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_description": {
                "description": "Current company description keywords to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_founded_year_min": {
                "description": "Minimum current company founded year.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_founded_year_max": {
                "description": "Maximum current company founded year.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_funding_amount_min": {
                "description": "Minimum current company funding amount.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_funding_amount_max": {
                "description": "Maximum current company funding amount.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_funding_raised_after": {
                "description": "Current company funding raised after this ISO8601 date.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_company_funding_raised_before": {
                "description": "Current company funding raised before this ISO8601 date.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "follower_count_min": {
                "description": "Minimum profile follower count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "follower_count_max": {
                "description": "Maximum profile follower count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "exclude_current_role_title": {
                "description": "Current role titles to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_past_role_title": {
                "description": "Past role titles to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_headline": {
                "description": "LinkedIn headline keywords to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_summary": {
                "description": "LinkedIn summary/about keywords to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            },
            "default": null
          },
          "pageSize": {
            "description": "Number of contacts to return. Max 10. This determines the maximum reserved credits for the call.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "nextToken": {
            "description": "Pagination token returned by a previous discover_contacts call. Use response.nextPage here when continuing after a preview or prior page, so the same result page is not loaded and charged again.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "note": {
            "description": "Optional correlation label echoed into billing metadata.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "discover_contacts_output": {},
      "edit_task_action_input": {
        "type": "object",
        "properties": {
          "taskId": {
            "description": "Task id returned by list_user_tasks or preview_task. Example: task_123. Use a taskId value, not actionId or enrollmentId.",
            "type": [
              "string",
              "null"
            ]
          },
          "actionId": {
            "description": "Grouped action id from preview_task actionGroup.expectedActionIds. Example: action_123. Use an actionId value from preview_task; do not pass taskId or nodeId here.",
            "type": [
              "string",
              "null"
            ]
          },
          "email": {
            "description": "Email edit payload. Use only for email actions.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "subject": {
                "description": "Email subject. Only supported for email actions with a new-thread subject.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "body": {
                "description": "Email plain text body.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "bodyHtml": {
                "description": "Optional email HTML body. If omitted while body is set, body is used for HTML too.",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "default": null
          },
          "call": {
            "description": "Call edit payload. Use only for call actions.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "script": {
                "description": "Call script.",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "default": null
          },
          "linkedin": {
            "description": "LinkedIn edit payload. Use only for LinkedIn connect, message, or InMail actions.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "message": {
                "description": "LinkedIn message body. Supported for LinkedIn message and InMail actions.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "subject": {
                "description": "LinkedIn InMail subject. Only supported for LinkedIn InMail actions.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "connectionNote": {
                "description": "LinkedIn connection note. Only supported for LinkedIn connect actions.",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "default": null
          }
        },
        "required": [
          "taskId",
          "actionId"
        ]
      },
      "edit_task_action_output": {},
      "enrich_company_input": {
        "type": "object",
        "properties": {
          "companyDomain": {
            "description": "Company domain, website URL, or LinkedIn company URL.",
            "type": [
              "string",
              "null"
            ]
          },
          "note": {
            "description": "Optional correlation label echoed into billing metadata.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "companyDomain"
        ]
      },
      "enrich_company_output": {},
      "enrich_contact_input": {
        "type": "object",
        "properties": {
          "linkedInUrl": {
            "description": "Prospect LinkedIn profile URL. Preferred when available.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "email": {
            "description": "Prospect work email address.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "firstName": {
            "description": "Prospect first name. Use with lastName and companyDomain when no email or LinkedIn URL is available.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "lastName": {
            "description": "Prospect last name.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "companyDomain": {
            "description": "Company domain, for example example.com.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "note": {
            "description": "Optional correlation label echoed into billing metadata.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "enrich_contact_output": {},
      "enrich_email_input": {
        "type": "object",
        "properties": {
          "linkedInUrl": {
            "description": "Prospect LinkedIn profile URL. Can be used instead of name and domain.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "firstName": {
            "description": "Prospect first name.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "lastName": {
            "description": "Prospect last name.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "companyDomain": {
            "description": "Company domain, for example example.com.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "note": {
            "description": "Optional correlation label echoed into billing metadata.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "enrich_email_output": {},
      "enrich_phone_input": {
        "type": "object",
        "properties": {
          "linkedInUrl": {
            "description": "Prospect LinkedIn profile URL. Preferred when available.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "firstName": {
            "description": "Prospect first name. Use with companyDomain when no linkedInUrl is available.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "lastName": {
            "description": "Prospect last name, if known.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "companyDomain": {
            "description": "Company domain, for example example.com.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "email": {
            "description": "Prospect work email. Can be used with companyDomain when no linkedInUrl is available.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "note": {
            "description": "Optional correlation label echoed into billing metadata.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "enrich_phone_output": {},
      "enroll_awaiting_flow_items_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact published flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace; do not use the read-only MCP Dynamic Actions flowPlanId here.",
            "type": [
              "string",
              "null"
            ]
          },
          "itemIds": {
            "description": "Awaiting candidate ids to enroll. Get exact values from get_flow_workspace.awaiting.items[].candidate_id; do not pass enrollmentId or queueItemId here.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "includeWorkspaceRefresh": {
            "description": "Include refreshed counts and first awaiting page in the response.",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "flowPlanId",
          "itemIds"
        ]
      },
      "enroll_awaiting_flow_items_output": {},
      "find_contact_data_input": {
        "type": "object",
        "properties": {
          "prospectId": {
            "description": "Existing FirstTouch prospect id, when known. Use the exact value returned as prospectId by another FirstTouch MCP tool, and send other known identity details too.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "enrollmentId": {
            "description": "Existing FirstTouch enrollment/activity id, when known. Use the exact value returned as enrollmentId by another FirstTouch MCP tool; do not pass queueItemId here. Send other known identity details too.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "linkedInUrl": {
            "description": "Prospect LinkedIn profile URL. Send other known identity details too so they can provide fallback matching.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "email": {
            "description": "Prospect work email address. Send other known identity details too so they can provide fallback matching.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "phone": {
            "description": "Prospect phone number. Send other known identity details too so they can provide fallback matching.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "hubspotContactId": {
            "description": "HubSpot contact id, when the client has HubSpot context. Use the exact HubSpot contact id; do not pass a FirstTouch prospectId here. Send other known identity details too.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "firstName": {
            "description": "Prospect first name. Send with lastName whenever known, including alongside exact identifiers as a fallback.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "lastName": {
            "description": "Prospect last name. Send with firstName whenever known, including alongside exact identifiers as a fallback.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "companyDomain": {
            "description": "Optional company domain to refine matches; not enough by itself.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "find_contact_data_output": {},
      "find_mcp_enrollment_input": {
        "type": "object",
        "properties": {
          "enrollmentId": {
            "description": "Existing FirstTouch enrollment/activity id, when known. Use exact enrollmentId values returned by MCP tools; do not pass queueItemId here.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "prospectId": {
            "description": "Existing FirstTouch prospect id, when known. Use exact prospectId values returned by MCP tools.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "linkedInUrl": {
            "description": "Prospect LinkedIn profile URL.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "email": {
            "description": "Prospect work email address.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "phone": {
            "description": "Prospect phone number.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "hubspotContactId": {
            "description": "HubSpot contact id, when the client has HubSpot context. Use the exact HubSpot contact id; do not pass a FirstTouch prospectId here.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "firstName": {
            "description": "Prospect first name.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "lastName": {
            "description": "Prospect last name.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "companyDomain": {
            "description": "Optional company domain to refine matches; not enough by itself.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "find_mcp_enrollment_output": {},
      "get_auth_scopes_input": {
        "type": "object",
        "properties": {}
      },
      "get_auth_scopes_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "caller": {
            "type": "object",
            "properties": {
              "hasUserId": {
                "type": "boolean"
              },
              "hasTeamId": {
                "type": "boolean"
              },
              "isAdmin": {
                "type": "boolean"
              },
              "isTeamOwner": {
                "type": "boolean"
              },
              "senderEntitlement": {
                "type": "string"
              },
              "billingAccessEnabled": {
                "type": "boolean"
              }
            },
            "required": [
              "hasUserId",
              "hasTeamId",
              "isAdmin",
              "isTeamOwner",
              "senderEntitlement",
              "billingAccessEnabled"
            ]
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "scope": {
                  "type": "string"
                },
                "granted": {
                  "type": "boolean"
                },
                "description": {
                  "type": "string"
                }
              },
              "required": [
                "scope",
                "granted",
                "description"
              ]
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary",
          "caller",
          "scopes",
          "warnings"
        ]
      },
      "get_contact_discovery_audience_import_status_input": {
        "type": "object",
        "properties": {
          "importId": {
            "description": "Contact discovery audience import id. Use the exact importId returned by start_contact_discovery_audience_import.",
            "type": [
              "string",
              "null"
            ]
          },
          "includeProspectIds": {
            "description": "When true, include saved prospect ids in the response.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "prospectIdsLimit": {
            "description": "Maximum saved prospect ids to include when includeProspectIds is true. Defaults to 25; maximum is 100.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "importId"
        ]
      },
      "get_contact_discovery_audience_import_status_output": {},
      "get_contact_discovery_industry_values_input": {
        "type": "object",
        "properties": {
          "query": {
            "description": "Optional case-insensitive substring filter, for example software, health, retail, banking, manufacturing, or logistics.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "get_contact_discovery_industry_values_output": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "totalValues": {
            "type": "integer"
          },
          "returnedValues": {
            "type": "integer"
          },
          "query": {
            "type": [
              "string",
              "null"
            ]
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "popularValues": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "aliasHints": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "term": {
                  "type": "string"
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "term",
                "values"
              ]
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "field",
          "source",
          "totalValues",
          "returnedValues",
          "query",
          "values",
          "popularValues",
          "aliasHints",
          "notes"
        ]
      },
      "get_contact_trace_input": {
        "type": "object",
        "properties": {
          "identities": {
            "description": "One to 10 independent contact identities.\n\n- For a selected contact, include every known supported identity in its own item, including a firstName, lastName, and companyDomain item when all three are known.\n- Each item contains exactly one direct identifier, or all of firstName, lastName, and companyDomain.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "email": {
                  "description": "Prospect\u0027s work email address. This item cannot contain another identity field.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "phone": {
                  "description": "Prospect\u0027s phone number. This item cannot contain another identity field.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "linkedInUrl": {
                  "description": "Prospect\u0027s LinkedIn profile URL. This item cannot contain another identity field.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "hubspotContactId": {
                  "description": "Exact HubSpot contact id. Do not pass a FirstTouch prospectId here. This item cannot contain another identity field.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "firstName": {
                  "description": "Prospect first name. Provide with lastName and companyDomain, and no direct identifier, in this item.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "lastName": {
                  "description": "Prospect last name. Provide with firstName and companyDomain, and no direct identifier, in this item.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "companyDomain": {
                  "description": "Company domain. Provide with firstName and lastName, and no direct identifier, in this item.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            },
            "default": null
          }
        }
      },
      "get_contact_trace_output": {},
      "get_credits_usage_input": {
        "type": "object",
        "properties": {}
      },
      "get_credits_usage_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "isAvailable": {
            "type": "boolean"
          },
          "teamId": {
            "type": [
              "string",
              "null"
            ]
          },
          "balance": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "cycleAmount": {
                "type": "number"
              },
              "baseCycleAmount": {
                "type": "number"
              },
              "additionalAmount": {
                "type": "number"
              },
              "escrowAmount": {
                "type": "number"
              },
              "cycleAmountAtPeriodStart": {
                "type": "number"
              }
            },
            "required": [
              "cycleAmount",
              "baseCycleAmount",
              "additionalAmount",
              "escrowAmount",
              "cycleAmountAtPeriodStart"
            ]
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary",
          "isAvailable",
          "teamId",
          "balance",
          "warnings"
        ]
      },
      "get_current_user_input": {
        "type": "object",
        "properties": {}
      },
      "get_current_user_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "isAuthenticated": {
            "type": "boolean"
          },
          "userId": {
            "type": [
              "string",
              "null"
            ]
          },
          "userName": {
            "type": [
              "string",
              "null"
            ]
          },
          "userEmail": {
            "type": [
              "string",
              "null"
            ]
          },
          "teamId": {
            "type": [
              "string",
              "null"
            ]
          },
          "teamName": {
            "type": [
              "string",
              "null"
            ]
          },
          "availableTeams": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "teamId": {
                  "type": "string"
                },
                "teamName": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "teamId",
                "teamName"
              ]
            }
          },
          "permissions": {
            "type": "object",
            "properties": {
              "isAdmin": {
                "type": "boolean"
              },
              "isTeamOwner": {
                "type": "boolean"
              },
              "senderEntitlement": {
                "type": "string"
              },
              "billingAccessEnabled": {
                "type": "boolean"
              }
            },
            "required": [
              "isAdmin",
              "isTeamOwner",
              "senderEntitlement",
              "billingAccessEnabled"
            ]
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary",
          "isAuthenticated",
          "userId",
          "userName",
          "userEmail",
          "teamId",
          "teamName",
          "availableTeams",
          "permissions",
          "warnings"
        ]
      },
      "get_feature_costs_input": {
        "type": "object",
        "properties": {}
      },
      "get_feature_costs_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "isAvailable": {
            "type": "boolean"
          },
          "featuresCosts": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "summary",
          "isAvailable",
          "featuresCosts"
        ]
      },
      "get_flow_available_variables_input": {
        "type": "object",
        "properties": {
          "source": {
            "description": "Variable source. Use ft for flow properties and hs for HubSpot object properties.",
            "type": "string",
            "enum": [
              "ft",
              "hs"
            ],
            "default": "ft"
          },
          "objectName": {
            "description": "Variable object/group name. Omit for flow variables; use a HubSpot object group for hs variables.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "flowPlanId": {
            "description": "Optional flow plan id. Used with nodeId to include custom variables produced by earlier AI research nodes. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "nodeId": {
            "description": "Optional node id. Example: node_email_1. Use an id from the submitted root tree or get_flow_workspace.flowPlan.root; when provided, the response includes custom variables available before this node.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "root": {
            "description": "Optional root tree to evaluate custom variables against instead of the persisted flow root.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "id": {
                "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "type": {
                "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                "type": "string",
                "enum": [
                  "email",
                  "call",
                  "branch",
                  "manual",
                  "reassignment",
                  "ai_research",
                  "ai_research_advance",
                  "hs_enrichment",
                  "linkedin_send_connect_v3",
                  "linkedin_send_message_v3",
                  "linkedin_visit_profile_v3",
                  "linkedin_send_inmail_v3"
                ]
              },
              "delay": {
                "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "payload": {
                "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                "type": [
                  "object",
                  "null"
                ]
              },
              "next": {
                "description": "Normal linear continuation for operation/directive nodes.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "id": {
                    "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "type": {
                    "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                    "type": "string",
                    "enum": [
                      "email",
                      "call",
                      "branch",
                      "manual",
                      "reassignment",
                      "ai_research",
                      "ai_research_advance",
                      "hs_enrichment",
                      "linkedin_send_connect_v3",
                      "linkedin_send_message_v3",
                      "linkedin_visit_profile_v3",
                      "linkedin_send_inmail_v3"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "payload": {
                    "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                    "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/payload"
                  },
                  "next": {
                    "description": "Normal linear continuation for operation/directive nodes.",
                    "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next"
                  },
                  "expression": {
                    "description": "Branch expression. Required for type=branch.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "on_true": {
                    "description": "Branch path when expression evaluates true. Used for type=branch.",
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "id": {
                        "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "type": {
                        "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                        "type": "string",
                        "enum": [
                          "email",
                          "call",
                          "branch",
                          "manual",
                          "reassignment",
                          "ai_research",
                          "ai_research_advance",
                          "hs_enrichment",
                          "linkedin_send_connect_v3",
                          "linkedin_send_message_v3",
                          "linkedin_visit_profile_v3",
                          "linkedin_send_inmail_v3"
                        ]
                      },
                      "delay": {
                        "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "payload": {
                        "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                        "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/payload"
                      },
                      "next": {
                        "description": "Normal linear continuation for operation/directive nodes.",
                        "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next"
                      },
                      "expression": {
                        "description": "Branch expression. Required for type=branch.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "on_true": {
                        "description": "Branch path when expression evaluates true. Used for type=branch.",
                        "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next/properties/on_true"
                      },
                      "on_false": {
                        "description": "Branch path when expression evaluates false. Used for type=branch.",
                        "type": [
                          "object",
                          "null"
                        ],
                        "properties": {
                          "id": {
                            "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "type": {
                            "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                            "type": "string",
                            "enum": [
                              "email",
                              "call",
                              "branch",
                              "manual",
                              "reassignment",
                              "ai_research",
                              "ai_research_advance",
                              "hs_enrichment",
                              "linkedin_send_connect_v3",
                              "linkedin_send_message_v3",
                              "linkedin_visit_profile_v3",
                              "linkedin_send_inmail_v3"
                            ]
                          },
                          "delay": {
                            "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "payload": {
                            "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                            "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/payload"
                          },
                          "next": {
                            "description": "Normal linear continuation for operation/directive nodes.",
                            "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next"
                          },
                          "expression": {
                            "description": "Branch expression. Required for type=branch.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "on_true": {
                            "description": "Branch path when expression evaluates true. Used for type=branch.",
                            "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next/properties/on_true"
                          },
                          "on_false": {
                            "description": "Branch path when expression evaluates false. Used for type=branch.",
                            "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next/properties/on_true/properties/on_false"
                          },
                          "on_null": {
                            "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "fail",
                              "false",
                              null
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "type"
                        ]
                      },
                      "on_null": {
                        "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "enum": [
                          "fail",
                          "false",
                          null
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "type"
                    ]
                  },
                  "on_false": {
                    "description": "Branch path when expression evaluates false. Used for type=branch.",
                    "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next/properties/on_true/properties/on_false"
                  },
                  "on_null": {
                    "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "fail",
                      "false",
                      null
                    ]
                  }
                },
                "required": [
                  "id",
                  "type"
                ]
              },
              "expression": {
                "description": "Branch expression. Required for type=branch.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "on_true": {
                "description": "Branch path when expression evaluates true. Used for type=branch.",
                "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next/properties/on_true"
              },
              "on_false": {
                "description": "Branch path when expression evaluates false. Used for type=branch.",
                "$ref": "#/components/schemas/get_flow_available_variables_input/properties/root/properties/next/properties/on_true/properties/on_false"
              },
              "on_null": {
                "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "fail",
                  "false",
                  null
                ]
              }
            },
            "required": [
              "id",
              "type"
            ],
            "default": null
          }
        }
      },
      "get_flow_available_variables_output": {},
      "get_flow_enrollment_input": {
        "type": "object",
        "properties": {
          "enrollmentId": {
            "description": "Enrollment/activity id. From enrollment list tools, use exact enrollmentId only when canInspectEnrollment is true; queue rows do not have an enrollment yet. Do not pass queueItemId here.",
            "type": [
              "string",
              "null"
            ]
          },
          "includeProperties": {
            "description": "When true, include raw enrollment.properties: prospect and company fields, current owner and channel-specific assignee user ids, selected email account id, source description, and custom or enriched flow values.\n\n- These are enrollment-level values and may not identify a historical action\u0026#39;s per-action override.\n- Defaults to false because enriched profiles can make the response too large for MCP clients.",
            "type": "boolean",
            "default": false
          },
          "includeFlowTree": {
            "description": "When true, include flowTree: the root/tree stored on this enrollment when it was created. Defaults to false because trees can be large. This enrollment snapshot can differ from the current flow-plan root if the plan was edited later.",
            "type": "boolean",
            "default": false
          }
        },
        "required": [
          "enrollmentId"
        ]
      },
      "get_flow_enrollment_output": {},
      "get_flow_source_modes_input": {
        "type": "object",
        "properties": {}
      },
      "get_flow_source_modes_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "sourceModes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "mode": {
                  "type": "string",
                  "enum": [
                    "none",
                    "existing_audience",
                    "manual",
                    "csv",
                    "hubspot_list",
                    "sales_navigator"
                  ]
                },
                "requirements": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "readOnlyTools": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "tools": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "notes": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "mode",
                "requirements",
                "readOnlyTools",
                "tools",
                "notes"
              ]
            }
          },
          "hints": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary",
          "sourceModes",
          "hints"
        ]
      },
      "get_flow_workspace_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.",
            "type": [
              "string",
              "null"
            ]
          },
          "awaitingLimit": {
            "description": "Max awaiting contacts or signal events to return.",
            "type": "integer",
            "default": 25
          },
          "awaitingCursor": {
            "description": "Cursor for the next awaiting page.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "awaitingSearchQuery": {
            "description": "Search text for awaiting contacts.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "flowPlanId"
        ]
      },
      "get_flow_workspace_output": {},
      "get_guide_input": {
        "type": "object",
        "properties": {
          "topic": {
            "description": "Guide topic: overview, flow_plan_creation, dynamic_actions, contact_discovery, audience_management, enrollment_management, tasks_and_approvals, contact_identity, or senders_and_capabilities.",
            "type": "string",
            "enum": [
              "overview",
              "flow_plan_creation",
              "dynamic_actions",
              "contact_discovery",
              "audience_management",
              "enrollment_management",
              "tasks_and_approvals",
              "contact_identity",
              "senders_and_capabilities"
            ],
            "default": "overview"
          }
        }
      },
      "get_guide_output": {
        "type": "string"
      },
      "get_linkedin_unibox_conversation_input": {
        "type": "object",
        "properties": {
          "conversationId": {
            "description": "Exact conversationId returned by list_linkedin_unibox_conversations.",
            "type": "string"
          }
        },
        "required": [
          "conversationId"
        ]
      },
      "get_linkedin_unibox_conversation_output": {},
      "get_linkedin_unibox_counts_input": {
        "type": "object",
        "properties": {
          "searchQuery": {
            "description": "Search participant name, LinkedIn URL, company name, company domain, or latest-message preview.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "linAccountId": {
            "description": "Exact accessible LinkedIn sender account id. Omit for the caller\u0027s accessible sender scope.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "fromUtc": {
            "description": "Inclusive lower latest-message timestamp in ISO 8601 UTC form with an explicit offset.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "toUtc": {
            "description": "Inclusive upper latest-message timestamp in ISO 8601 UTC form with an explicit offset.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          }
        }
      },
      "get_linkedin_unibox_counts_output": {},
      "get_outreach_queue_insights_input": {
        "type": "object",
        "properties": {
          "userIds": {
            "description": "Sender User Identity IDs to include. Omit to use the current caller\u0027s authorized sender scope.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "searchQuery": {
            "description": "Contact search text matching the same q/contact fields as the Social Outreach Queue.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "flowPlanIds": {
            "description": "Source Flow Plan IDs to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "requestTypes": {
            "description": "LinkedIn request/Outreach Action types to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "send_connection",
                "send_message",
                "view_profile",
                "connection_withdrawal",
                "send_in_mail_message",
                "sync_relations",
                "sales_navigator_import",
                "metadata_sync",
                "plan_sync",
                "sync_unibox_account",
                "sync_unibox_conversation"
              ]
            },
            "default": null
          }
        }
      },
      "get_outreach_queue_insights_output": {
        "type": "object",
        "properties": {
          "calculated_at_utc": {
            "description": "The UTC time at which this Insights snapshot was calculated.",
            "type": "string",
            "format": "date-time"
          },
          "summary": {
            "description": "Distinct active Outreach Action totals by status category.",
            "type": "object",
            "properties": {
              "action_required_count": {
                "type": "integer"
              },
              "waiting_automatically_count": {
                "type": "integer"
              },
              "ready_for_processing_count": {
                "type": "integer"
              },
              "timing_pending_count": {
                "type": "integer"
              },
              "affected_sender_count": {
                "type": "integer"
              },
              "next_expected_processing_at_utc": {
                "description": "The earliest reliable ready or automatic processing time, or null when no reliable time exists.",
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            },
            "required": [
              "action_required_count",
              "waiting_automatically_count",
              "ready_for_processing_count",
              "timing_pending_count",
              "affected_sender_count",
              "next_expected_processing_at_utc"
            ]
          },
          "insights": {
            "description": "Active queue conditions grouped by sender and canonical reason.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "status_category": {
                  "description": "The current processing state of an active Social Outreach Action.",
                  "type": "string",
                  "enum": [
                    "action_required",
                    "waiting_automatically",
                    "ready_for_processing",
                    "timing_pending"
                  ]
                },
                "reason_code": {
                  "description": "The canonical reason when one is known; ready work may have no separate reason code.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "enum": [
                    "sender_account_disconnected",
                    "work_schedule_not_configured",
                    "approval_task_required",
                    "manual_task_completion_required",
                    "team_credits_required",
                    "paid_plan_required",
                    "trial_expired",
                    "sender_account_sync_in_progress",
                    "outside_work_schedule",
                    "safety_delay_active",
                    "daily_action_limit_reached",
                    "provider_limit_active",
                    "profile_view_limit_reached",
                    "earlier_sender_actions_pending",
                    "estimate_calculation_pending",
                    "unclassified_queue_condition",
                    null
                  ]
                },
                "resolution_mode": {
                  "description": "How the current Outreach Queue condition is expected to be resolved.",
                  "type": "string",
                  "enum": [
                    "human_action",
                    "automatic",
                    "none",
                    "unknown"
                  ]
                },
                "resolution_owner_type": {
                  "description": "The person, Team Role, or system responsible for resolving an Outreach Queue condition.",
                  "type": "string",
                  "enum": [
                    "sender",
                    "approval_assignee",
                    "task_assignee",
                    "team_admin",
                    "billing_admin",
                    "system",
                    "unknown"
                  ]
                },
                "resolution_owner": {
                  "description": "An authorized owner identity when it is useful and safe to disclose.",
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "team_membership_id": {
                      "type": "string"
                    },
                    "display_name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "team_membership_id",
                    "display_name"
                  ]
                },
                "viewer_can_resolve": {
                  "type": "boolean"
                },
                "recommended_action_type": {
                  "description": "Null whenever viewer_can_resolve is false.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "enum": [
                    "reconnect_sender_account",
                    "configure_work_schedule",
                    "review_approval_task",
                    "complete_manual_task",
                    "manage_team_credits",
                    "manage_team_plan",
                    "filter_outreach_queue_by_reason",
                    null
                  ]
                },
                "recommended_action_target": {
                  "description": "An authorized resource reference, or null when no permitted target exists.",
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "resource_type": {
                      "type": "string"
                    },
                    "resource_id": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "resource_type",
                    "resource_id"
                  ]
                },
                "sender": {
                  "type": "object",
                  "properties": {
                    "user_id": {
                      "description": "The User Identity ID used by the existing user_ids queue filter.",
                      "type": "string"
                    },
                    "team_membership_id": {
                      "type": "string"
                    },
                    "display_name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "user_id",
                    "team_membership_id",
                    "display_name"
                  ]
                },
                "affected_action_count": {
                  "type": "integer"
                },
                "expected_resume_at_utc": {
                  "description": "A reliable expected automatic resume time, or null when no reliable time exists.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date-time"
                },
                "target_view_type": {
                  "type": "string",
                  "enum": [
                    "in_queue",
                    "awaiting",
                    "done",
                    "canceled",
                    "failed"
                  ]
                }
              },
              "required": [
                "status_category",
                "reason_code",
                "resolution_mode",
                "resolution_owner_type",
                "resolution_owner",
                "viewer_can_resolve",
                "recommended_action_type",
                "recommended_action_target",
                "sender",
                "affected_action_count",
                "expected_resume_at_utc",
                "target_view_type"
              ]
            }
          }
        },
        "required": [
          "calculated_at_utc",
          "summary",
          "insights"
        ]
      },
      "get_social_engagement_config_input": {
        "type": "object",
        "properties": {}
      },
      "get_social_engagement_config_output": {},
      "get_team_metrics_input": {
        "type": "object",
        "properties": {
          "fromUtc": {
            "description": "UTC lower bound. The metrics service treats this as the start of the UTC day.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "toUtc": {
            "description": "UTC upper bound. The metrics service treats this as the end of the UTC day.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "flowPlanIds": {
            "description": "Flow plan ids to filter by. These map to MetricsFiltersDto.source_ids and are expanded to enrollments by the metrics service.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "userIds": {
            "description": "Team member user ids to filter by. Team owners can omit for all team users; non-owners are scoped by the service to their own user.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "includeTotals": {
            "description": "Include total actions, engagements, and opportunities. Defaults to true.",
            "type": "boolean",
            "default": true
          },
          "includeActions": {
            "description": "Include automated outreach, manual task, and Flow Agent action counts. Defaults to true.",
            "type": "boolean",
            "default": true
          },
          "includeEngagement": {
            "description": "Include email/LinkedIn engagement counts and reply sentiment. Defaults to true.",
            "type": "boolean",
            "default": true
          },
          "includeOpportunities": {
            "description": "Include opportunity totals such as positive replies and meetings booked. Defaults to true.",
            "type": "boolean",
            "default": true
          },
          "includeEmailChart": {
            "description": "Include email trend/chart buckets. Defaults to false; enable only when the customer asks for chart, trend, or by-day/by-month data. If chart data is requested without a full date range, missing bounds default to a recent 30-day window.",
            "type": "boolean",
            "default": false
          },
          "includeLinkedinChart": {
            "description": "Include LinkedIn trend/chart buckets. Defaults to false; enable only when the customer asks for chart, trend, or by-day/by-month data. If chart data is requested without a full date range, missing bounds default to a recent 30-day window.",
            "type": "boolean",
            "default": false
          }
        }
      },
      "get_team_metrics_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "effectiveFilters": {
            "type": "object",
            "properties": {
              "fromUtc": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "toUtc": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "fromUtcInMs": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "toUtcInMs": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "flowPlanIds": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "userIds": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "fromUtc",
              "toUtc",
              "fromUtcInMs",
              "toUtcInMs",
              "flowPlanIds",
              "userIds"
            ]
          },
          "totals": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "actionsCount": {
                "type": "integer"
              },
              "engagementsCount": {
                "type": "integer"
              },
              "opportunitiesCount": {
                "type": "integer"
              }
            },
            "required": [
              "actionsCount",
              "engagementsCount",
              "opportunitiesCount"
            ]
          },
          "actions": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "automatedOutreachActionsCounts": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "integer"
                  },
                  "viewedLinProfiles": {
                    "type": "integer"
                  },
                  "linConnectionRequests": {
                    "type": "integer"
                  },
                  "linMessages": {
                    "type": "integer"
                  },
                  "linInMail": {
                    "type": "integer"
                  },
                  "total": {
                    "type": "integer"
                  }
                },
                "required": [
                  "email",
                  "viewedLinProfiles",
                  "linConnectionRequests",
                  "linMessages",
                  "linInMail",
                  "total"
                ]
              },
              "manualOutreachActionsCounts": {
                "type": "object",
                "properties": {
                  "approvalTasksLogged": {
                    "type": "integer"
                  },
                  "approvalTasksTotal": {
                    "type": "integer"
                  },
                  "callTasksLogged": {
                    "type": "integer"
                  },
                  "callTasksTotal": {
                    "type": "integer"
                  },
                  "manualTasksLogged": {
                    "type": "integer"
                  },
                  "manualTasksTotal": {
                    "type": "integer"
                  },
                  "total": {
                    "type": "integer"
                  }
                },
                "required": [
                  "approvalTasksLogged",
                  "approvalTasksTotal",
                  "callTasksLogged",
                  "callTasksTotal",
                  "manualTasksLogged",
                  "manualTasksTotal",
                  "total"
                ]
              },
              "flowAgentActionsMetrics": {
                "type": "object",
                "properties": {
                  "total": {
                    "type": "integer"
                  },
                  "qualified": {
                    "type": "integer"
                  },
                  "disqualified": {
                    "type": "integer"
                  }
                },
                "required": [
                  "total",
                  "qualified",
                  "disqualified"
                ]
              },
              "total": {
                "type": "integer"
              }
            },
            "required": [
              "automatedOutreachActionsCounts",
              "manualOutreachActionsCounts",
              "flowAgentActionsMetrics",
              "total"
            ]
          },
          "engagement": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "emailMetrics": {
                "type": "object",
                "properties": {
                  "replies": {
                    "type": "integer"
                  },
                  "click": {
                    "type": "integer"
                  }
                },
                "required": [
                  "replies",
                  "click"
                ]
              },
              "linMetrics": {
                "type": "object",
                "properties": {
                  "sentConnectionRequests": {
                    "type": "integer"
                  },
                  "acceptedConnections": {
                    "type": "integer"
                  },
                  "messagesSent": {
                    "type": "integer"
                  },
                  "inMailSent": {
                    "type": "integer"
                  },
                  "replies": {
                    "type": "integer"
                  },
                  "inMailReplies": {
                    "type": "integer"
                  }
                },
                "required": [
                  "sentConnectionRequests",
                  "acceptedConnections",
                  "messagesSent",
                  "inMailSent",
                  "replies",
                  "inMailReplies"
                ]
              },
              "emailSentimentMetrics": {
                "type": "object",
                "properties": {
                  "positive": {
                    "type": "integer"
                  },
                  "neutral": {
                    "type": "integer"
                  },
                  "negative": {
                    "type": "integer"
                  }
                },
                "required": [
                  "positive",
                  "neutral",
                  "negative"
                ]
              },
              "linSentimentMetrics": {
                "type": "object",
                "properties": {
                  "positive": {
                    "type": "integer"
                  },
                  "neutral": {
                    "type": "integer"
                  },
                  "negative": {
                    "type": "integer"
                  }
                },
                "required": [
                  "positive",
                  "neutral",
                  "negative"
                ]
              }
            },
            "required": [
              "emailMetrics",
              "linMetrics",
              "emailSentimentMetrics",
              "linSentimentMetrics"
            ]
          },
          "opportunities": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "positiveReplies": {
                "type": "integer"
              },
              "meetingsBooked": {
                "type": "integer"
              }
            },
            "required": [
              "positiveReplies",
              "meetingsBooked"
            ]
          },
          "emailChart": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "object",
              "properties": {
                "origin": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "startOfSegmentDate": {
                  "type": "string",
                  "format": "date-time"
                },
                "endOfSegmentDate": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "origin",
                "startOfSegmentDate",
                "endOfSegmentDate"
              ]
            }
          },
          "linkedinChart": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/get_team_metrics_output/properties/emailChart/items"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nextSteps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary",
          "effectiveFilters",
          "totals",
          "actions",
          "engagement",
          "opportunities",
          "emailChart",
          "linkedinChart",
          "warnings",
          "nextSteps"
        ]
      },
      "get_user_credit_usage_input": {
        "type": "object",
        "properties": {
          "userId": {
            "description": "FirstTouch user id to report. Use the exact userId returned by get_current_user or list_team_members.",
            "type": "string"
          },
          "fromUtc": {
            "description": "Optional inclusive UTC lower bound for transaction creation time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "toUtc": {
            "description": "Optional inclusive UTC upper bound for transaction creation time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "source": {
            "description": "Optional transaction source filter: Mcp, WebApp, Extension, PublicApi, or Unknown. Omit to include all transactions attributed to the user.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "userId"
        ]
      },
      "get_user_credit_usage_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "teamId": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "source": {
            "type": [
              "string",
              "null"
            ]
          },
          "fromUtc": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "toUtc": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "totalCreditsUsed": {
            "type": "number"
          },
          "creditsByFeature": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "summary",
          "teamId",
          "userId",
          "source",
          "fromUtc",
          "toUtc",
          "totalCreditsUsed",
          "creditsByFeature"
        ]
      },
      "list_audiences_input": {
        "type": "object",
        "properties": {
          "limit": {
            "description": "Maximum audiences to return.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Cursor returned by a previous list_audiences call.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "searchQuery": {
            "description": "Search text for audience names.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "includeLinkedAudiences": {
            "description": "When true, include audiences that are already linked to a flow. Defaults to false.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "ids": {
            "description": "Optional audience ids to filter by. Use exact id values returned by list_audiences or create_audience.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "names": {
            "description": "Optional audience names to filter by.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "sources": {
            "description": "Optional audience source filters.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ],
              "enum": [
                "hubspot",
                "csv",
                "manual",
                "system",
                "sales_navigator",
                null
              ]
            },
            "default": null
          },
          "statuses": {
            "description": "Optional audience status filters.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "active",
                "sync_in_progress",
                "failed"
              ]
            },
            "default": null
          }
        }
      },
      "list_audiences_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "source": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "enum": [
                    "hubspot",
                    "csv",
                    "manual",
                    "system",
                    "sales_navigator",
                    null
                  ]
                },
                "contactsCount": {
                  "type": "integer"
                },
                "linkedFlowId": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "sync": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "in_progress",
                        "failed_permanently"
                      ]
                    },
                    "lastStarted": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "lastCompleted": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "failStreak": {
                      "type": "integer"
                    },
                    "error": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "properties": {
                        "message": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "code": {
                          "type": "string"
                        },
                        "details": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "message",
                        "code",
                        "details"
                      ]
                    }
                  },
                  "required": [
                    "status",
                    "lastStarted",
                    "lastCompleted",
                    "failStreak",
                    "error"
                  ]
                },
                "salesNavigatorImportStatus": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "enum": [
                    "pending",
                    "queued",
                    "syncing",
                    "completed",
                    "partial_failure",
                    "failed",
                    "paused",
                    null
                  ]
                },
                "lastModified": {
                  "type": "string",
                  "format": "date-time"
                },
                "uiLinks": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "label": {
                        "type": "string"
                      },
                      "url": {
                        "type": "string"
                      },
                      "reason": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "label",
                      "url",
                      "reason"
                    ]
                  }
                }
              },
              "required": [
                "id",
                "name",
                "source",
                "contactsCount",
                "linkedFlowId",
                "sync",
                "salesNavigatorImportStatus",
                "lastModified",
                "uiLinks"
              ]
            }
          },
          "cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "uiLinks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/list_audiences_output/properties/items/items/properties/uiLinks/items"
            }
          }
        },
        "required": [
          "summary",
          "items",
          "cursor",
          "uiLinks"
        ]
      },
      "list_credit_transactions_input": {
        "type": "object",
        "properties": {
          "fromUtc": {
            "description": "Optional inclusive UTC lower bound for transaction creation time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "toUtc": {
            "description": "Optional inclusive UTC upper bound for transaction creation time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "featureTypes": {
            "description": "Optional billing activity types to include. Omit or pass an empty array for all activities.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "email_unlock",
                "email_verification",
                "phone_unlock",
                "messaging_generation",
                "researcher_agent",
                "qualification_agent",
                "contact_enrichment",
                "company_enrichment",
                "signal"
              ]
            },
            "default": null
          },
          "limit": {
            "description": "Maximum transactions to return. Defaults to 10 and is capped at 50.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Cursor returned by a previous list_credit_transactions call.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "userId": {
            "description": "Optional FirstTouch user id. When supplied, only transactions attributed to this user are returned.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "source": {
            "description": "Optional transaction source filter: Mcp, WebApp, Extension, PublicApi, or Unknown.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_credit_transactions_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "teamId": {
            "type": "string"
          },
          "effectiveFilters": {
            "type": "object",
            "properties": {
              "fromUtc": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "toUtc": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "featureTypes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "email_unlock",
                    "email_verification",
                    "phone_unlock",
                    "messaging_generation",
                    "researcher_agent",
                    "qualification_agent",
                    "contact_enrichment",
                    "company_enrichment",
                    "signal"
                  ]
                }
              },
              "statuses": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "reserved",
                    "committed",
                    "released"
                  ]
                }
              },
              "userId": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "source": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "fromUtc",
              "toUtc",
              "featureTypes",
              "statuses",
              "userId",
              "source"
            ]
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "created": {
                  "type": "string",
                  "format": "date-time"
                },
                "featureType": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "enum": [
                    "email_unlock",
                    "email_verification",
                    "phone_unlock",
                    "messaging_generation",
                    "researcher_agent",
                    "qualification_agent",
                    "contact_enrichment",
                    "company_enrichment",
                    "signal",
                    null
                  ]
                },
                "cost": {
                  "type": "number"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "incoming",
                    "outgoing"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "reserved",
                    "committed",
                    "released"
                  ]
                },
                "isAdminChange": {
                  "type": "boolean"
                },
                "metadata": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "id",
                "created",
                "featureType",
                "cost",
                "type",
                "status",
                "isAdminChange",
                "metadata",
                "description"
              ]
            }
          },
          "cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "totalCount": {
            "type": "integer"
          }
        },
        "required": [
          "summary",
          "teamId",
          "effectiveFilters",
          "items",
          "cursor",
          "totalCount"
        ]
      },
      "list_email_send_queue_input": {
        "type": "object",
        "properties": {
          "view": {
            "description": "Queue view. One of in_queue, awaiting, done, canceled, or failed. Defaults to in_queue.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "in_queue",
              "awaiting",
              "done",
              "canceled",
              "failed",
              null
            ],
            "default": null
          },
          "userIds": {
            "description": "FirstTouch team member user ids whose email sends should be included. Omit or pass an empty array for the current caller only. Admins and team owners may explicitly select valid members of the active team.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "flowPlanIds": {
            "description": "Flow Plan ids to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "searchQuery": {
            "description": "Recipient name/address or stable action/operation id search.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "limit": {
            "description": "Maximum rows to return. Defaults to 20, max 100.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Opaque keyset cursor returned by the preceding list_email_send_queue response. Reuse the same view and filters.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_email_send_queue_output": {},
      "list_enrollments_input": {
        "type": "object",
        "properties": {
          "ids": {
            "description": "Specific enrollment ids to include. Use exact enrollmentId values returned by find_mcp_enrollment, add_dynamic_action, list_enrollments, or list_flow_plan_enrollments; do not pass queueItemId here.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "ignoreIds": {
            "description": "Specific enrollment ids to exclude. Use exact enrollmentId values returned by find_mcp_enrollment, add_dynamic_action, list_enrollments, or list_flow_plan_enrollments; do not pass queueItemId here.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "userIds": {
            "description": "Assigned user ids to include. Use the exact current userId from get_current_user or userId values returned by list_team_members.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "teamIds": {
            "description": "Team ids to include. Example item: team_123. Use the current teamId from get_current_user; non-admin callers are still scoped to their own team.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "flowPlanId": {
            "description": "Advanced-search filter for one flow plan id.\n\n- Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.\n- Use this with statuses and finishedFrom/finishedTo for completed, failed, or canceled enrollments during a time period.\n- For a simple single-flow status list without a terminal-date range, use list_flow_plan_enrollments instead.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "flowPlanIds": {
            "description": "Advanced-search filter for flow plan ids.\n\n- Use exact flowPlanId values returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.\n- For one flow plan plus a terminal-status time range, use this tool with statuses and finishedFrom/finishedTo; otherwise use list_flow_plan_enrollments for a simple one-flow status page.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "statuses": {
            "description": "Advanced-search status buckets to include: in_progress, completed, failed, or canceled.\n\n- For completed, failed, or canceled enrollments during a period, combine this with flowPlanId and finishedFrom/finishedTo; do not use from/to because they filter creation time.\n- Use list_flow_plan_enrollments for a simple one-flow status page or disqualified queue rows.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "in_progress",
                "failed",
                "completed",
                "canceled",
                "disqualified"
              ]
            },
            "default": null
          },
          "rerunChildStatuses": {
            "description": "Child rerun statuses to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "pending",
                "in_progress",
                "completed",
                "failed",
                "canceled"
              ]
            },
            "default": null
          },
          "signalTypes": {
            "description": "Signal types to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ],
              "enum": [
                "unknown",
                "website_traffic",
                "linkedin_engagement",
                "leadership_changes",
                "champion_tracking",
                "job_postings",
                "tech_stack",
                "linkedin_listening",
                "funding",
                "product_usage",
                "empty",
                "company_website_traffic",
                "prospect_website_traffic",
                "general",
                "hiring",
                null
              ]
            },
            "default": null
          },
          "replyTypes": {
            "description": "Reply/event filters to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "email_reply",
                "meeting_booked",
                "linkedin_reply",
                "no_reply"
              ]
            },
            "default": null
          },
          "searchQuery": {
            "description": "Search text matched against prospect and company fields.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "limit": {
            "description": "Max enrollment rows to return. Prefer the default 10; set 25 only when the customer asks for a larger page.",
            "type": "integer",
            "default": 10
          },
          "cursor": {
            "description": "Cursor returned by a previous list_enrollments call.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "from": {
            "description": "Enrollment creation timestamp lower bound in UTC. Do not use this for when an enrollment completed, failed, or was canceled; use finishedFrom instead.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "to": {
            "description": "Enrollment creation timestamp upper bound in UTC, exclusive. Do not use this for when an enrollment completed, failed, or was canceled; use finishedTo instead.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "finishedFrom": {
            "description": "Terminal-status timestamp lower bound in UTC, inclusive.\n\n- Use this for completed, failed, or canceled enrollments \u0026#39;in the last N hours\u0026#39; or during a date range; it uses the time the enrollment entered its displayed terminal status.\n- Combine with statuses to choose an outcome.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "finishedTo": {
            "description": "Terminal-status timestamp upper bound in UTC, exclusive.\n\n- Use this with finishedFrom for completed, failed, or canceled enrollments during a date range; it uses the time the enrollment entered its displayed terminal status.\n- Combine with statuses to choose an outcome.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "scores": {
            "description": "Lead-score buckets to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "perfect_fit",
                "good_fit",
                "partial_fit",
                "weak_fit"
              ]
            },
            "default": null
          },
          "audienceIds": {
            "description": "Audience ids to include. Use exact id values returned by list_audiences or create_audience.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "sourceFlowIds": {
            "description": "Source enrollment ids to include. Use exact sourceEnrollmentId/enrollmentId values returned by list_enrollments or get_flow_enrollment; do not pass queueItemId here.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "firstName": {
            "description": "Prospect first-name filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "lastName": {
            "description": "Prospect last-name filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "email": {
            "description": "Prospect email filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "isRerun": {
            "description": "When true, only rerun enrollments are included. When false, only original enrollments are included.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "hasRerun": {
            "description": "When set, filters enrollments that have or do not have reruns.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "hasFailedAction": {
            "description": "When set, filters enrollments that have or do not have failed actions.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "isShowHidden": {
            "description": "When true, includes hidden enrollment rows. Defaults to true to match the UI cursor-fast enrollment list.",
            "type": [
              "boolean",
              "null"
            ],
            "default": true
          },
          "linkedinUrl": {
            "description": "Prospect LinkedIn URL filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "sources": {
            "description": "Enrollment source filters, such as hubspot_custom_actions.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "hubspot_custom_actions"
              ]
            },
            "default": null
          }
        }
      },
      "list_enrollments_output": {},
      "list_flow_plan_credits_usage_input": {
        "type": "object",
        "properties": {
          "fromUtc": {
            "description": "Optional inclusive UTC lower bound for credits usage.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "toUtc": {
            "description": "Optional inclusive UTC upper bound for credits usage.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "limit": {
            "description": "Maximum flow plans to return. Defaults to 10 and is capped at 50.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Cursor returned by a previous list_flow_plan_credits_usage call.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_flow_plan_credits_usage_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "teamId": {
            "type": "string"
          },
          "effectiveFilters": {
            "type": "object",
            "properties": {
              "fromUtc": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "toUtc": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            },
            "required": [
              "fromUtc",
              "toUtc"
            ]
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "creditsUsage": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "number"
                  }
                }
              },
              "required": [
                "id",
                "name",
                "creditsUsage"
              ]
            }
          },
          "pageCreditsUsed": {
            "type": "number"
          },
          "cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "summary",
          "teamId",
          "effectiveFilters",
          "items",
          "pageCreditsUsed",
          "cursor"
        ]
      },
      "list_flow_plan_enrollments_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.",
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "description": "Flow-plan enrollment page status bucket to list.",
            "type": "string",
            "enum": [
              "in_progress",
              "failed",
              "completed",
              "canceled",
              "disqualified"
            ],
            "default": "in_progress"
          },
          "limit": {
            "description": "Max enrollment rows to return. Prefer the default 10; set 25 only when the customer asks for a larger page.",
            "type": "integer",
            "default": 10
          },
          "cursor": {
            "description": "Offset cursor returned by a previous list_flow_plan_enrollments call.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "flowPlanId"
        ]
      },
      "list_flow_plan_enrollments_output": {},
      "list_flow_plans_input": {
        "type": "object",
        "properties": {
          "limit": {
            "description": "Max flow plans to return. Defaults to 10 and is capped at 25. For top/most/highest flow questions, use 5 unless the customer asks for more.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Cursor from a previous list_flow_plans response.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "isDraft": {
            "description": "Filter by draft state. true returns drafts, false returns published flows, omit for both.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "name": {
            "description": "Exact flow plan name filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "searchQuery": {
            "description": "Search flow plans by name.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "sourceless": {
            "description": "Filter to flows without a linked source.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "flowPlanIds": {
            "description": "Optional flow plan ids to return. Use exact flowPlanId values returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "audienceSources": {
            "description": "Optional audience source filters for linked audience flows, for example manual, hubspot, or sales_navigator.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "hubspot",
                "csv",
                "manual",
                "system",
                "sales_navigator"
              ]
            },
            "default": null
          },
          "includeMetrics": {
            "description": "Include metric values in each row. Adds an extra metrics query; keep false for lightweight discovery unless the customer asks for metric values.",
            "type": "boolean",
            "default": false
          },
          "includeCost": {
            "description": "Include estimated single-enrollment cost in each row. This calculates cost per returned flow; keep false unless the customer asks about cost or credits.",
            "type": "boolean",
            "default": false
          },
          "orderBy": {
            "description": "Sort key: created, name, enrollments, replies, opportunities, or awaiting. Defaults to created.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "created",
              "enrollments",
              "replies",
              "opportunities",
              "name",
              "awaiting",
              null
            ],
            "default": null
          },
          "orderDirection": {
            "description": "Sort direction: ascending or descending. Defaults to descending.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "ascending",
              "descending",
              null
            ],
            "default": null
          }
        }
      },
      "list_flow_plans_output": {},
      "list_hubspot_lists_input": {
        "type": "object",
        "properties": {
          "limit": {
            "description": "Maximum HubSpot lists to return.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Cursor returned by a previous list_hubspot_lists call.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "searchQuery": {
            "description": "Search text for HubSpot list names.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_hubspot_lists_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "lists": {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "name": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "length": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "unknown",
                        "contact",
                        "company",
                        "deal"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "length",
                    "type"
                  ]
                }
              },
              "cursor": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "totalCount": {
                "type": "integer"
              }
            },
            "required": [
              "items",
              "cursor",
              "totalCount"
            ]
          },
          "uiLinks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "label",
                "url",
                "reason"
              ]
            }
          }
        },
        "required": [
          "summary",
          "lists",
          "uiLinks"
        ]
      },
      "list_linkedin_outreach_queue_input": {
        "type": "object",
        "properties": {
          "view": {
            "description": "Queue slice to apply before advanced filters.\n\n- Defaults to active for natural requests like active/current/waiting LinkedIn actions.\n- Use all for normal outreach rows across all statuses, diagnostic_all for expanded debug/show-everything inspection, and custom for exact explicit filters.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "in_queue",
              "review_required",
              "done",
              "canceled",
              "failed",
              "all",
              "custom",
              "active",
              "diagnostic_all",
              null
            ],
            "default": null
          },
          "userIds": {
            "description": "FirstTouch team member user ids whose LinkedIn senders should be included. Omit to use only the current caller.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "ids": {
            "description": "Exact LinkedIn queue request ids. Applies only to real provider request rows, not awaiting-requirement rows.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "linAccountIds": {
            "description": "Exact FirstTouch LinkedIn account ids to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "operationIds": {
            "description": "Exact operation ids to include. For real request rows this is the provider request operation; for awaiting rows this is the flow action operation.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "actionIds": {
            "description": "Exact flow action ids to include.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "actionTypes": {
            "description": "Flow node/action types to include, such as linkedin_send_connect_v3, linkedin_send_message_v3, linkedin_visit_profile_v3, or linkedin_send_inmail_v3.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "email",
                "call",
                "branch",
                "manual",
                "reassignment",
                "ai_research",
                "ai_research_advance",
                "hs_enrichment",
                "linkedin_send_connect_v3",
                "linkedin_send_message_v3",
                "linkedin_visit_profile_v3",
                "linkedin_send_inmail_v3"
              ]
            },
            "default": null
          },
          "flowPlanIds": {
            "description": "Flow plan ids to include. Use this to narrow by source/flow context.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "requestTypes": {
            "description": "LinkedIn provider request types to include. Common outreach types are view_profile, send_connection, and send_message.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "send_connection",
                "send_message",
                "view_profile",
                "connection_withdrawal",
                "send_in_mail_message",
                "sync_relations",
                "sales_navigator_import",
                "metadata_sync",
                "plan_sync",
                "sync_unibox_account",
                "sync_unibox_conversation"
              ]
            },
            "default": null
          },
          "operationStatuses": {
            "description": "Advanced: real provider request operation statuses to include. Awaiting-requirement rows are synthetic pre-request rows and are controlled separately by includeAwaitingRequirements or awaitingRequirementsOnly.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "pending",
                "completed",
                "failed",
                "canceled"
              ]
            },
            "default": null
          },
          "searchQuery": {
            "description": "Search text over LinkedIn profile URL/name/identifier, operation id, action id, and some awaiting-row contact/company fields.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "from": {
            "description": "Created-at lower bound in UTC.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "to": {
            "description": "Created-at upper bound in UTC, exclusive.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "scheduledFrom": {
            "description": "Scheduled/estimated lower bound in UTC.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "scheduledTo": {
            "description": "Scheduled/estimated upper bound in UTC, exclusive.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "completedFrom": {
            "description": "Completed-at lower bound in UTC for terminal real provider requests.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "completedTo": {
            "description": "Completed-at upper bound in UTC for terminal real provider requests, exclusive.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "limit": {
            "description": "Maximum rows to return. Defaults to 20, max 100.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Pagination cursor returned by a previous list_linkedin_outreach_queue response.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "orderByScheduledAt": {
            "description": "Advanced: order pending real requests by estimated/scheduled execution time. Defaults to true.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "orderByCreatedDesc": {
            "description": "Advanced: order real request fallbacks/history by created time descending where applicable. Defaults to true.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "includeAwaitingRequirements": {
            "description": "Advanced: include synthetic pre-provider-request blocker rows in a mixed result. The all and diagnostic_all views set this automatically.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "awaitingRequirementsOnly": {
            "description": "Advanced: return only synthetic pre-provider-request blocker rows. The review_required view sets this automatically.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_linkedin_outreach_queue_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "view": {
            "type": "string",
            "enum": [
              "in_queue",
              "review_required",
              "done",
              "canceled",
              "failed",
              "all",
              "custom",
              "active",
              "diagnostic_all"
            ]
          },
          "queue": {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "enum": [
                        "real_request",
                        "awaiting_requirement"
                      ]
                    },
                    "request": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "linAccountId": {
                          "type": "string"
                        },
                        "operationId": {
                          "type": "string"
                        },
                        "operationStatus": {
                          "type": "string",
                          "enum": [
                            "pending",
                            "completed",
                            "failed",
                            "canceled"
                          ]
                        },
                        "operationCancelReason": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "unknown",
                            "email_bounced",
                            "another_branch_selected",
                            "flow_achieved",
                            "flow_canceled",
                            "action_canceled",
                            "action_failed",
                            "exclusion",
                            null
                          ]
                        },
                        "operationCancelDetails": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "operationErrorId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "operationErrorCode": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "operationErrorMessage": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "operationErrorDetails": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "operationStartedUtc": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        },
                        "operationFinishedUtc": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        },
                        "operationFailsStreak": {
                          "type": "integer"
                        },
                        "linProfileUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "linProfileIdentifier": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "scheduledAt": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        },
                        "completedAt": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        },
                        "requestType": {
                          "type": "string",
                          "enum": [
                            "send_connection",
                            "send_message",
                            "view_profile",
                            "connection_withdrawal",
                            "send_in_mail_message",
                            "sync_relations",
                            "sales_navigator_import",
                            "metadata_sync",
                            "plan_sync",
                            "sync_unibox_account",
                            "sync_unibox_conversation"
                          ]
                        },
                        "actionId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "created": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "updated": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        },
                        "text": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "invitationId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "enrollmentId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "flowPlanId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "flowPlanName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "audienceId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "audienceName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "teamId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "linProfileFullName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "linProfileImgUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "companyName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "companyDomain": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "senderName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "isAwaitingRequirement": {
                          "type": "boolean",
                          "default": false
                        },
                        "awaitingRequirementId": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "default": null
                        },
                        "awaitingRequirementType": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "available_email_account",
                            "available_lin_account",
                            "section_approval",
                            "task_in_status",
                            "available_credits",
                            "waiting_for_earlier_social_actions_to_finish",
                            "paid_plan_required",
                            "in_mail_credits_available",
                            "lin_unipile_queue_priority_empty",
                            null
                          ],
                          "default": null
                        },
                        "awaitingRequirementStatus": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "default": null
                        },
                        "awaitingRequirementDisplayName": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "default": null
                        },
                        "awaitingRequirementMessage": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "default": null
                        },
                        "awaitingRequirementNextCheckAt": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time",
                          "default": null
                        },
                        "priority": {
                          "type": "integer",
                          "default": 0
                        },
                        "requestGate": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "properties": {
                            "blockReason": {
                              "type": "string",
                              "enum": [
                                "human_delay",
                                "cooldown",
                                "outside_working_hours",
                                "daily_limit_reached",
                                "temporary_provider_limit",
                                "required_profile_view_limit_reached"
                              ]
                            },
                            "blockReasonLabel": {
                              "type": "string"
                            },
                            "message": {
                              "type": "string"
                            },
                            "details": {
                              "type": "object",
                              "properties": {
                                "cooldownSeconds": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "default": null
                                },
                                "lastCompletedAtUtc": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "format": "date-time",
                                  "default": null
                                },
                                "nextAllowedAtUtc": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "format": "date-time",
                                  "default": null
                                },
                                "timeZone": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "default": null
                                },
                                "nextWorkingAtUtc": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "format": "date-time",
                                  "default": null
                                },
                                "metric": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "default": null
                                },
                                "requestType": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "enum": [
                                    "send_connection",
                                    "send_message",
                                    "view_profile",
                                    "connection_withdrawal",
                                    "send_in_mail_message",
                                    "sync_relations",
                                    "sales_navigator_import",
                                    "metadata_sync",
                                    "plan_sync",
                                    "sync_unibox_account",
                                    "sync_unibox_conversation",
                                    null
                                  ],
                                  "default": null
                                },
                                "usage": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "default": null
                                },
                                "limit": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "default": null
                                },
                                "nextAvailableAtUtc": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "format": "date-time",
                                  "default": null
                                },
                                "providerLimitWindowDays": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "default": null
                                },
                                "providerRetryAfterUtc": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "format": "date-time",
                                  "default": null
                                }
                              }
                            },
                            "expectedResolutionAtUtc": {
                              "type": "string",
                              "format": "date-time"
                            },
                            "nextRecheckAtUtc": {
                              "type": "string",
                              "format": "date-time"
                            }
                          },
                          "required": [
                            "blockReason",
                            "blockReasonLabel",
                            "message",
                            "details",
                            "expectedResolutionAtUtc",
                            "nextRecheckAtUtc"
                          ],
                          "default": null
                        },
                        "conversationId": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "default": null
                        },
                        "estimateStatus": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "available",
                            "soon",
                            "later",
                            "account_disconnected",
                            "scheduler_not_configured",
                            null
                          ],
                          "default": null
                        },
                        "estimatedExecutionTimeUtc": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time",
                          "default": null
                        },
                        "estimateCalculatedAtUtc": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time",
                          "default": null
                        },
                        "awaitingRequirementTaskId": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "default": null
                        }
                      },
                      "required": [
                        "id",
                        "linAccountId",
                        "operationId",
                        "operationStatus",
                        "operationCancelReason",
                        "operationCancelDetails",
                        "operationErrorId",
                        "operationErrorCode",
                        "operationErrorMessage",
                        "operationErrorDetails",
                        "operationStartedUtc",
                        "operationFinishedUtc",
                        "operationFailsStreak",
                        "linProfileUrl",
                        "linProfileIdentifier",
                        "scheduledAt",
                        "completedAt",
                        "requestType",
                        "actionId",
                        "created",
                        "updated",
                        "text",
                        "invitationId",
                        "enrollmentId",
                        "flowPlanId",
                        "flowPlanName",
                        "audienceId",
                        "audienceName",
                        "teamId",
                        "linProfileFullName",
                        "linProfileImgUrl",
                        "companyName",
                        "companyDomain",
                        "senderName"
                      ]
                    }
                  },
                  "required": [
                    "kind",
                    "request"
                  ]
                }
              },
              "cursor": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "totalCount": {
                "type": "integer"
              }
            },
            "required": [
              "items",
              "cursor",
              "totalCount"
            ]
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nextSteps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary",
          "view",
          "queue",
          "warnings",
          "nextSteps"
        ]
      },
      "list_linkedin_team_connections_input": {
        "type": "object",
        "properties": {
          "mode": {
            "description": "Lookup mode.\n\n- Omit or set auto for all known team connections, or when filters make the intent obvious.\n- Use connections_of_team_member for \u0026#39;show Michael\u0026#39;s connections\u0026#39;.\n- Use team_members_connected_to_person for \u0026#39;who on our team is connected to Michael\u0026#39;.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "auto",
              "connections_of_team_member",
              "team_members_connected_to_person",
              null
            ],
            "default": null
          },
          "ownerUserId": {
            "description": "FirstTouch team member user id whose LinkedIn account owns the relation list. Use for connections_of_team_member, or to narrow team_members_connected_to_person.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "ownerSearch": {
            "description": "Search team member/account owner by name, email, LinkedIn account name, or LinkedIn public identifier. Example: Michael Kurson.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "linAccountId": {
            "description": "Exact FirstTouch LinkedIn account id to read or narrow by.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "connectedPersonLinkedInUrl": {
            "description": "Connected person\u0027s LinkedIn profile URL.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "connectedPersonPublicIdentifier": {
            "description": "Connected person\u0027s LinkedIn public identifier, for example michael-kurson.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "connectedPersonName": {
            "description": "Connected person\u0027s first name, last name, or full name. Example: Michael Kurson.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "searchQuery": {
            "description": "Generic search over saved connected-person name, headline, LinkedIn URL, and public identifier.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "headlineKeywords": {
            "description": "Use for requests about the type of connection rather than a known individual: role, job title, profession, department, or specialty.\n\n- First extract the role-bearing word or phrase; generic group nouns such as person, people, contact, connection, and list are not search keywords.\n- When the user asks for \u0026#39;Sales Persons\u0026#39;, \u0026#39;people in sales\u0026#39;, \u0026#39;CFOs\u0026#39;, \u0026#39;marketing leaders\u0026#39;, or \u0026#39;React developers\u0026#39;, populate this argument before calling; do not issue an unfiltered request.\n- Supply up to nine precise literal title alternatives plus one broad, meaningful role fallback, with ten keywords maximum.\n- A connection matches when its saved headline contains any alternative, case-insensitively.\n- Put the user\u0026#39;s direct phrase first because it ranks ahead of alternative-only matches, and put the broad fallback last.\n- For \u0026#39;Sales Persons\u0026#39;, sales is the role-bearing term and the array MUST include \u0026#39;sales\u0026#39;, not only \u0026#39;salesperson\u0026#39;.\n- Example: [\u0026#39;sales person\u0026#39;, \u0026#39;salesperson\u0026#39;, \u0026#39;sales agent\u0026#39;, \u0026#39;sales representative\u0026#39;, \u0026#39;account executive\u0026#39;, \u0026#39;business development representative\u0026#39;, \u0026#39;sales\u0026#39;].\n- Do not submit weak standalone words such as \u0026#39;person\u0026#39;, \u0026#39;manager\u0026#39;, or \u0026#39;director\u0026#39;.\n- Include an acronym only alongside its expanded title.\n- Leave mode as auto unless also narrowing by an owner.\n- Do not put these alternatives in searchQuery; searchQuery is a separate generic literal filter and combines with this filter.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "connectedFromUtc": {
            "description": "Inclusive lower bound for when the LinkedIn connection was made, in ISO 8601 UTC form with an explicit offset.\n\n- Use this when the user asks for connections from/since a date or period.\n- For \u0026#39;last week\u0026#39;, use the prior Monday at 00:00 UTC.\n- Connections without a saved LinkedIn connection date are excluded when this filter is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "connectedToUtc": {
            "description": "Exclusive upper bound for when the LinkedIn connection was made, in ISO 8601 UTC form with an explicit offset.\n\n- Use with connectedFromUtc for a period.\n- For \u0026#39;last week\u0026#39;, use the current Monday at 00:00 UTC.\n- Connections without a saved LinkedIn connection date are excluded when this filter is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "limit": {
            "description": "Maximum rows to return. Defaults to 20, max 100.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Pagination cursor returned by a previous list_linkedin_team_connections response.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_linkedin_team_connections_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "mode": {
            "type": "string",
            "enum": [
              "auto",
              "connections_of_team_member",
              "team_members_connected_to_person"
            ]
          },
          "connections": {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "owner": {
                      "type": "object",
                      "properties": {
                        "userId": {
                          "description": "FirstTouch team member user id that owns the LinkedIn account.",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "teamMembershipId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "name": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "email": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "userId",
                        "teamMembershipId",
                        "name",
                        "email"
                      ]
                    },
                    "linkedinAccount": {
                      "type": "object",
                      "properties": {
                        "linAccountId": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "publicIdentifier": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "relationsSyncedAtUtc": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        },
                        "relationsSyncPending": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "linAccountId",
                        "name",
                        "status",
                        "publicIdentifier",
                        "relationsSyncedAtUtc",
                        "relationsSyncPending"
                      ]
                    },
                    "connection": {
                      "type": "object",
                      "properties": {
                        "relationId": {
                          "type": "string"
                        },
                        "publicIdentifier": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "publicProfileUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "firstName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "lastName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "fullName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "headline": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "memberId": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "memberUrn": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "connectionUrn": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "profilePictureUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "createdAtUnix": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        },
                        "connectedAtUtc": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        },
                        "lastSyncedAtUtc": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        }
                      },
                      "required": [
                        "relationId",
                        "publicIdentifier",
                        "publicProfileUrl",
                        "firstName",
                        "lastName",
                        "fullName",
                        "headline",
                        "memberId",
                        "memberUrn",
                        "connectionUrn",
                        "profilePictureUrl",
                        "createdAtUnix",
                        "connectedAtUtc",
                        "lastSyncedAtUtc"
                      ]
                    }
                  },
                  "required": [
                    "owner",
                    "linkedinAccount",
                    "connection"
                  ]
                }
              },
              "cursor": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "totalCount": {
                "type": "integer"
              }
            },
            "required": [
              "items",
              "cursor",
              "totalCount"
            ]
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nextSteps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary",
          "mode",
          "connections",
          "warnings",
          "nextSteps"
        ]
      },
      "list_linkedin_unibox_conversations_input": {
        "type": "object",
        "properties": {
          "searchQuery": {
            "description": "Search participant name, LinkedIn URL, company name, company domain, or latest-message preview.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "linAccountId": {
            "description": "Exact accessible LinkedIn sender account id. Omit for the caller\u0027s accessible sender scope.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "tags": {
            "description": "Filter by hot and/or nurture. Multiple values use OR semantics.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "hot",
                "nurture"
              ]
            },
            "default": null
          },
          "unreadOnly": {
            "description": "When true, return only unread conversations. Omit or use false for both read and unread conversations.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "archived": {
            "description": "When true, return archived conversations only; false returns non-archived only; omit for both.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "fromUtc": {
            "description": "Inclusive lower latest-message timestamp in ISO 8601 UTC form with an explicit offset.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "toUtc": {
            "description": "Inclusive upper latest-message timestamp in ISO 8601 UTC form with an explicit offset.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "limit": {
            "description": "Maximum conversations to return. Defaults to 20 and is capped at 100.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Opaque nextCursor returned by a previous list_linkedin_unibox_conversations response.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_linkedin_unibox_conversations_output": {},
      "list_purchases_input": {
        "type": "object",
        "properties": {
          "fromUtc": {
            "description": "Optional inclusive UTC lower bound for purchase creation time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "toUtc": {
            "description": "Optional inclusive UTC upper bound for purchase creation time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "limit": {
            "description": "Maximum purchases to return. Defaults to 10 and is capped at 50.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Cursor returned by a previous list_purchases call.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_purchases_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "teamId": {
            "type": "string"
          },
          "effectiveFilters": {
            "type": "object",
            "properties": {
              "fromUtc": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "toUtc": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            },
            "required": [
              "fromUtc",
              "toUtc"
            ]
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "created": {
                  "type": "string",
                  "format": "date-time"
                },
                "amount": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "subscription",
                    "credits",
                    "manual"
                  ]
                },
                "stripeInvoiceId": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "stripeSessionId": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "stripeCustomerId": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "id",
                "created",
                "amount",
                "currency",
                "source",
                "stripeInvoiceId",
                "stripeSessionId",
                "stripeCustomerId",
                "description"
              ]
            }
          },
          "cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "totalCount": {
            "type": "integer"
          }
        },
        "required": [
          "summary",
          "teamId",
          "effectiveFilters",
          "items",
          "cursor",
          "totalCount"
        ]
      },
      "list_social_engagement_engagers_input": {
        "type": "object",
        "properties": {
          "linkedinUrl": {
            "description": "Monitored LinkedIn profile or company page URL whose post engagers should be listed.",
            "type": [
              "string",
              "null"
            ]
          },
          "limit": {
            "description": "Maximum rows to return. Defaults to 20, max 100.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Pagination cursor returned by a previous list_social_engagement_engagers response.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "uniqueOnly": {
            "description": "When true, returns one latest row per engager profile. Defaults to true.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "linkedinUrl"
        ]
      },
      "list_social_engagement_engagers_output": {},
      "list_social_engagement_monitored_profiles_input": {
        "type": "object",
        "properties": {
          "status": {
            "description": "Optional monitored profile status filter: active or inactive.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "active",
              "inactive",
              null
            ],
            "default": null
          }
        }
      },
      "list_social_engagement_monitored_profiles_output": {},
      "list_team_members_input": {
        "type": "object",
        "properties": {
          "isEmailConnected": {
            "description": "When true, return only members with at least one active connected email account. When false, return only members without one. Omit for both.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "isLinkedinConnected": {
            "description": "When true, return only members with an alive LinkedIn account. When false, return only members without an alive LinkedIn account. Omit for both.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "isLinkedinReady": {
            "description": "When true, return only members whose alive LinkedIn account has completed relations sync. When false, return only members that are not LinkedIn-ready. Omit for both.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_team_members_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "userId": {
                  "type": "string"
                },
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "email": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "role": {
                  "type": "string"
                },
                "isOwner": {
                  "type": "boolean"
                },
                "access": {
                  "type": "string"
                },
                "emailAccounts": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "userId": {
                        "type": "string"
                      },
                      "teamMembershipId": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "sourceAccountId": {
                        "type": "string"
                      },
                      "email": {
                        "type": "string"
                      },
                      "source": {
                        "type": "string",
                        "enum": [
                          "gmail",
                          "outlook"
                        ]
                      },
                      "isActive": {
                        "type": "boolean"
                      },
                      "isDefault": {
                        "type": "boolean"
                      },
                      "subStatus": {
                        "type": "string",
                        "enum": [
                          "unknown",
                          "enabled",
                          "disconnected_scopes_updated",
                          "disconnected_token_expired_or_revoked",
                          "disconnected_by_user",
                          "disconnected_due_to_new_outlook_app",
                          "disconnected_due_to_inbox_sync_failed",
                          "disconnected_due_to_external_message_sync_failed",
                          "disconnected_due_to_bounce_sync_failed",
                          "disconnected_by_admin"
                        ]
                      },
                      "schedulerId": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "sendLimit": {
                        "type": "integer"
                      },
                      "updated": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "format": "date-time"
                      },
                      "created": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "required": [
                      "id",
                      "userId",
                      "teamMembershipId",
                      "sourceAccountId",
                      "email",
                      "source",
                      "isActive",
                      "isDefault",
                      "subStatus",
                      "schedulerId",
                      "sendLimit",
                      "updated",
                      "created"
                    ]
                  }
                },
                "linkedinAccount": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "fullName": {
                      "type": "string"
                    },
                    "unipileAccountId": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "alive",
                        "disconnected_by_system",
                        "action_required",
                        "restricted",
                        "connecting",
                        "disconnected_by_user"
                      ]
                    },
                    "created": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "limits": {
                      "type": "object",
                      "properties": {
                        "connectionSendLimit": {
                          "type": "integer"
                        },
                        "messageSendLimit": {
                          "type": "integer"
                        },
                        "inMailSendLimit": {
                          "type": "integer"
                        },
                        "profileVisitLimit": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "connectionSendLimit",
                        "messageSendLimit",
                        "inMailSendLimit",
                        "profileVisitLimit"
                      ]
                    },
                    "planType": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "enum": [
                        "free",
                        "premium",
                        "sales_navigator",
                        null
                      ]
                    },
                    "profilePictureUrl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "isCheckpoint": {
                      "type": "boolean"
                    },
                    "checkpointType": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "proxyCountryCode": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "connectionStartedAt": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "relationsSyncPending": {
                      "type": "boolean"
                    },
                    "relationsSyncAttempts": {
                      "type": "integer"
                    },
                    "relationsSyncLastAttemptUtc": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "relationsSyncedAtUtc": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "relationsPartiallySynced": {
                      "type": "boolean"
                    },
                    "relationsSyncDisabled": {
                      "type": "boolean"
                    },
                    "manualReplySendMode": {
                      "type": "string",
                      "enum": [
                        "instant",
                        "scheduled"
                      ]
                    },
                    "instantManualReplySendLimit": {
                      "type": "integer",
                      "default": 200
                    },
                    "providerId": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "default": null
                    },
                    "publicIdentifier": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "default": null
                    },
                    "connectionSendPausedUntilUtc": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time",
                      "default": null
                    },
                    "connectionSendPauseReason": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "default": null
                    },
                    "connectionSendPauseDetails": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "default": null
                    },
                    "isConnectionSendPaused": {
                      "type": "boolean",
                      "default": false
                    },
                    "senderEntitlementDeleteAfterUtc": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time",
                      "default": null
                    },
                    "disconnectCleanupAfterUtc": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time",
                      "default": null
                    },
                    "linSimAccId": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "default": null
                    }
                  },
                  "required": [
                    "id",
                    "fullName",
                    "unipileAccountId",
                    "status",
                    "created",
                    "limits",
                    "planType",
                    "profilePictureUrl",
                    "isCheckpoint",
                    "checkpointType",
                    "proxyCountryCode",
                    "connectionStartedAt",
                    "relationsSyncPending",
                    "relationsSyncAttempts",
                    "relationsSyncLastAttemptUtc",
                    "relationsSyncedAtUtc",
                    "relationsPartiallySynced",
                    "relationsSyncDisabled",
                    "manualReplySendMode"
                  ]
                },
                "capabilities": {
                  "type": "object",
                  "properties": {
                    "isEmailConnected": {
                      "type": "boolean"
                    },
                    "isLinkedinConnected": {
                      "type": "boolean"
                    },
                    "isLinkedinReady": {
                      "type": "boolean"
                    },
                    "isEmailSendingEnabled": {
                      "type": "boolean"
                    },
                    "isLinkedinActionsEnabled": {
                      "type": "boolean"
                    },
                    "isCallTasksEnabled": {
                      "type": "boolean"
                    },
                    "isManualTasksEnabled": {
                      "type": "boolean"
                    },
                    "isApprovalEnabled": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "isEmailConnected",
                    "isLinkedinConnected",
                    "isLinkedinReady",
                    "isEmailSendingEnabled",
                    "isLinkedinActionsEnabled",
                    "isCallTasksEnabled",
                    "isManualTasksEnabled",
                    "isApprovalEnabled"
                  ]
                }
              },
              "required": [
                "userId",
                "name",
                "email",
                "role",
                "isOwner",
                "access",
                "emailAccounts",
                "linkedinAccount",
                "capabilities"
              ]
            }
          },
          "uiLinks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "label",
                "url",
                "reason"
              ]
            }
          }
        },
        "required": [
          "summary",
          "items",
          "uiLinks"
        ]
      },
      "list_user_tasks_input": {
        "type": "object",
        "properties": {
          "limit": {
            "description": "Maximum tasks to return. Defaults to 20, max 20.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "cursor": {
            "description": "Cursor returned by a previous list_user_tasks call.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "statuses": {
            "description": "Task statuses to include. Defaults to todo.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "todo",
                "done",
                "canceled"
              ]
            },
            "default": null
          },
          "types": {
            "description": "Exact stored task types: call, manual, section_approval.\n\n- All three can contain tasks for the user to review or act on: call requires logging a call, manual requires marking manual work done, and section_approval requires reviewing and approving grouped actions.\n- types is an exact task-kind filter.\n- For a request for tasks the user can approve, review, or act on, omit types so all task kinds are returned.\n- Use types only when the caller explicitly requests a particular task kind.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "enum": [
                "call",
                "manual",
                "section_approval"
              ]
            },
            "default": null
          },
          "searchQuery": {
            "description": "Search text matched against prospect first name, last name, company name, and company domain.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "assignedUserId": {
            "description": "Optional assigned user id. Use the exact current userId from get_current_user or a userId returned by list_team_members. Defaults to the current MCP user.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "includeTeamTasks": {
            "description": "When true, preview tasks owned by active members of the current team, matching the UI\u0027s all-team task scope.",
            "type": "boolean",
            "default": false
          },
          "flowIds": {
            "description": "Optional flow/enrollment ids to filter tasks. Use exact enrollmentId values returned by add_dynamic_action, list_enrollments, list_flow_plan_enrollments, or get_flow_enrollment; do not pass flowPlanId here.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "taskIds": {
            "description": "Optional task ids to fetch directly. Example item: task_123. Use taskId values returned by list_user_tasks, preview_task, get_flow_enrollment, or get_flow_workspace required actions.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "fromUtc": {
            "description": "Created-from timestamp in UTC.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "toUtc": {
            "description": "Created-to timestamp in UTC.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "email": {
            "description": "Prospect email filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "firstName": {
            "description": "Prospect first name filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "lastName": {
            "description": "Prospect last name filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "companyDomain": {
            "description": "Company domain filter.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "list_user_tasks_output": {},
      "manage_flow_publication_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace; do not use the read-only MCP Dynamic Actions flowPlanId here.",
            "type": [
              "string",
              "null"
            ]
          },
          "action": {
            "description": "Publication action: publish or unpublish.",
            "type": "string",
            "enum": [
              "unknown",
              "publish",
              "unpublish"
            ]
          },
          "returnWorkspace": {
            "description": "Include a workspace snapshot in the response.",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "flowPlanId",
          "action"
        ]
      },
      "manage_flow_publication_output": {},
      "manage_social_engagement_monitored_profile_input": {
        "type": "object",
        "properties": {
          "action": {
            "description": "Profile management action: add, activate, deactivate, or delete.",
            "type": "string",
            "enum": [
              "unknown",
              "add",
              "activate",
              "deactivate",
              "delete"
            ]
          },
          "linkedinUrl": {
            "description": "LinkedIn profile or company page URL to monitor. Required for action=add.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "loadHistory": {
            "description": "When action=add, load recent available engagement history for the profile. Defaults to false.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "profileId": {
            "description": "Monitored profile id returned by list_social_engagement_monitored_profiles. Required for activate, deactivate, and delete.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "enableSocialEngagement": {
            "description": "When action=add, set true to enable Social Engagement in the same tool after adding the profile. This starts collection; collected engagers enter the linked flow after it is published. Defaults to false.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "action"
        ]
      },
      "manage_social_engagement_monitored_profile_output": {},
      "preview_hubspot_list_input": {
        "type": "object",
        "properties": {
          "listId": {
            "description": "HubSpot contact list id. Use the exact listId/id returned by list_hubspot_lists; do not pass an audienceId or flowPlanId here.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "listId"
        ]
      },
      "preview_hubspot_list_output": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "listId": {
            "type": "string"
          },
          "preview": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "hubspotUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "linkedinUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "firstName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "lastName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "company": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "email": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "phone": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "id",
                "hubspotUrl",
                "linkedinUrl",
                "firstName",
                "lastName",
                "company",
                "email",
                "phone"
              ]
            }
          },
          "uiLinks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "label",
                "url",
                "reason"
              ]
            }
          }
        },
        "required": [
          "summary",
          "listId",
          "preview",
          "uiLinks"
        ]
      },
      "preview_task_input": {
        "type": "object",
        "properties": {
          "taskId": {
            "description": "Task id returned by list_user_tasks or flow workspace required actions. Example: task_123. Use a taskId value, not actionId or enrollmentId.",
            "type": [
              "string",
              "null"
            ]
          },
          "includeProperties": {
            "description": "When false, return task.properties as an empty array.\n\n- Defaults to true for explicit single-task preview.\n- task.properties is the task PropertyValueDto[] used for data variables and readiness checks, including prospect, company, routing, and enriched values when present.",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "taskId"
        ]
      },
      "preview_task_output": {},
      "reenroll_flow_enrollments_input": {
        "type": "object",
        "properties": {
          "queueItemIds": {
            "description": "Enrollment queue item ids to reenroll. Use exact queueItemId values returned by validate_flow_reenroll or list_flow_plan_enrollments; do not pass enrollmentId here.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "overrides": {
            "description": "Field overrides shared by all reenrolled items.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "companyDomain": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "companyLinkedinUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "prospectEmail": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "prospectFirstName": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "prospectLastName": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "prospectLinkedinUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "prospectPhone": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "companyDomain",
              "companyLinkedinUrl",
              "prospectEmail",
              "prospectFirstName",
              "prospectLastName",
              "prospectLinkedinUrl",
              "prospectPhone"
            ],
            "default": null
          },
          "itemsOverride": {
            "description": "Full item overrides for reenroll.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "queueItemId": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "overrides": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "companyDomain": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "companyLinkedinUrl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "prospectEmail": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "prospectFirstName": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "prospectLastName": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "prospectLinkedinUrl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "prospectPhone": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "companyDomain",
                    "companyLinkedinUrl",
                    "prospectEmail",
                    "prospectFirstName",
                    "prospectLastName",
                    "prospectLinkedinUrl",
                    "prospectPhone"
                  ]
                }
              },
              "required": [
                "queueItemId",
                "overrides"
              ]
            },
            "default": null
          }
        },
        "required": [
          "queueItemIds"
        ]
      },
      "reenroll_flow_enrollments_output": {},
      "remove_dynamic_action_prospect_input": {
        "type": "object",
        "properties": {
          "enrollmentId": {
            "description": "MCP Dynamic Actions enrollment/activity id to cancel. Prefer this exact value from add_dynamic_action or find_mcp_enrollment, especially when prospectId is null.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "prospectId": {
            "description": "Persisted FirstTouch prospect id whose MCP dynamic action enrollment should be canceled.\n\n- Use only when enrollmentId is not available and this prospect has exactly one non-canceled MCP Dynamic Actions enrollment, or include with enrollmentId to validate both identify the same enrollment.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "reason": {
            "description": "Optional cancellation reason stored on the enrollment. Defaults to MCP dynamic action cleanup.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        }
      },
      "remove_dynamic_action_prospect_output": {},
      "replace_flow_root_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace; do not use the read-only MCP Dynamic Actions flowPlanId here.",
            "type": [
              "string",
              "null"
            ]
          },
          "root": {
            "description": "Complete flow root JSON. Operation/directive nodes use payload and next; branch nodes use expression, on_true, on_false, and on_null.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "id": {
                "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "type": {
                "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                "type": "string",
                "enum": [
                  "email",
                  "call",
                  "branch",
                  "manual",
                  "reassignment",
                  "ai_research",
                  "ai_research_advance",
                  "hs_enrichment",
                  "linkedin_send_connect_v3",
                  "linkedin_send_message_v3",
                  "linkedin_visit_profile_v3",
                  "linkedin_send_inmail_v3"
                ]
              },
              "delay": {
                "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "payload": {
                "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                "type": [
                  "object",
                  "null"
                ]
              },
              "next": {
                "description": "Normal linear continuation for operation/directive nodes.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "id": {
                    "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "type": {
                    "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                    "type": "string",
                    "enum": [
                      "email",
                      "call",
                      "branch",
                      "manual",
                      "reassignment",
                      "ai_research",
                      "ai_research_advance",
                      "hs_enrichment",
                      "linkedin_send_connect_v3",
                      "linkedin_send_message_v3",
                      "linkedin_visit_profile_v3",
                      "linkedin_send_inmail_v3"
                    ]
                  },
                  "delay": {
                    "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "payload": {
                    "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                    "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/payload"
                  },
                  "next": {
                    "description": "Normal linear continuation for operation/directive nodes.",
                    "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next"
                  },
                  "expression": {
                    "description": "Branch expression. Required for type=branch.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "on_true": {
                    "description": "Branch path when expression evaluates true. Used for type=branch.",
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "id": {
                        "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "type": {
                        "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                        "type": "string",
                        "enum": [
                          "email",
                          "call",
                          "branch",
                          "manual",
                          "reassignment",
                          "ai_research",
                          "ai_research_advance",
                          "hs_enrichment",
                          "linkedin_send_connect_v3",
                          "linkedin_send_message_v3",
                          "linkedin_visit_profile_v3",
                          "linkedin_send_inmail_v3"
                        ]
                      },
                      "delay": {
                        "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "payload": {
                        "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                        "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/payload"
                      },
                      "next": {
                        "description": "Normal linear continuation for operation/directive nodes.",
                        "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next"
                      },
                      "expression": {
                        "description": "Branch expression. Required for type=branch.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "on_true": {
                        "description": "Branch path when expression evaluates true. Used for type=branch.",
                        "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next/properties/on_true"
                      },
                      "on_false": {
                        "description": "Branch path when expression evaluates false. Used for type=branch.",
                        "type": [
                          "object",
                          "null"
                        ],
                        "properties": {
                          "id": {
                            "description": "Stable unique node id within this submitted flow root tree. Example: node_email_1. Choose a unique id and reuse that exact value when connecting next/on_true/on_false nodes or calling get_flow_available_variables with nodeId.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "type": {
                            "description": "Node type. The type selects the concrete payload shape; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                            "type": "string",
                            "enum": [
                              "email",
                              "call",
                              "branch",
                              "manual",
                              "reassignment",
                              "ai_research",
                              "ai_research_advance",
                              "hs_enrichment",
                              "linkedin_send_connect_v3",
                              "linkedin_send_message_v3",
                              "linkedin_visit_profile_v3",
                              "linkedin_send_inmail_v3"
                            ]
                          },
                          "delay": {
                            "description": "Delay before this node runs. Use TimeSpan strings like 00:00:00 or 2.00:00:00.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "payload": {
                            "description": "Payload JSON object for operation/directive nodes. Valid fields depend on type; call get_guide with topic=flow_plan_creation and follow this tool\u0027s input schema.",
                            "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/payload"
                          },
                          "next": {
                            "description": "Normal linear continuation for operation/directive nodes.",
                            "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next"
                          },
                          "expression": {
                            "description": "Branch expression. Required for type=branch.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "on_true": {
                            "description": "Branch path when expression evaluates true. Used for type=branch.",
                            "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next/properties/on_true"
                          },
                          "on_false": {
                            "description": "Branch path when expression evaluates false. Used for type=branch.",
                            "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next/properties/on_true/properties/on_false"
                          },
                          "on_null": {
                            "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "fail",
                              "false",
                              null
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "type"
                        ]
                      },
                      "on_null": {
                        "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "enum": [
                          "fail",
                          "false",
                          null
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "type"
                    ]
                  },
                  "on_false": {
                    "description": "Branch path when expression evaluates false. Used for type=branch.",
                    "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next/properties/on_true/properties/on_false"
                  },
                  "on_null": {
                    "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "fail",
                      "false",
                      null
                    ]
                  }
                },
                "required": [
                  "id",
                  "type"
                ]
              },
              "expression": {
                "description": "Branch expression. Required for type=branch.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "on_true": {
                "description": "Branch path when expression evaluates true. Used for type=branch.",
                "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next/properties/on_true"
              },
              "on_false": {
                "description": "Branch path when expression evaluates false. Used for type=branch.",
                "$ref": "#/components/schemas/replace_flow_root_input/properties/root/properties/next/properties/on_true/properties/on_false"
              },
              "on_null": {
                "description": "Branch null handling strategy. Used for type=branch; valid values are fail or false.",
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "fail",
                  "false",
                  null
                ]
              }
            },
            "required": [
              "id",
              "type"
            ]
          },
          "returnWorkspace": {
            "description": "Include a workspace snapshot in the response.",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "flowPlanId",
          "root"
        ]
      },
      "replace_flow_root_output": {},
      "send_linkedin_unibox_message_input": {
        "type": "object",
        "properties": {
          "conversationId": {
            "description": "Exact conversationId returned by list_linkedin_unibox_conversations or get_linkedin_unibox_conversation.",
            "type": "string"
          },
          "text": {
            "description": "Exact customer-requested or customer-approved non-empty message text to send.",
            "type": "string"
          }
        },
        "required": [
          "conversationId",
          "text"
        ]
      },
      "send_linkedin_unibox_message_output": {},
      "skip_task_input": {
        "type": "object",
        "properties": {
          "taskId": {
            "description": "Call or manual task id returned by list_user_tasks or preview_task. Example: task_123. Use a taskId value, not actionId or enrollmentId.",
            "type": [
              "string",
              "null"
            ]
          },
          "includeProperties": {
            "description": "When true, include response.preview.task.properties. Defaults to false for compact mutation responses.",
            "type": "boolean",
            "default": false
          }
        },
        "required": [
          "taskId"
        ]
      },
      "skip_task_output": {},
      "start_contact_discovery_audience_import_input": {
        "type": "object",
        "properties": {
          "audienceName": {
            "description": "Audience name to create when the import completes.",
            "type": [
              "string",
              "null"
            ]
          },
          "targetCount": {
            "description": "Total desired saved profiles, including initialProspectIds. Maximum is 100.",
            "type": [
              "integer",
              "null"
            ]
          },
          "filters": {
            "description": "Structured filters assembled directly from the user request. Use only supported fields; do not invent unsupported filters.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "country": {
                "description": "People located in this country. Use a single two-letter Alpha-2 ISO3166 code, for example us, ca, or gb.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "education_field_of_study": {
                "description": "Education fields of study to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "education_degree_name": {
                "description": "Education degree names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "education_school_name": {
                "description": "Education school names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_role_title": {
                "description": "Current role titles to include. Keep concise and human-readable, for example VP Sales or Chief Technology Officer.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "past_role_title": {
                "description": "Past role titles to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_name": {
                "description": "Current company names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_name_mode": {
                "description": "Current company name mode. Allowed values: include or exclude. Set only when a current company name filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "past_company_name": {
                "description": "Past company names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_domain": {
                "description": "Current company domains as bare domains, for example example.com. Do not infer domains unless explicitly mentioned.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "region": {
                "description": "Regions or states to include or exclude according to region_mode.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "region_mode": {
                "description": "Region mode. Allowed values: include or exclude. Set only when a region filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "city": {
                "description": "Cities to include or exclude according to city_mode.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "city_mode": {
                "description": "City mode. Allowed values: include or exclude. Set only when a city filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "headline": {
                "description": "LinkedIn headline keywords to include. Use only when the user asks for headline/profile text matching.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "summary": {
                "description": "LinkedIn summary/about keywords to include. Use only when the user asks for summary/profile text matching.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_role_before": {
                "description": "Current role start date upper bound, as an ISO8601 date such as 2019-12-30.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_role_after": {
                "description": "Current role start date lower bound, as an ISO8601 date such as 2019-12-30.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_company_profile_url": {
                "description": "Current company LinkedIn profile URLs to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_profile_url_mode": {
                "description": "Current company profile URL mode. Allowed values: include or exclude. Set only when a current company profile URL filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "past_company_profile_url": {
                "description": "Past company LinkedIn profile URLs to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_job_description": {
                "description": "Current job description keywords to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "past_job_description": {
                "description": "Past job description keywords to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "groups": {
                "description": "LinkedIn group names to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "languages": {
                "description": "Languages listed on the profile to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "interests": {
                "description": "Profile interest keywords to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "skills": {
                "description": "Profile skill keywords to include. Do not combine with skills_all_in_list.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "skills_all_in_list": {
                "description": "Skills that all must be present on the profile. Do not combine with skills.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_type": {
                "description": "Current company type. Allowed values: EDUCATIONAL, GOVERNMENT_AGENCY, NON_PROFIT, PARTNERSHIP, PRIVATELY_HELD, PUBLIC_COMPANY, SELF_EMPLOYED, or SELF_OWNED.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_company_domain_mode": {
                "description": "Current company domain mode. Allowed values: include or exclude. Set only when a current company domain filter is present.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_company_follower_count_min": {
                "description": "Minimum current company LinkedIn follower count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_follower_count_max": {
                "description": "Maximum current company LinkedIn follower count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_industry": {
                "description": "Broad current company industries to include; FirstTouch may match inferred or secondary classifications. Use current_company_primary_industry for strict company-industry requests.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_current_company_industry": {
                "description": "Current company industries to exclude from broad inferred or secondary classification matches.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_primary_industry": {
                "description": "Current company primary industries to include. Prefer this for strict company-industry requests, for example people at real estate companies. Use exact FirstTouch-supported industry values.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_current_company_primary_industry": {
                "description": "Current company primary industries to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_specialities": {
                "description": "Current company specialties/specialities to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_employee_count_min": {
                "description": "Minimum current company employee count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_employee_count_max": {
                "description": "Maximum current company employee count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_description": {
                "description": "Current company description keywords to include.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "current_company_founded_year_min": {
                "description": "Minimum current company founded year.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_founded_year_max": {
                "description": "Maximum current company founded year.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_funding_amount_min": {
                "description": "Minimum current company funding amount.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_funding_amount_max": {
                "description": "Maximum current company funding amount.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "current_company_funding_raised_after": {
                "description": "Current company funding raised after this ISO8601 date.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "current_company_funding_raised_before": {
                "description": "Current company funding raised before this ISO8601 date.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "follower_count_min": {
                "description": "Minimum profile follower count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "follower_count_max": {
                "description": "Maximum profile follower count.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "exclude_current_role_title": {
                "description": "Current role titles to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_past_role_title": {
                "description": "Past role titles to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_headline": {
                "description": "LinkedIn headline keywords to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "exclude_summary": {
                "description": "LinkedIn summary/about keywords to exclude.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            },
            "default": null
          },
          "confirmedMaxCredits": {
            "description": "Customer-confirmed maximum additional discovery credits to spend. Must be at least targetCount - distinct initialProspectIds count.",
            "type": [
              "integer",
              "null"
            ],
            "default": null
          },
          "initialProspectIds": {
            "description": "Persisted prospect ids already returned by discover_contacts and already paid for. Use exact prospectId values from discover_contacts results.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "default": null
          },
          "nextToken": {
            "description": "Pagination token returned by discover_contacts. Pass the raw nextPage value to continue after initialProspectIds; do not pass a URL.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "audienceAiContext": {
            "description": "Optional AI context to store on the created audience.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          },
          "audienceFlowPlanId": {
            "description": "Optional existing flow plan id to link to the created audience. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace.",
            "type": [
              "string",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "audienceName",
          "targetCount"
        ]
      },
      "start_contact_discovery_audience_import_output": {},
      "update_flow_plan_input": {
        "type": "object",
        "properties": {
          "flowPlanId": {
            "description": "Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace. The MCP Dynamic Actions flowPlanId is permitted only when changing its two allowed HubSpot settings.",
            "type": [
              "string",
              "null"
            ]
          },
          "flow": {
            "description": "Flow settings to update.\n\n- Omitted fields keep their current values.\n- Name-only and no-op updates preserve the current published/draft state; any configuration change pauses a published reusable flow by moving it to Draft.\n- For the MCP Dynamic Actions Flow Plan, send only mcpDynamicActionsOptions.is_enrich_hubspot and/or mcpDynamicActionsOptions.is_push_to_hubspot_tasks; the task setting updates call, manual, and approval task sync together.\n- All other fields are rejected.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "name": {
                "description": "Display name for a regular reusable Flow Plan. Omit to keep the current name. This is not allowed for the MCP Dynamic Actions Flow Plan.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "options": {
                "description": "Flow options for a regular reusable Flow Plan. Omit to keep the current options. This is not allowed for the MCP Dynamic Actions Flow Plan; use mcpDynamicActionsOptions instead.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "is_exclusion_check_required": {
                    "type": "boolean"
                  },
                  "use_hubspot_if_connected": {
                    "type": "boolean"
                  },
                  "is_click_tracking_enabled": {
                    "type": "boolean"
                  },
                  "is_open_tracking_enabled": {
                    "type": "boolean"
                  },
                  "is_enrich_phone_if_not_provided": {
                    "type": "boolean"
                  },
                  "push_call_tasks_only_if_phone_exists": {
                    "type": "boolean"
                  },
                  "ignore_personal_email_accounts": {
                    "type": "boolean"
                  },
                  "assignment_strategy": {
                    "type": "string",
                    "enum": [
                      "default",
                      "crm_company_owner",
                      "crm_contact_owner"
                    ]
                  },
                  "crm_on_empty_owner_strategy": {
                    "type": "string",
                    "enum": [
                      "ignore",
                      "process"
                    ]
                  },
                  "crm_owner_update_strategy": {
                    "type": "string",
                    "enum": [
                      "do_not_update",
                      "update_company",
                      "update_contact",
                      "update_company_and_contact"
                    ]
                  },
                  "prompt": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "is_push_to_hubspot_call_tasks": {
                    "type": "boolean"
                  },
                  "is_push_to_hubspot_manual_tasks": {
                    "type": "boolean"
                  },
                  "is_push_to_hubspot_approve_tasks": {
                    "type": "boolean"
                  },
                  "is_enrich_hubspot": {
                    "type": "boolean"
                  },
                  "is_enrich_prospects": {
                    "type": "boolean"
                  },
                  "is_enrich_companies": {
                    "type": "boolean"
                  },
                  "is_enrich_email_if_not_provided": {
                    "type": "boolean"
                  },
                  "is_track_emails_in_hubspot": {
                    "type": "boolean",
                    "default": true
                  },
                  "only_enrich_phone_if_call_task_present": {
                    "type": "boolean",
                    "default": true
                  },
                  "priority": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "default": 0
                  }
                },
                "required": [
                  "is_exclusion_check_required",
                  "use_hubspot_if_connected",
                  "is_click_tracking_enabled",
                  "is_open_tracking_enabled",
                  "is_enrich_phone_if_not_provided",
                  "push_call_tasks_only_if_phone_exists",
                  "ignore_personal_email_accounts",
                  "assignment_strategy",
                  "crm_on_empty_owner_strategy",
                  "crm_owner_update_strategy",
                  "prompt",
                  "is_push_to_hubspot_call_tasks",
                  "is_push_to_hubspot_manual_tasks",
                  "is_push_to_hubspot_approve_tasks",
                  "is_enrich_hubspot",
                  "is_enrich_prospects",
                  "is_enrich_companies",
                  "is_enrich_email_if_not_provided"
                ]
              },
              "mcpDynamicActionsOptions": {
                "description": "Shared HubSpot settings for the MCP Dynamic Actions Flow Plan.\n\n- Only is_enrich_hubspot and is_push_to_hubspot_tasks are allowed.\n- is_push_to_hubspot_tasks updates call, manual, and approval task sync together.\n- Do not use this for regular reusable Flow Plans.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "is_enrich_hubspot": {
                    "description": "Whether HubSpot contact and company records are enriched for Dynamic Actions. Defaults to the current setting when omitted.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "is_push_to_hubspot_tasks": {
                    "description": "Whether call, manual, and approval tasks from Dynamic Actions are created in HubSpot together. Defaults to the current setting when omitted.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                }
              },
              "aiQualification": {
                "description": "Flow-level AI qualification settings for reusable flows. Omit to keep the current AI qualification settings. This is not allowed for the MCP Dynamic Actions Flow Plan.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "is_enabled": {
                    "type": "boolean"
                  },
                  "threshold": {
                    "type": "integer"
                  },
                  "prospect_criteria": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "company_criteria": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "disqualify_criteria": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "is_enabled",
                  "threshold",
                  "prospect_criteria",
                  "company_criteria",
                  "disqualify_criteria"
                ]
              },
              "candidates": {
                "description": "Candidate assignees for reusable flows. Omit to keep current candidates. This is not allowed for the MCP Dynamic Actions Flow Plan.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "userId": {
                      "description": "Team member user id. Use the exact userId returned by list_team_members.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "emailAccountIds": {
                      "description": "Optional email account ids for the candidate. Example item: email_account_123. Use emailAccounts returned by list_team_members. Empty means all active inboxes for this candidate; non-empty means only the listed inboxes.",
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    }
                  },
                  "required": [
                    "userId"
                  ]
                }
              }
            }
          },
          "returnWorkspace": {
            "description": "Include a workspace snapshot in the response. For the MCP Dynamic Actions Flow Plan, this is always null because it does not use a reusable-flow workspace.",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "flowPlanId",
          "flow"
        ]
      },
      "update_flow_plan_output": {},
      "update_linkedin_unibox_conversation_state_input": {
        "type": "object",
        "properties": {
          "conversationId": {
            "description": "Exact conversationId returned by list_linkedin_unibox_conversations or get_linkedin_unibox_conversation.",
            "type": "string"
          },
          "tag": {
            "description": "Set the single tag to hot or nurture. Use none to remove the tag. Omit to preserve the current tag.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "none",
              "hot",
              "nurture",
              null
            ],
            "default": null
          },
          "isRead": {
            "description": "Set true to mark the conversation read or false to mark it unread. Omit to preserve the current read state.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          },
          "isArchived": {
            "description": "Set true to archive the conversation or false to unarchive it. Omit to preserve the current archive state.",
            "type": [
              "boolean",
              "null"
            ],
            "default": null
          }
        },
        "required": [
          "conversationId"
        ]
      },
      "update_linkedin_unibox_conversation_state_output": {},
      "validate_flow_reenroll_input": {
        "type": "object",
        "properties": {
          "queueItemIds": {
            "description": "Enrollment queue item ids to validate before reenroll. Use exact queueItemId values from list_flow_plan_enrollments, get_flow_workspace required actions, or validate_flow_reenroll; do not pass enrollmentId here.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        },
        "required": [
          "queueItemIds"
        ]
      },
      "validate_flow_reenroll_output": {},
      "write_social_engagement_config_input": {
        "type": "object",
        "properties": {
          "isEnabled": {
            "description": "Desired Social Engagement enabled state. true starts eligible monitored profiles; false suspends listening for this team\u0027s profiles.",
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "required": [
          "isEnabled"
        ]
      },
      "write_social_engagement_config_output": {}
    }
  }
}