---
title: Mailshake API Integration on Truto
slug: mailshake
category: Marketing Automation
canonical: "https://truto.one/integrations/detail/mailshake/"
---

# Mailshake API Integration on Truto



**Category:** Marketing Automation  
**Status:** Beta

## MCP-ready AI tools

Truto exposes 32 tools for Mailshake that AI agents can call directly.

- **list_all_mailshake_me** — Get information about the current authenticated Mailshake user via the /me endpoint, which also serves as an authentication test. Returns: object, id, teamID, teamName, isTeamAdmin, isDisabled, emailAddress, fullName, first, last, teamBlockedDate.
- **list_all_mailshake_campaigns** — List all Mailshake campaigns for a team. Returns each campaign with id, title, created, isArchived, isPaused, messages, sender, and url. An optional search filter narrows results by campaign title.
- **get_single_mailshake_campaign_by_id** — Get a single Mailshake campaign by campaignID, including its full message sequence. Returns the campaign object with id, title, created, isArchived, isPaused, messages, sender, and url. Required: campaignID. A not_found error is returned if the campaign could not be found.
- **create_a_mailshake_campaign** — Create a new campaign in Mailshake. The campaign cannot be sent until the user completes the setup wizard in Mailshake's UI, but recipients can be added immediately. Returns the created campaign object including id, title, created, isArchived, isPaused, messages, sender, and url.
- **mailshake_campaigns_pause** — Pause all sending for a Mailshake campaign immediately. Emails in a batch currently being sent will not be stopped. Returns the campaign object including id, title, isPaused, isArchived, messages, and sender. Required: campaignID.
- **mailshake_campaigns_unpause** — Resume sending for a paused Mailshake campaign. The team's sending calendar reschedules itself to account for this campaign's pending emails. Returns the campaign object including id, title, isPaused, isArchived, messages, and sender. Required: campaignID.
- **mailshake_campaigns_export** — Start an asynchronous CSV export of one or more Mailshake campaigns. Returns: isEmpty, checkStatusID, code, error, time. Required: campaignIDs, exportType. timezone defaults to UTC.
- **mailshake_campaigns_export_status** — Check the status of an asynchronous Mailshake campaign export. Returns: isFinished, csvDownloadUrl, code, error, time. When isFinished is true, csvDownloadUrl provides the downloadable CSV file. Required: statusID.
- **mailshake_recipients_add** — Add new recipients to a Mailshake campaign using listOfEmails, addresses, or csvData. Returns: code, error, time. Required: campaignID. Each campaign can hold up to 5,000 recipients; at least one of listOfEmails, addresses, or csvData must be provided.
- **mailshake_recipients_add_status** — Check the status of an asynchronous recipient import in Mailshake. Returns: isFinished, problems, code, error, time. Required: statusID.
- **list_all_mailshake_recipients** — List recipients in a Mailshake campaign with optional search and activity-based filters. Returns: object, id, emailAddress, fullName, first, last, created, isPaused, contactID, fields. Required: campaignID.
- **get_single_mailshake_recipient_by_id** — Get a single Mailshake recipient's basic information by recipient ID or campaign and email address. Returns: object, id, emailAddress, fullName, first, last, created, isPaused, contactID, fields, code, error, time. Required: recipientID, or campaignID and emailAddress. A not_found error is returned if the recipient could not be found.
- **mailshake_recipients_pause** — Pause all sending for a single Mailshake recipient in a campaign. Returns the updated Recipient object including id, emailAddress, fullName, isPaused, created, and fields. Required: campaignID, emailAddress.
- **mailshake_recipients_unpause** — Resume sending for a paused Mailshake recipient in a campaign. Returns the recipient object including id, emailAddress, fullName, isPaused, created, and fields. Required: campaignID, emailAddress. It may take up to 5 minutes for the sending calendar to reflect the change.
- **mailshake_recipients_unsubscribe** — Unsubscribe a list of email addresses from Mailshake campaigns by adding them to your team's unsubscribe list. Returns an empty 204 response on success. Required: emailAddresses.
- **mailshake_activity_sent** — List the most recently sent emails in Mailshake, including campaign sequence messages and one-off Lead Catcher replies. Returns paginated SentMessage objects with id, actionDate, recipient, campaign, type, subject, and body. Max 25 per page.
- **mailshake_activity_opens** — List recently opened emails in Mailshake. Returns paginated Open models including id, actionDate, isDuplicate, recipient, campaign, and parent. Up to 100 results per page.
- **mailshake_activity_clicks** — List the most recent link clicks in Mailshake campaigns. Returns paginated Click objects including id, link, actionDate, isDuplicate, contactID, recipient, campaign, and parent message. Max 100 per page.
- **mailshake_activity_replies** — List recent replies to your sent emails in Mailshake, including bounces, out-of-office, and unsubscribe replies. Returns paginated Reply models with id, type, subject, body, recipient, campaign, and parent message. Max 25 per page.
- **mailshake_activity_created_leads** — List the most recently created leads in Mailshake. Leads are usually created automatically by the rules configured in Lead Catcher, though users can also turn recipients into leads manually. Returns paginated Lead models with id, created, status, recipient, campaign and assignedTo. Filter with campaignID, recipientEmailAddress, assignedToEmailAddress, assignedToUserID or since.
- **mailshake_activity_lead_assignments** — List the most recently assigned leads in Mailshake. Leads are assigned by members of your team assigning them manually. Returns paginated Lead models with id, created, assignedOnDate, assignedTo, status, recipient and campaign. Filter with campaignID, recipientEmailAddress, assignedToEmailAddress, assignedToUserID or since.
- **mailshake_activity_lead_status_changes** — List the most recently updated leads in Mailshake. A lead can be opened, closed, ignored or reopened; a reopened lead shows open as its status, having previously been ignored or closed. Returns paginated Lead models with id, status, lastStatusChangeDate, recipient, campaign and assignedTo. Filter with campaignID, recipientEmailAddress, assignedToEmailAddress, assignedToUserID or since.
- **list_all_mailshake_leads** — List Mailshake leads with optional filtering by campaign, status, assignee, or search term. Returns paginated Lead objects including id, status, created, openedDate, recipient, campaign, and assignedTo.
- **get_single_mailshake_lead_by_id** — Get a single Mailshake lead. Returns the full Lead object including id, status, created, openedDate, recipient, campaign, and assignedTo. Specify one of leadID, recipientID, or emailAddress with campaignID.
- **create_a_mailshake_lead** — Create new Mailshake leads from existing campaign recipients by specifying recipientIDs, emailAddresses, or both. Returns a CreatedLeads object including leads, emailsNotFound, invalidEmails, recipientIDsNotFound, and isEmpty. Costs 25 quota units.
- **mailshake_leads_close** — Close a Mailshake lead by marking it as 'closed' or 'lost'. Returns an empty response on success. Costs 5 quota units. Defaults to 'closed' status.
- **mailshake_leads_ignore** — Ignore a Mailshake lead to mark it as not worth pursuing. Returns a LeadStatus object including status and leadID. Costs 5 quota units.
- **mailshake_leads_reopen** — Reopen a closed or ignored Mailshake lead, making it open again and available for review. Returns: status, leadID, code, error, time. Costs 5 quota units.
- **mailshake_team_list_members** — List all members of a Mailshake team. Returns paginated User models including id, emailAddress, fullName, isTeamAdmin, teamName, and teamBlockedDate.
- **list_all_mailshake_senders** — List all of a team's senders available for campaigns in Mailshake. Returns paginated Sender models including object, id, emailAddress, fromName, and created. No required parameters.
- **create_a_mailshake_push** — Create a push/webhook subscription in Mailshake to receive POST notifications for specific events such as clicks, opens, replies, and lead status changes. Returns: targetUrl, resource_url, code, error, time. Required: targetUrl, event. Costs 100 quota units.
- **delete_a_mailshake_push_by_id** — Delete a Mailshake push/webhook subscription by its target URL. Unsubscribes a push you previously created; since all subscribed pushes require a unique targetUrl, that is the only parameter needed. Returns an empty 204 response on success. Required: targetUrl.

