A powerful email API to make email sending a breeze

Easy integration, reliable delivery, great documentation: integrate with the email API that developers love and start sending in minutes.

< 1s average delivery time 99.9% uptime SLA No credit card required
RESTful JSON API

Start sending with WebMail's email API in minutes

Integrating email into your product doesn't have to be a pain. With our powerful RESTful email API and official libraries in pretty much every programming language, integrating email is fast and easy — whether you're sending transactional or bulk email.

Simpler applications can also use our reliable SMTP service.

  • One POST request with a JSON body — no SDKs required
  • Bearer-token auth — one API key, all endpoints
  • 202 Accepted with a message_id for tracking
  • Full OpenAPI spec at /api/docs/
cURL
🐍Python
🟨Node.js
💎Ruby
🐘PHP
🔷.NET

Integrate in minutes, not days

One POST request is all it takes. Pick your language and copy-paste a working example straight into your codebase.

  • Bearer-token auth — one API key, all endpoints
  • 202 Accepted response with message_id
  • Full OpenAPI spec at /api/docs/

Everything you need to deliver email at scale

The WebMail API is designed for developers who need reliability, speed, and full observability.

Instant delivery

Sub-second queueing with direct MX handoff. Your messages reach the inbox before your user closes the tab.

Batch API

Send up to 500 messages in a single request. Ideal for bulk notifications, digests, and high-volume transactional flows.

Delivery webhooks

Real-time push events for every delivery, open, click, bounce, and complaint — straight to your endpoint.

Template API

Store and render templates server-side. Pass variables at send time; WebMail handles merge, rendering, and delivery.

Webhooks

HMAC-signed webhook verification

Every webhook payload is signed with HMAC-SHA256. Verify signatures on your server to reject forged requests.

Signature header

Each request includes an X-WebMail-Signature header containing a hex-encoded HMAC-SHA256 digest of the raw request body, keyed with your webhook secret.

Rate limits

Plan Monthly quota Rate limit
Free 1,000 emails 10 req/s
Pro 100,000 emails 100 req/s
Enterprise Unlimited Custom

API error codes

Status Code Meaning
202 queued Message accepted and queued for delivery
400 invalid_params Missing or malformed request fields
401 invalid_api_key API key missing, invalid, or revoked
429 rate_limit_exceeded Too many requests — retry with backoff
500 server_error Transient server error — safe to retry
Webhook verification · Python HMAC-SHA256
import hmac, hashlib

def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode(),
        payload,
        hashlib.sha256,
    ).hexdigest()
    return hmac.compare_digest(expected, signature)


# In your webhook handler (e.g. Django view):
def webhook_handler(request):
    sig = request.headers.get("X-WebMail-Signature", "")
    if not verify_webhook(request.body, sig, WEBHOOK_SECRET):
        return HttpResponse(status=403)

    event = json.loads(request.body)
    event_type = event["event"]  # "delivered" | "opened" | "bounced"
    ...

Use hmac.compare_digest to prevent timing attacks. Retry logic uses exponential back-off over 10 attempts.

"It was incredibly easy to set up WebMail. In under 10 minutes I had the first test working and rolling it out to production was just as easy."
JD

Jane Doe

CTO, Acme Corp

Start sending in minutes

Free up to 1,000 emails / month. No credit card required.