turboSMTP logo

turboSMTP API + MCP (2026): v2 ships, official MCP server does not

Last verified Sep 14, 2026

turboSMTP ships a documented HTTP API alongside its relay: v2, described by a public OpenAPI 3.1.0 specification, with one sending endpoint and a management surface covering analytics, suppressions, subaccounts and validation. Five official SDKs are announced and four are published. The MCP story needs care: turboSMTP has documented an official @turbosmtp/mcp-server, named its tools and environment variables, and has not shipped it. Everything installable today is a community wrapper or a brokered surface.

At a glance

v2
API version
OpenAPI 3.1.0, JSON only. v1 discontinued April 1, 2022.

4 of 5
Official SDKs shipping
C#, PHP, Python, Node/TypeScript published. Go announced, not released.

None
Official MCP server
Documented and named, still in development. Community and brokered only.

MCP integration in 2026

Model Context Protocol gives an AI agent typed, permissioned access to a sending platform instead of a raw API key and a curl template. For a transactional relay the useful tools are narrow: send a message, read delivery metrics, check domain authentication. turboSMTP has specified exactly those in public, and has not shipped the server that implements them.

i

No official MCP server is installable today

turboSMTP’s developers hub documents a planned @turbosmtp/mcp-server – run with npx, configured through TURBOSMTP_API_KEY and an optional TURBOSMTP_READ_ONLY flag, speaking JSON-RPC 2.0 over stdio, exposing send_transactional_email, fetch_delivery_metrics, validate_contact_list and audit_domain_authentication. The page states the server is in development, installation instructions pending release. Treat any tutorial offering an install command as fabricated until the npm package resolves.

Available MCP servers

Several listings call themselves “the turboSMTP MCP server” and only one is code you can run. Glama, mcp.so and MCPMarket all index the same community repository. Distinct implementations only:

Why buyers should care

Directory counts mislead here: the first-party entry is a specification, not a package, and most listings index one small Node repository. Asked “can an agent send through this account under a scoped credential today”, the honest answer is yes through Zapier, yes through a self-hosted community server if you read its code first, and not yet through anything first-party, where Brevo and MailerSend give you a supported upgrade path. Second-order risk: one credential pair covers the relay as well as the API, so any MCP server you hand a key to can also open an authenticated SMTP session. Scope with a subaccount, not with hope.

turboSMTP API essentials

The API is small by design: one endpoint sends mail, everything else reports on it or manages the account around it. The fact that trips people up is that sending and management live on different hosts.

Sending base URLhttps://api.turbo-smtp.com/api/v2
Sending base URL (EU)https://api.eu.turbo-smtp.com/api/v2
Management base URLhttps://pro.api.serversmtp.com/api/v2
Versionv2, OpenAPI 3.1.0 CURRENT
Response formatJSON
Sending endpointPOST /mail/send – the only one
PaginationOffset style: page and limit. No cursors, no link headers.
Date filteringfrom / to in yyyy-mm-dd, plus timezone, filter_by, order_by, ordertype, smart_search
Max message size24 MB (OpenAPI spec) vs 30 MB (FAQ, relay path)
Message handlemid, returned by /mail/send and used for per-message lookup

The domain split is real, not a spec typo: the company markets on serversmtp.com, sending hosts live on turbo-smtp.com, management sits on pro.api.serversmtp.com. Configure two base URLs and move on. The EU host is confirmed by turboSMTP’s API reference and the Symfony Mailer bridge, but no public page explains how an account is placed in that region, confirm with support before hardcoding it into a deployment with residency obligations.

Authentication methods

Two credential shapes exist and they are not interchangeable. Getting the split wrong produces a 401 on the one call that matters.

Consumer Key and Consumer Secret headers

The production method. Two custom headers on every request, consumerKey and consumerSecret, generated in the dashboard under API Keys. Permanent until revoked, and the only credential accepted by POST /mail/send. It is also the pair used for SMTP AUTH against pro.turbo-smtp.com – one credential, two protocols, and the secret is shown exactly once, so capture it before closing the dialog.

Bearer API key from POST /authorize

The management method. POST /authorize exchanges account credentials for a token passed as an Authorization header, valid 2 hours by default or never expiring with no_expire: true; POST /deauthorize revokes it. This token drives analytics, suppressions, subaccounts and tools, and is rejected by the sending endpoint. The authorize endpoint is itself rate-limited, and the spec instructs callers to cache and reuse the token rather than minting one per request.

One key, two attack surfaces

Because the Consumer pair authenticates both the API and the relay, revoking a key with DELETE /api/v2/user/consumerKeys/{key} silently breaks every mail client still using it, inventory the WordPress installs, CRMs and desktop clients holding it before you rotate. The converse is worse: a key leaked in a client-side bundle lets an attacker open an authenticated SMTP session and send from your verified domain. Mint a distinct key per consumer, and use subaccounts where you would otherwise reach for scopes; the primary key has no scoped-permission model.