## How it works

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

## Use cases

- **Push enriched leads into cold outreach sequences** — Lead databases and enrichment tools can let users send filtered contact lists directly into a Mailshake campaign, replacing CSV export/import flows with a native in-product action.
- **Sync outbound email activity into your CRM** — Vertical CRMs and sales platforms can surface Mailshake sends, opens, clicks, and replies on contact timelines so reps never have to context-switch between tools.
- **Auto-pause sequences when deals progress** — Sales platforms, calendar tools, and meeting schedulers can stop Mailshake outreach automatically the moment a prospect books a meeting or converts, preventing awkward follow-up emails.
- **Route Lead Catcher replies to downstream tools** — Revenue orchestration and workflow tools can capture new leads created from positive replies and hand them off to Slack alerts, pipeline boards, or CRM records in real time.
- **Analyze outbound messaging performance** — Conversational intelligence and revenue analytics platforms can ingest raw sent copy and replies to correlate messaging patterns with reply rates and meeting conversions.

## What you can build

- **Campaign picker with recipient push** — Fetch a user's active campaigns and let them add up to 5,000 recipients at a time into any selected sequence directly from your UI.
- **Real-time engagement webhooks** — Subscribe to opens, clicks, replies, and lead status changes so your product reacts instantly instead of polling for updates.
- **Bi-directional lead status sync** — Mirror lead states between your app and Mailshake by closing, ignoring, or reopening leads when reps update records on your side.
- **Auto-pause on conversion** — Pause individual recipients or entire campaigns automatically when a prospect books a meeting, replies, or is marked unqualified elsewhere.
- **Outbound activity timeline** — Pull sent, open, click, and reply activity to render a native email history feed on any contact or account record in your product.
- **Bulk campaign exports for analytics** — Trigger campaign exports and poll status endpoints to ingest full campaign data into your warehouse or reporting layer.

