
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.
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.
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.
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.
OFFICIAL
First-party remote Streamable HTTP server on the developer docs domain. Five tools: list, get and search endpoints, execute a request, read server variables. Discovery answers without credentials, execution takes an SMTP2GO API key.
COMMUNITY
Hosted MCP endpoint exposing send, activity search, stats and suppressions to Claude Desktop, ChatGPT and Cursor via viaSocket’s authenticated proxy. Free tier for low volumes.
COMMERCIAL
Composio-hosted SMTP2GO tool bundle usable through Composio’s MCP endpoint. Also integrates with AutoGen, CrewAI and LangGraph on the same credentials.
ZAPIER
SMTP2GO reachable as a tool inside Zapier’s MCP server via the SMTP by Zapier action and native webhook events. Uses your existing Zapier plan for auth and quota.
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.| Attribute | Value | Notes |
|---|---|---|
| Base URL (global) | https://api.smtp2go.com/v3/ | Routes to the closest region; safe default. |
| Regional base URLs | us-api / eu-api / au-api.smtp2go.com/v3/ | Pin explicitly when data-residency matters. |
| Protocol | HTTPS only | TLS 1.2+, HTTP/2 supported. Non-TLS is refused. |
| Response format | JSON | Every response returns {data: {…}, request_id, errors}. |
| Auth header | X-Smtp2go-Api-Key: api-XXXX… | Recommended over api_key in body. |
| Request body cap | 1 MB standard / 50 MB email endpoints | Enforced since June 11, 2026. |
| Idempotency | Not natively supported | Deduplicate at your queue layer. |
| Bulk send | /email/batch, up to 1,000 messages per POST | Added June 2026; obeys the 50 MB envelope cap. |
| Scheduling window | Up to 3 days ahead | Set schedule in send payload; manage via /email/scheduled/*. |
| Sandbox mode | Per-key flag in dashboard | Requests 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.
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.
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.
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.
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.
| Limit | Value | Scope |
|---|---|---|
| Default max sending speed | 200,000 emails/hour | Account-wide throughput ceiling; raiseable on request. |
| Recipients per message (API) | 100 per field (to / cc / bcc), 400 combined | SMTP2GO recommends 50-100 per send to protect deliverability. |
| Concurrent SMTP connections | 40 simultaneous, up to 5,000 emails per connection | Applies to relay traffic, not REST. |
| Activity search endpoint | 60 requests/minute | Documented cap on /activity/search. |
| Message size | 50 MB | Content + attachments + headers combined. |
| Request body size | 1 MB standard, 50 MB email endpoints | Enforced 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.
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.
| Language | Package | Install | Repo |
|---|---|---|---|
| Python | smtp2go-python | pip install smtp2go-python | smtp2go-oss/smtp2go-python |
| Python (Django) | smtp2go-django | pip install smtp2go-django | smtp2go-oss/smtp2go-django |
| Node.js | smtp2go-nodejs | npm install smtp2go-nodejs | smtp2go-oss/nodejs |
| PHP | smtp2go-oss/smtp2go-php | composer require smtp2go-oss/smtp2go-php | smtp2go-oss/smtp2go-php |
| Ruby | smtp2go | gem install smtp2go | smtp2go-oss/smtp2go-ruby |
| Go | smtp2go-go | go get github.com/smtp2go-oss/smtp2go-go | smtp2go-oss/smtp2go-go |
| Rust | smtp2go | cargo add smtp2go | smtp2go-oss/smtp2go-rust |
| .NET | Smtp2Go.ApiClient | dotnet add package Smtp2Go.ApiClient | NuGet: Smtp2Go.ApiClient |
| WordPress | Email Made Easy by SMTP2GO | Install from WP plugin directory | smtp2go-oss/wordpress-plugin |
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.
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.
| Resource | Methods | Description |
|---|---|---|
| Email, send /email/send | POST | Send a single transactional email with HTML/text bodies, attachments, inlines, template_id/template_data and optional schedule. |
| Email. MIME /email/mime | POST | Send a fully-formed MIME message you built yourself. |
| Email, batch /email/batch | POST | Send or schedule up to 1,000 emails in a single request (added June 2026). |
| Email, search /email/search | POST | Search past outbound email events by recipient, sender, subject, tag, date range. |
| Scheduled email, search /email/scheduled/search | POST | List up to 1,000 currently-scheduled outbound emails. |
| Scheduled email, remove /email/scheduled/remove | POST | Cancel a scheduled email by schedule_id. |
| API keys /api_keys/{add,view,edit,delete,search} | POST, PATCH | CRUD for API keys, including sandbox flag and per-endpoint permission scopes. |
| SMTP users /users/smtp/{add,view,edit,delete,search} | POST | Manage SMTP relay usernames and passwords programmatically. |
| Subaccounts /subaccounts/{add,view,edit,delete,search} | POST | Provision and manage isolated subaccounts (paid plans only). |
| Sender domains /domain/{add,view,verify,delete,search} | POST | Add and verify sending domains (CNAME-based DKIM / return-path). |
| Single senders /singlesender/{add,view,delete,search,verify} | POST | Verify individual From: addresses without owning the whole domain. |
| Suppressions /suppressions/{add,view,delete,search} | POST | Manage bounce, spam, unsubscribe suppression lists (accepts subaccount_id since June 2026). |
| Activity / events /activity/search | POST | Query email events (bounces, opens, clicks, complaints, unsubscribes). 60 req/min limit. |
| Stats /stats/{email_summary,email_bounces,email_history,email_cycle} | POST | Aggregated deliverability, bounce and volume statistics. |
| Webhooks /webhooks/{add,view,edit,delete,search} | POST | Register HTTPS endpoints for real-time email/SMS events with automatic retries. |
| IP allow list /ip_allow_list/{add,view,edit,delete} | POST | Restrict API/SMTP access by source IP with type = smtp or api (July 2026). |
| Templates /templates/{add,view,edit,delete,search} | POST | Server-side email templates with variable substitution. API sending only. |
| SMS /sms/{send,search,summary,received} | POST | Transactional SMS on paid plans, up to 100 destination addresses per request. |
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.
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)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 -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"
}'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.
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.
api_key-in-body legacy pattern still ships in SDK samplesSMTP2GO’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.
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.
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.
SMTP2GO does not publish a machine-readable changelog feed. The API reference and the product blog together carry the announcement flow. Notable 2026 events:
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.type parameter so a rule can target SMTP-only or API-only traffic instead of both.subaccount_id to the suppression endpoints.schedule property + /email/scheduled/*), /email/batch for up to 1,000 messages per request, and a fastaccept parameter for higher-throughput sending.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.
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.
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.
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.
/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.
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.
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.
This review follows our email infrastructure testing methodology. We disclose affiliate relationships in our editorial independence policy.