Rate limits

This is the thinnest part of turboSMTP’s public documentation. The platform meters by plan volume rather than published throughput ceilings, and several figures competitors state as hard numbers simply do not exist here.

LimitDocumented valueNotes
Emails per hourNot publishedThe FAQ answers throughput qualitatively, deferring to connection speed and message weight.
Recipients per messageNot publishedturboSMTP advises against CC/BCC mass mailing but states no cap.
Concurrent SMTP connectionsNot publishedOnly the per-subaccount SMTP limit is documented, with no published default.
API requests per minuteNot publishedExcept that POST /authorize is explicitly rate-limited.
Max message size24 MB API / 30 MB relayTwo official sources disagree, and neither reconciles the other.
Plan volume caps200/day free · 15,000/mo Basic · up to 2.5M/mo ProEnterprise is 2.5M+ or on-demand. Volume, not rate, is the constraint.

Build your own back-pressure rather than discover theirs. Base64 inflates a payload by roughly 33 percent, so the 24 MB API ceiling is reached by about 18 MB of raw attachments, size uploads against that, not the 30 MB headline. The one documented throughput lever is POST /subaccounts/{Id}/updatesubaccountsmtplimit, which caps a single subaccount, making subaccounts the de facto rate-limiting primitive: one per workload, each capped. If you need a published figure to design a queue against, SMTP2GO and Elastic Email document theirs more explicitly.

Official SDKs

turboSMTP publishes SDKs under its own GitHub organisation: C# and PHP in November 2023, Python in 2024, and a Node/TypeScript package in 2026 that is the only one with webhook verification. Maintenance is uneven, and the Go entry is an announcement rather than a package.

LanguagePackageInstallRepo
C# / .NETTurboSMTPdotnet add package TurboSMTPturboSMTP-csharp · Jan 2026
JS / TypeScript@turbosmtp/mailnpm install @turbosmtp/mailturboSMTP-js · Aug 2026
PHPturbosmtp/turbosmtp-clientcomposer require turbosmtp/turbosmtp-clientturboSMTP-php · May 2025
Pythonturbosmtppip install turbosmtpturboSMTP-python · Nov 2024
GoAnnounced, not releasedUse the raw-HTTP exampleOfficial Go walkthrough

Check the commit date before you adopt

The Python SDK was last touched in November 2024, roughly 21 months stale, and it serves the language most likely to reach for it; the documented raw-HTTP pattern or plain smtplib against the relay is more predictable, since there is very little to wrap around one POST. The Node package is freshest and the only one parsing webhooks, but carries roughly 15 commits on main: pin an exact version, not a caret range.

Notable community SDKs

The most significant non-first-party client is barely a community project: the Symfony Mailer bridge is maintained inside the Symfony organisation, at symfony/turbo-smtp-mailer. It exposes both transports through DSN – turbosmtp+smtp://KEY:SECRET@default and turbosmtp+api://KEY:SECRET@default – with EU variants and webhook parsing built in, and its release cadence follows Symfony’s rather than turboSMTP’s. It is also the only source outside turboSMTP documenting the EU relay host pro.eu.turbo-smtp.com. Beyond it the ecosystem is thin: no widely adopted Ruby, Java or Rust clients.

Endpoints reference

Fifteen resource groups cover the documented v2 surface. The canonical source is the OpenAPI document at turbo-smtp.yaml – generate a client from it rather than hand-writing one. Only the first row lives on the sending host.

ResourceMethodsDescription
Send email /mail/sendPOSTThe only sending endpoint. Takes from, to (comma-separated), cc, bcc, subject, content, html_content, headers, reference ID. Returns mid.
Authorize /authorizePOSTExchange credentials for a key valid 2 hours, or non-expiring with no_expire. Rate-limited, cache it.
Deauthorize /deauthorizePOSTRevoke a previously issued API key.
Consumer keys /user/consumerKeysGET, POSTList keys, or mint a new pair, the same credentials used for SMTP AUTH.
Consumer key /user/consumerKeys/{key}DELETERevoke one key. Breaks any SMTP client still using that pair.
Analytics /analyticsGETDelivery and engagement data by date range, timezone, status and smart search, with page/limit paging.
Analytics export /analytics/csvGETThe same filtered result set as CSV.
Analytics (single) /analytics/{Id}GETFull event record for one message, the equivalent of Zapier’s Find Email Status.
Suppressions /suppressionsGET, POSTRead the suppression list (bounces, complaints, unsubscribes) or POST a filter to query it.
Suppressions import /suppressions/importPOSTBulk-import addresses, the migration path from another provider.
Suppressions delete /suppressions/bulk_deletePOSTRemove entries individually or in bulk, after a recipient re-opts in.
Subaccounts /subaccountsGET, POST, PATCHAgency CRUD: subaccounts with their own credentials and reporting. On Basic and up since August 5, 2025.
Subaccount SMTP limit /subaccounts/{Id}/updatesubaccountsmtplimitPOSTPer-subaccount sending cap, the only documented throughput control.
Email validation /emailvalidation/…GET, POST, DELETESingle-address validation, list upload, batch validation, CSV export. Seven statuses including Valid, Invalid and Spamtrap.
Alerts /tools/alertsGET, POST, PATCH, DELETEThreshold alerts on bounce rate or volume, managed without the dashboard.