## FAQs

### How do end users authenticate their Mailshake account?

Mailshake uses API key authentication. Your users generate a key from their Mailshake account settings and paste it into your product's connection flow, which Truto securely stores and injects into every API call.

### Should we use webhooks or polling for activity data?

Webhooks are strongly recommended. Use create_a_mailshake_push to subscribe to opens, clicks, replies, and lead events. Mailshake's API is quota-based, so webhooks are far more efficient than polling activity endpoints repeatedly.

### How many recipients can we add to a campaign at once?

The mailshake_recipients_add endpoint accepts up to 5,000 recipients per call, either as a raw JSON array or as base64-encoded CSV data, including custom fields for personalization.

### What's the difference between Recipients and Leads in Mailshake?

Recipients are prospects enrolled in a campaign sequence. Leads are created when a recipient replies (typically positively) and enter Lead Catcher. They're separate objects with different endpoints — recipients can be paused/unsubscribed, while leads can be closed, ignored, or reopened.

### Can we stop outreach to a specific person without affecting the whole campaign?

Yes. Use mailshake_recipients_pause or mailshake_recipients_unsubscribe to halt messages to a single prospect, while the rest of the campaign continues sending to other recipients.

### How fresh is the activity data available through the API?

Activity endpoints (sent, opens, clicks, replies) return events as they're recorded in Mailshake. For near real-time freshness, subscribe to webhooks via create_a_mailshake_push rather than polling, since polling consumes quota and introduces lag.

## Related reading

- [Connect Mailshake to ChatGPT: Manage Campaigns and Monitor Activity](https://truto.one/blog/connect-mailshake-to-chatgpt-manage-campaigns-and-monitor-activity/) — Learn how to connect Mailshake to ChatGPT using an auto-generated MCP server to manage sales campaigns, add recipients, and monitor activity.
- [Connect Mailshake to Claude: Automate Leads and Sales Engagement](https://truto.one/blog/connect-mailshake-to-claude-automate-leads-and-sales-engagement/) — A definitive engineering guide to connecting Mailshake to Claude via MCP. Learn how to securely automate campaigns, lead management, and email outreach.
- [Connect Mailshake to AI Agents: Orchestrate Outreach and Lead Flow](https://truto.one/blog/connect-mailshake-to-ai-agents-orchestrate-outreach-and-lead-flow/) — Learn how to connect Mailshake to AI agents using Truto's /tools endpoint. Bind Mailshake tools to LLMs for autonomous outreach and lead management workflows.
