SMTP2GO logo

SMTP2GO API + MCP (2026): the specialist relay's REST v3, scored

Last verified Aug 27, 2026

SMTP2GO has been running a specialist SMTP relay since 2006, and the modern REST API is the deliberately-minimal HTTPS layer bolted on top of that relay. The v3 API at https://api.smtp2go.com/v3/ covers sending, scheduling, templates, suppressions, webhooks, subaccounts and stats through 9 official SDKs under the smtp2go-oss GitHub organisation. SMTP2GO ships a first-party MCP server at https://developers.smtp2go.com/mcp, a remote Streamable HTTP endpoint carried in the AI section of the developer docs, and three hosted community bridges (viaSocket, Composio, Zapier MCP) fill in for teams that want a native Claude / Cursor / ChatGPT connector today.

At a glance

v3
API version
REST + JSON, stable since 2018, still the current major

9
Official SDKs
Python, Node, PHP, Ruby, Go, Rust, .NET, Django, WordPress

Official
MCP status
developers.smtp2go.com/mcp, five tools, plus three community bridges

MCP integration in 2026

Model Context Protocol lets an LLM agent (Claude Desktop, Cursor, ChatGPT connectors, custom autogen graphs) call SMTP2GO the way a human clicks buttons. SMTP2GO publishes its own remote server, and three third-party proxies wrap the same v3 REST endpoints listed further down this page. The difference between them is tool shape: the first-party server bridges the whole API surface, the proxies expose a curated action set.

An official MCP server at developers.smtp2go.com/mcp, plus three community bridges

The server is a remote Streamable HTTP endpoint that initializes as SMTP2GO-API-Docs and exposes five tools: list-endpoints, get-endpoint, search-endpoints, execute-request and get-server-variables. Documentation discovery answers without credentials; execute-request needs an API key in the X-Smtp2go-Api-Key header, or the same key as a bearer token. SMTP2GO publishes no launch date for the server. Teams that want a curated tool set rather than endpoint discovery still route through viaSocket, Composio, or Zapier MCP-all three carry the same underlying scope surface.

Available MCP servers

The first-party server sits alongside three hosted community options. All are HTTPS proxies to api.smtp2go.com/v3/; the differences are pricing model, auth flow and how much extra plumbing they add.

Why buyers should care. SMTP2GO sits in the same column as Mailgun, Postmark and Resend: an official server, no wrapper to build and maintain. The design is what to weigh. Postmark exposes 24 named tools; SMTP2GO exposes five generic ones, so the agent searches for an endpoint and then calls execute-request against it. That buys the whole v3 surface on day one, and it gives up the guardrail a curated tool list provides: nothing stops an over-eager agent at the endpoint boundary except the per-endpoint scope on the key you hand it. Scope the key to sending, never hand an agent a full-access one.

SMTP2GO API essentials