Code examples

Sending with curl

Authentication is two custom headers, not Authorization, and recipients go in a comma-separated string, not an array.

curl -X POST https://api.turbo-smtp.com/api/v2/mail/send \
  -H "Content-Type: application/json" \
  -H "consumerKey: $TURBOSMTP_KEY" \
  -H "consumerSecret: $TURBOSMTP_SECRET" \
  -d '{
    "from": "hello@your-company.com",
    "to": "jane@example.com,john@example.com",
    "subject": "New live training session",
    "content": "Plain text fallback body.",
    "html_content": "<p>HTML body</p>"
  }'

Python: HTTP API, then the relay

turboSMTP’s own published Python sample uses http.client.HTTPConnection – plaintext HTTP. Do not ship it verbatim; use HTTPSConnection.

import http.client, json

KEY = "<CONSUMER_KEY>"
SECRET = "<CONSUMER_SECRET>"

payload = {
    "from": "hello@your-company.com",
    "to": "jane@example.com,john@example.com",
    "subject": "New live training session",
    "content": "Plain text fallback body.",
    "html_content": "<p>HTML body</p>",
}
headers = {"Content-Type": "application/json",
           "consumerKey": KEY, "consumerSecret": SECRET}

# api.eu.turbo-smtp.com if your account is provisioned in the EU region
conn = http.client.HTTPSConnection("api.turbo-smtp.com")
conn.request("POST", "/api/v2/mail/send",
             body=json.dumps(payload), headers=headers)
r = conn.getresponse()
print(r.status, r.read().decode("utf-8"))
conn.close()

# The relay alternative: smtplib.SMTP_SSL("pro.turbo-smtp.com", 465),
# then smtp.login(KEY, SECRET) - the same pair, never your account password.

Node and TypeScript: official SDK

The @turbosmtp/mail package returns the message id you later pass to GET /analytics/{Id} on the management host, with the bearer token rather than this key pair.

// npm install @turbosmtp/mail
import { TurboSmtp } from "@turbosmtp/mail";

const mailer = new TurboSmtp({
  key: process.env.TURBOSMTP_KEY!,       // Consumer Key
  secret: process.env.TURBOSMTP_SECRET!, // Consumer Secret
});

const { mid } = await mailer.send({
  from: "Sender <noreply@example.com>",
  to: "you@example.com",
  subject: "Hello",
  html: "<p>It works!</p>",
});
console.log("message id:", mid);

// Without the SDK: POST the same JSON to /api/v2/mail/send
// with the two headers. That is all it does.

Common gotchas

The bearer token cannot send mail, and the error does not say so

The first wall every integrator hits. POST /authorize returns a valid key that works against analytics, suppressions and subaccounts, so authentication looks correct, then /mail/send rejects it, because that endpoint accepts only the consumerKey and consumerSecret headers. Build two credential paths from the start.

Sending and management are on different hosts

Sending goes to api.turbo-smtp.com (or the EU variant); analytics, suppressions, subaccounts, validation and alerts go to pro.api.serversmtp.com. Because the brand and knowledgebase sit on serversmtp.com while the mail hosts sit on turbo-smtp.com, stale tutorials are easy to misread.

Webhooks exist but their payload schema is not publicly documented

Webhooks were introduced in December 2019, the @turbosmtp/webhook package parses and verifies them, and the Symfony bridge handles them, so they are real. But the developers-hub webhooks page did not resolve at the paths checked for this review, leaving event names, payload fields, signature algorithm and retry policy unverified from a first-party source. Derive your handler from the Node package’s types or the Symfony parser, and validate against real traffic.

Two official sources give two different maximum message sizes

The FAQ says 30 MB per message; the OpenAPI spec says the total including attachments must be under 24 MB. Nothing reconciles them. Engineer against 24 MB on the API path, which base64 inflation puts at roughly 18 MB of raw attachments. The same drift affects the SPF include, where the marketing DNS guide and the knowledgebase disagree, re-read DNS values from your own dashboard.

