Skip to content

Marketing Automation · Beta

Mailshake
API integration

Ship Marketing Automation features without building the integration. Full Mailshake API access via Proxy and 30+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Built for specific customer use cases. Issues are resolved quickly.

Talk to us
Mailshake

Use Cases

Why integrate with Mailshake

Common scenarios for SaaS companies building Mailshake integrations for their customers.

01

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.

02

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.

03

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.

04

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.

05

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

Ship these features with Truto + Mailshake

Concrete product features your team can ship faster by leveraging Truto’s Mailshake integration instead of building from scratch.

01

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.

02

Real-time engagement webhooks

Subscribe to opens, clicks, replies, and lead status changes so your product reacts instantly instead of polling for updates.

03

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.

04

Auto-pause on conversion

Pause individual recipients or entire campaigns automatically when a prospect books a meeting, replies, or is marked unqualified elsewhere.

05

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.

06

Bulk campaign exports for analytics

Trigger campaign exports and poll status endpoints to ingest full campaign data into your warehouse or reporting layer.

SuperAI

Mailshake AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

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.

Why Truto

Why use Truto’s MCP server for Mailshake

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 800+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with Mailshake in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Mailshake account

Use Truto’s frontend SDK to connect your customer’s Mailshake account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Mailshake

Truto’s Proxy API is a 1-to-1 mapping of the Mailshake API. You call us, we call Mailshake, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Mailshake’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Mailshake on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

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.

Mailshake

Get Mailshake integrated into your app

Our team understands what it takes to make a Mailshake integration successful. A short, crisp 30 minute call with folks who understand the problem.