Skip to main content
Six official SDKs each cover the whole send surface of the REST API: raw and templated sends, attachments, tags, topics, scheduled sends, idempotency, and signed webhook events. Each also describes the API key it authenticates with.

Python

Sync and async clients, fully typed.

Node

Zero dependencies; one build from servers to edge runtimes.

Go

Standard library only; one client safe for every goroutine.

PHP

PSR-18 transport, named arguments throughout.

Ruby

Zero runtime dependencies, keyword arguments, RBS signatures.

Java

Zero runtime dependencies, built for virtual threads.

Framework integrations

Four packages plug mailkube into a framework’s own mail machinery, so code that already sends mail keeps working unchanged, and webhooks arrive in the framework’s own event idiom:

Django

An email backend for send_mail, plus an Anymail backend and a webhook signal.

Laravel

A mailkube mail transport for the Mail facade, plus a webhook event.

Ruby on Rails

An ActionMailer delivery method, plus webhooks as ActiveSupport notifications.

Spring Boot

A starter providing MailSender, plus webhooks as application events.

What every SDK shares

  • The client reads MAILKUBE_API_KEY from the environment when no key is passed, so credentials stay out of code.
  • A client keeps the key it was built with, and its credential namespace describes that key. A second key needs a second client.
  • There are deliberately no built-in retries. A rate-limit error carries the server’s own retry delay, a server error is safe to retry with backoff, and an idempotency key makes the retry safe.
  • Errors carry the API’s machine-readable name; branch on it, never on message text, which is free to change. See Errors.
  • Webhook helpers verify the signature over the raw received bytes, and an endpoint is activated only after echoing the GET hub.challenge probe. See Webhooks.

Requirements

Serverless

Every SDK runs on function platforms the way it runs on a server, wherever its runtime floor above is met: build the client once at module scope, and a reused container reuses it. The Node SDK goes further. It uses web standards only, so one published build also runs on edge runtimes, each exercised in CI:

Cloudflare Workers

No nodejs_compat flag. The key arrives per request on env, so build the client inside the handler.

Deno

Import straight from npm with the npm: specifier; no build step.

Bun

bun add the same package. ESM and CommonJS both resolve.

No SDK for your stack

REST API

Send from anything that speaks HTTP. One endpoint, JSON in, message id out.

Relay sidecar

Point an existing SMTP client at a local relay container instead.