AttributeValueNotes
Base URL (global)https://api.smtp2go.com/v3/Routes to the closest region; safe default.
Regional base URLsus-api / eu-api / au-api.smtp2go.com/v3/Pin explicitly when data-residency matters.
ProtocolHTTPS onlyTLS 1.2+, HTTP/2 supported. Non-TLS is refused.
Response formatJSONEvery response returns {data: {…}, request_id, errors}.
Auth headerX-Smtp2go-Api-Key: api-XXXX…Recommended over api_key in body.
Request body cap1 MB standard / 50 MB email endpointsEnforced since June 11, 2026.
IdempotencyNot natively supportedDeduplicate at your queue layer.
Bulk send/email/batch, up to 1,000 messages per POSTAdded June 2026; obeys the 50 MB envelope cap.
Scheduling windowUp to 3 days aheadSet schedule in send payload; manage via /email/scheduled/*.
Sandbox modePer-key flag in dashboardRequests validate and return 200 without actually delivering.

The v3 surface is deliberately narrow compared with SendGrid’s sprawling Web API v3 or Mailgun’s 2018-era design: roughly 18 resource families, all under /v3/{resource}/{action}, all POST-first (a few PATCH). If you have used Postmark’s compact API, the shape will feel familiar, but SMTP2GO leans harder on a single “everything is POST with a JSON body” convention rather than resource-styled REST verbs.

Authentication methods

SMTP2GO supports two mechanisms for authenticating REST calls; there is no OAuth flow because the API is designed for server-to-server automation, not delegated third-party access.

API key in header (recommended)

Create a key under Settings › API Keys. Keys are prefixed api- followed by 32 hex characters. Send them in the X-Smtp2go-Api-Key HTTP header. Keys support per-endpoint scopes (e.g. “email/send only, no admin”), IP allow-list bindings, and a sandbox flag that accepts sends without delivering.

API key in JSON body (legacy)

The original v3 pattern accepted {"api_key":"api-XXXX…"} as a field inside the JSON body. It still works and every SDK will do it if asked, but it leaks the key into request/response logs, monitoring tools, and any 4xx error message that echoes the payload. Prefer the header form for anything past a proof-of-concept.

Scope caveat. Per-endpoint scoping is set at key creation and cannot be widened later, you have to rotate. Create separate keys for sending, admin (subaccounts, users), and reporting (stats, activity). Do not reuse a full-access key across environments.

Rate limits

SMTP2GO publishes a small number of hard limits and configures the rest per API key. The dashboard shows current per-key usage in real time.

LimitValueScope
Default max sending speed200,000 emails/hourAccount-wide throughput ceiling; raiseable on request.
Recipients per message (API)100 per field (to / cc / bcc), 400 combinedSMTP2GO recommends 50-100 per send to protect deliverability.
Concurrent SMTP connections40 simultaneous, up to 5,000 emails per connectionApplies to relay traffic, not REST.
Activity search endpoint60 requests/minuteDocumented cap on /activity/search.
Message size50 MBContent + attachments + headers combined.
Request body size1 MB standard, 50 MB email endpointsEnforced from June 11, 2026.

Per-endpoint limits other than /activity/search are not published; SMTP2GO expects you to negotiate them per key. When you hit a limit the API returns HTTP 429 with a Retry-After header. The batching workaround is straightforward: shift high-fanout jobs onto /email/batch (up to 1,000 messages per POST), and pin polling jobs against /activity/search to a single worker with exponential backoff. If you routinely burst above 200,000/hour, open a support ticket to lift the ceiling before your growth curve does it for you.

Official SDKs

SMTP2GO maintains 9 official libraries in the smtp2go-oss GitHub organisation. Coverage skews toward the languages actual paying customers use (Python, PHP, .NET, WordPress), with Rust included for the systems-programming crowd. All wrap the same v3 endpoints; the Django and WordPress packages plug into their frameworks’ native mail hooks instead of forcing manual client calls.

LanguagePackageInstallRepo
Pythonsmtp2go-pythonpip install smtp2go-pythonsmtp2go-oss/smtp2go-python
Python (Django)smtp2go-djangopip install smtp2go-djangosmtp2go-oss/smtp2go-django
Node.jssmtp2go-nodejsnpm install smtp2go-nodejssmtp2go-oss/nodejs
PHPsmtp2go-oss/smtp2go-phpcomposer require smtp2go-oss/smtp2go-phpsmtp2go-oss/smtp2go-php
Rubysmtp2gogem install smtp2gosmtp2go-oss/smtp2go-ruby
Gosmtp2go-gogo get github.com/smtp2go-oss/smtp2go-gosmtp2go-oss/smtp2go-go
Rustsmtp2gocargo add smtp2gosmtp2go-oss/smtp2go-rust
.NETSmtp2Go.ApiClientdotnet add package Smtp2Go.ApiClientNuGet: Smtp2Go.ApiClient
WordPressEmail Made Easy by SMTP2GOInstall from WP plugin directorysmtp2go-oss/wordpress-plugin
Staleness check. None of the SDK repos publish a machine-readable “last release” badge on their landing pages. Before locking a dependency in production, pin the exact SemVer version, run the vendor’s example against sandbox mode, and file an issue if your endpoint payload has features the SDK does not expose (batch, schedule, fastaccept). The Python and Node clients see the most frequent updates; Rust and Go trail by several months in practice.

Notable community SDKs

The community layer is thin because official coverage is broad. Look for framework adapters rather than raw HTTP clients: Laravel projects wrap the PHP SDK in service providers, Symfony wires it into the Mailer transport, and Elixir teams typically call the v3 API directly through Req or Finch since there is no first-party BEAM SDK. If your stack is Deno, Bun or Cloudflare Workers, the Node SDK works with minor polyfills but the officially-blessed path is fetch() against the REST endpoints.

Endpoints reference

The full endpoint index lives at apidocs.smtp2go.com. The 18 resource families below cover everything except the rarely-touched account and billing surfaces. All paths hang off the /v3/ prefix; all use POST unless noted.

ResourceMethodsDescription
Email, send /email/sendPOSTSend a single transactional email with HTML/text bodies, attachments, inlines, template_id/template_data and optional schedule.
Email. MIME /email/mimePOSTSend a fully-formed MIME message you built yourself.
Email, batch /email/batchPOSTSend or schedule up to 1,000 emails in a single request (added June 2026).
Email, search /email/searchPOSTSearch past outbound email events by recipient, sender, subject, tag, date range.
Scheduled email, search /email/scheduled/searchPOSTList up to 1,000 currently-scheduled outbound emails.
Scheduled email, remove /email/scheduled/removePOSTCancel a scheduled email by schedule_id.
API keys /api_keys/{add,view,edit,delete,search}POST, PATCHCRUD for API keys, including sandbox flag and per-endpoint permission scopes.
SMTP users /users/smtp/{add,view,edit,delete,search}POSTManage SMTP relay usernames and passwords programmatically.
Subaccounts /subaccounts/{add,view,edit,delete,search}POSTProvision and manage isolated subaccounts (paid plans only).
Sender domains /domain/{add,view,verify,delete,search}POSTAdd and verify sending domains (CNAME-based DKIM / return-path).
Single senders /singlesender/{add,view,delete,search,verify}POSTVerify individual From: addresses without owning the whole domain.
Suppressions /suppressions/{add,view,delete,search}POSTManage bounce, spam, unsubscribe suppression lists (accepts subaccount_id since June 2026).
Activity / events /activity/searchPOSTQuery email events (bounces, opens, clicks, complaints, unsubscribes). 60 req/min limit.
Stats /stats/{email_summary,email_bounces,email_history,email_cycle}POSTAggregated deliverability, bounce and volume statistics.
Webhooks /webhooks/{add,view,edit,delete,search}POSTRegister HTTPS endpoints for real-time email/SMS events with automatic retries.
IP allow list /ip_allow_list/{add,view,edit,delete}POSTRestrict API/SMTP access by source IP with type = smtp or api (July 2026).
Templates /templates/{add,view,edit,delete,search}POSTServer-side email templates with variable substitution. API sending only.
SMS /sms/{send,search,summary,received}POSTTransactional SMS on paid plans, up to 100 destination addresses per request.

Code examples

Two canonical snippets: send an email with the official Python SDK, then send with the Node.js SDK. Both assume the API key lives in the environment. Swap api-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX for the real value only in local scripts, production code should always read from a secret manager.

Python: send a transactional email

from smtp2go.core import Smtp2goClient

client = Smtp2goClient(api_key='api-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
response = client.send(
    sender='hello@yourdomain.com',
    recipients=['user@example.com'],
    subject='Hello from SMTP2GO',
    text='Plain text body',
    html='<h1>Hi from SMTP2GO</h1>',
    custom_headers={'X-Campaign': 'welcome-v1'},
)
print(response.json)

Node.js: send with the official SDK

import SMTP2GOApi from 'smtp2go-nodejs';

const api = SMTP2GOApi(process.env.SMTP2GO_API_KEY);

const mail = api.mail()
  .from({ email: 'hello@yourdomain.com', name: 'Your App' })
  .to({ email: 'user@example.com', name: 'User' })
  .subject('Hello from SMTP2GO')
  .html('<h1>Hi from SMTP2GO</h1>')
  .text('Plain text body');

const res = await api.client().consume(mail);
console.log(res.success, res.data);

curl: schedule an email 24 hours ahead

curl -X POST https://api.smtp2go.com/v3/email/send 
  -H "X-Smtp2go-Api-Key: api-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
  -H "Content-Type: application/json" 
  -d '{
    "sender": "hello@yourdomain.com",
    "to": ["user@example.com"],
    "subject": "Scheduled hello",
    "html_body": "<p>Delivered tomorrow.</p>",
    "schedule": "2026-08-20T09:00:00Z"
  }'

Common gotchas

Templates only work on the API, not SMTP relay

The template_id + template_data flow is exclusive to /email/send and /email/mime. If you configure a template in the dashboard and then send through mail.smtp2go.com expecting substitution, the message goes out with your raw body untouched. Anything that needs template variables must migrate off SMTP relay, there is no back-compat shim.

Sandbox mode is a per-key flag, not a query parameter

Flag a key as sandbox in the dashboard under Settings › API Keys › Edit. Requests then validate and return HTTP 200 without actually delivering, useful for CI runs and load tests. There is no way to toggle sandbox per request, so most teams create one dedicated CI key and one dedicated production key rather than flipping a shared key back and forth.

The api_key-in-body legacy pattern still ships in SDK samples

SMTP2GO’s Python and PHP quickstart snippets sometimes show the API key inside the JSON body for brevity. It works, but the key ends up in error payloads, log aggregators and any 4xx echo. Migrate to the X-Smtp2go-Api-Key header before you go live, this is a review-blocker in most SOC 2 shops.

The 50 MB email cap is enforced after base64 expansion

Attachments are counted against the 50 MB email endpoint limit as their base64-encoded size, not the original binary bytes. A 37 MB PDF weighs roughly 49 MB on the wire and can push you over the ceiling even though it looks fine on disk. Compress or link-share anything above 30 MB, or split into a follow-up email.

Regional base URLs are a data-residency choice, not an availability shortcut

The us-api, eu-api and au-api hostnames pin traffic to a region for compliance (EU customers wanting GDPR-clean processing). They are not lower-latency edge routes. SMTP2GO’s own docs point most customers at the global api.smtp2go.com endpoint. Pin only when you have a written policy requirement, otherwise stick with the default.

Deprecations and changelog

SMTP2GO does not publish a machine-readable changelog feed. The API reference and the product blog together carry the announcement flow. Notable 2026 events:

  • September 15, 2026-The AI section of the developer docs publishes a first-party MCP server at https://developers.smtp2go.com/mcp, a remote Streamable HTTP endpoint with five tools. This page previously stated that no first-party server existed. SMTP2GO publishes no launch date for it; the docs page carries version 3.0.4.
  • July 30, 2026-IP allow lists gained a type parameter so a rule can target SMTP-only or API-only traffic instead of both.
  • June 29, 2026-Master-account API keys can now manage subaccount suppressions by passing subaccount_id to the suppression endpoints.
  • June 11, 2026-Request-body size limits enforced: 1 MB for standard endpoints, 50 MB for email endpoints.
  • June 3, 2026-Email scheduling up to 3 days ahead (schedule property + /email/scheduled/*), /email/batch for up to 1,000 messages per request, and a fastaccept parameter for higher-throughput sending.
  • May 25, 2026-Developer docs added an AI/MCP section describing how AI agents should call the v3 REST API directly.

No endpoints have been formally deprecated in 2026. The v2 API remains reachable for legacy customers but new keys default to v3 and the docs no longer surface v2 examples. Follow the official release notes for breaking-change announcements.

Frequently asked questions

What is the SMTP2GO API base URL and how do I authenticate a request?

The global base URL is https://api.smtp2go.com/v3/, with regional variants us-api, eu-api and au-api under the same /v3/ prefix. Authenticate with the X-Smtp2go-Api-Key HTTP header carrying an api-XXXX… key created under Settings › API Keys. The legacy pattern of putting api_key inside the JSON body still works but is discouraged because it leaks the key into logs and error payloads.

Which official SDKs does SMTP2GO publish and where are they on GitHub?

SMTP2GO maintains 9 official libraries under the smtp2go-oss organisation: Python, Node.js, PHP, Ruby, Go, Rust, .NET (NuGet), Python-Django and the WordPress Email Made Easy by SMTP2GO plugin. All wrap the same v3 REST endpoints; the Django and WordPress packages plug into their frameworks’ native mail hooks instead of forcing you to call the client manually.

How do I schedule an email up to 3 days in the future with the SMTP2GO API?

Add a schedule property to your /email/send or /email/mime POST body with an ISO-8601 timestamp no more than 3 days ahead. The response includes a schedule_id. Use /email/scheduled/search to list pending sends (up to 1,000 per query) and /email/scheduled/remove to cancel one before it fires. Scheduling was added on June 3, 2026 and is only available via the API, not SMTP relay.

How does the /email/batch endpoint work and what are its size limits?

/email/batch accepts an array of up to 1,000 email objects in a single POST. Each object has the same shape as an /email/send payload (sender, to, subject, html, template_id, attachments, schedule). The whole batch counts against the 50 MB email-endpoint request-body limit enforced since June 11, 2026, so keep large attachments out of batch calls and use per-message sends when you need >50 KB of MIME per recipient.

How do I subscribe to webhook events for bounces, opens and unsubscribes?

Register an HTTPS endpoint with POST /webhooks/add, listing the events you want (bounce, open, click, unsubscribe, spam, delivered). SMTP2GO POSTs JSON to your URL with retries. Manage subscriptions via /webhooks/view, /webhooks/edit and /webhooks/delete. For click and open tracking to fire, tracking must also be enabled on the sending domain in the dashboard.

Is there an official SMTP2GO MCP server for Claude, ChatGPT or Cursor in 2026?

Yes. SMTP2GO publishes a remote Streamable HTTP server at https://developers.smtp2go.com/mcp, documented in the AI section of its developer docs. It exposes five tools and authenticates with the same X-Smtp2go-Api-Key header as the REST API, or that key as a bearer token. Three third-party hosted MCPs also exist: viaSocket (community), Composio (commercial) and Zapier MCP. All three wrap the same v3 endpoints, so choosing between them and the official server is a question of tool shape and billing, not of coverage.

Changelog (recent)

  • 2026-09-15 Correction: the AI section of the SMTP2GO developer docs publishes a first-party MCP server at https://developers.smtp2go.com/mcp, a remote Streamable HTTP endpoint exposing five tools. This tab previously stated that no first-party server existed. SMTP2GO publishes no launch date; docs version 3.0.4.
  • 2026-08-19 API + MCP tab published on smtpedia. Third-party MCP coverage (viaSocket, Composio, Zapier) inventoried; no first-party SMTP2GO MCP server exists as of this date.
  • 2026-07-30 IP allow lists gained a type parameter so a rule can target smtp-only or api-only traffic instead of both.
AAlaa Touil RRabeb How we test →

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