Deprecations and changelog

  • May 7, 2026 – A fire at the NorthC Almere data centre took down sending and degraded ancillary services for several days. turboSMTP reported no data lost and core sending restored within 48 hours by failover to Frankfurt. The most significant availability event in the platform’s published history.
  • September 30, 2025 – Official turboSMTP app launched on Zapier with Send Email and Find Email Status actions. Further triggers were said to be planned; the app still ships 0, so Zapier can send through turboSMTP but cannot be started by a delivery event.
  • August 5, 2025 – Subaccounts extended down to the Basic tier, with individual credentials and reporting. Previously higher-tier, and the reason subaccount rate isolation is now viable on the entry plan.
  • April 15, 2025 – API Key authentication became mandatory for SMTP connections, replacing account passwords with Consumer Key/Secret pairs. The most consequential change on this platform: every configuration guide written before this date names the wrong credential fields.
  • October 6, 2021 – HTTP API v2 released with larger attachment support and an optimised backend. v1 was discontinued April 1, 2022, with a further cutoff notice dated June 30, 2024 on the legacy reference.

Release notes are published on turboSMTP’s news feed at serversmtp.com/news. Nothing versioned is embedded in the API reference, so diffing the OpenAPI YAML is the only reliable way to catch a silent schema change.

Frequently asked questions

Does turboSMTP have a REST API?

Yes. The current version is v2, described by a public OpenAPI 3.1.0 document at serversmtp.com/turbo-api/turbo-smtp.yaml. Sending is a single JSON POST to https://api.turbo-smtp.com/api/v2/mail/send; analytics, suppressions, subaccounts, validation and alerts live on https://pro.api.serversmtp.com/api/v2. v1 was discontinued on April 1, 2022.

How do I get a turboSMTP API key (Consumer Key and Consumer Secret)?

Generate the pair in the dashboard under API Keys, or with POST /api/v2/user/consumerKeys. The Consumer Secret is shown exactly once and cannot be retrieved later. The same pair authenticates the HTTP API and the SMTP relay on pro.turbo-smtp.com, so revoking a key also breaks any mail client using it.

What is the turboSMTP API endpoint for sending email?

POST https://api.turbo-smtp.com/api/v2/mail/send, or the api.eu.turbo-smtp.com host for EU accounts. It accepts from, to (comma-separated, not an array), cc, bcc, subject, content, html_content, custom headers and a reference ID, and returns a message id (mid) for lookup via /analytics/{Id}. It requires the Consumer Key/Secret headers and rejects the bearer token from /authorize.

Does turboSMTP support webhooks for bounces and opens?

Yes, they have existed since December 2019, and the official @turbosmtp/webhook package verifies and parses them, as does the Symfony Mailer bridge. But the first-party webhooks documentation page did not resolve at the paths checked for this review, so event names, payload schema, signature algorithm and retry policy are unverified here. Derive your handler from the Node package’s types or the Symfony bridge, and validate against live traffic first.

Is there an official turboSMTP Python or Node.js SDK?

Both exist. Node/TypeScript is @turbosmtp/mail, the freshest official client (August 2026) and the only one with webhook support, roughly 15 commits on main, so pin an exact version. Python is pip install turbosmtp, last updated November 2024 and about 21 months stale; raw HTTP or plain smtplib against the relay is usually safer there. C# and PHP are also published, and the Go SDK is announced but not released.

Does turboSMTP have an MCP server for AI agents?

Not one you can install. turboSMTP documents a planned @turbosmtp/mcp-server – four tools, stdio transport, a TURBOSMTP_READ_ONLY flag, but the page states it is in development, with installation instructions pending release. What works today: a community Node server at github.com/debba/turbosmtp-mcp-server (clone and build, no npm package), a hosted Pipedream endpoint, and the official Zapier app through Zapier’s MCP surface. Zapier is the most production-ready, because it rides a turboSMTP-maintained integration rather than a third-party wrapper.

Changelog (recent)

  • 2026-05-07 Fire at the NorthC Almere data centre took down sending and degraded ancillary services for several days; turboSMTP reported no data lost and core sending restored within 48 hours by failover to Frankfurt.
  • 2025-09-30 Official turboSMTP app launched on Zapier with Send Email and Find Email Status actions. Still ships 0 triggers, so Zapier can send through turboSMTP but cannot be started by a delivery event.
  • 2025-08-05 Subaccounts extended down to the Basic plan tier, with individual credentials and reporting, making per-subaccount SMTP rate caps viable on the entry plan.
AAlaa Touil RRabeb How we test →

This review follows our email infrastructure testing methodology. We disclose affiliate relationships in our editorial independence policy.