Skip to content

SendFleet · Transactional Email API Your SES or
ours. One API. One endpoint, two sending modes.

Route transactional email through your own AWS SES account, zero data stored on our servers, or use our managed infrastructure. Same REST endpoint. Same keys. Your choice.

BYOC: Your SES, your data
Managed, zero AWS setup
$0 to get started
BYOC zero content stored
$5 managed, zero AWS setup
1 endpoint for both modes
sendfleet · POST /v1/send
curl -X POST https://api.sendfleet.net/v1/send \
  -H "X-API-Key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "to":         "user@example.com",
    "from_email": "hello@yourdomain.com",
    "from_name":  "Acme",
    "subject":    "Your order is confirmed",
    "message":    "Thanks for your order!"
  }'
import requests

response = requests.post(
    "https://api.sendfleet.net/v1/send",
    headers={"X-API-Key": "sk_live_your_key"},
    json={
        "to":         "user@example.com",
        "from_email": "hello@yourdomain.com",
        "subject":    "Your order is confirmed",
        "message":    "Thanks for your order!",
    },
)
data = response.json()  # {"success": true, "mode": "byoc"}
const res = await fetch("https://api.sendfleet.net/v1/send", {
  method: "POST",
  headers: {
    "X-API-Key":      "sk_live_your_key",
    "Content-Type":  "application/json",
  },
  body: JSON.stringify({
    to:         "user@example.com",
    from_email: "hello@yourdomain.com",
    subject:    "Your order is confirmed",
    message:    "Thanks for your order!",
  }),
});
const { message_id, mode } = await res.json();
// mode → "byoc" | "shared"
<?php
$payload = json_encode([
    'to'         => 'user@example.com',
    'from_email' => 'hello@yourdomain.com',
    'subject'    => 'Your order is confirmed',
    'message'    => 'Thanks for your order!',
]);
$ch = curl_init('https://api.sendfleet.net/v1/send');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        'X-API-Key: sk_live_your_key',
        'Content-Type: application/json',
    ],
]);
$data = json_decode(curl_exec($ch), true);
body, _ := json.Marshal(map[string]string{
    "to":         "user@example.com",
    "from_email": "hello@yourdomain.com",
    "subject":    "Your order is confirmed",
    "message":    "Thanks for your order!",
})
req, _ := http.NewRequest("POST",
    "https://api.sendfleet.net/v1/send",
    bytes.NewBuffer(body))
req.Header.Set("X-API-Key", "sk_live_your_key")
req.Header.Set("Content-Type", "application/json")
http.DefaultClient.Do(req)
200 OK: queued
mode: byoc

BYOC and Shared SES,
side by side.

Same API. Same dashboard. The difference is whose AWS account actually sends the mail, and who stores what.

Shared SES: Managed

SendFleet handles
everything.

We handle delivery on our managed AWS infrastructure. Zero AWS setup, verify your domain, drop in a DNS record, you're sending. Full email logs in your dashboard. Bounce and complaint handling built in. Webhook events for every state change.

Managed Starter at $5/month (5k emails), Managed Growth at $15/month (25k emails), or Managed Pro at $59/month (100k emails). Requires account email verification and a verified sending domain.
Zero AWS setup Full email logs Webhook events Bounce handling
BYOC: Bring Your Own SES

Your AWS.
Your data. Always.

Email routes through your own AWS SES account using short-lived temporary credentials we obtain per send. Your recipient, subject, and body never touch our database. Your sender reputation lives entirely in your account, isolated from every other SendFleet customer.

Free BYOC is free forever (50 emails/month). $9/month for 1,000,000 sends a month, still your SES, your limits.
Zero data stored Your reputation Your SES limits ExternalId protected

What the API
guarantees.

01

SHA-512 hashed API keys

We store only a hash, the raw secret is shown once and never persisted. Prefix-based lookup keeps DB queries fast. Revoke any key instantly, set optional expiry dates.
02

Integrity-checked queue

Every send request is cryptographically signed before it enters our processing pipeline, and verified again before delivery. Tampered or unsigned messages are rejected, never delivered.
03

Idempotent delivery

Every send carries a unique idempotency key. Duplicate retries from transient network issues are safely de-duplicated, your recipient sees exactly one copy.
04

Webhook delivery events

Subscribe your HTTPS endpoint to sent, delivered, bounced, complained, and failed events. Signed payloads on every request. Managed plans only: BYOC respects your data privacy.
05

Rate limiting & deliverability protection

60 requests/minute per key. Failed auth attempts are tracked and throttled. Bounce and complaint rates are monitored continuously across rolling windows, so a spike is caught early - accounts that cross our thresholds have sending paused automatically. See the Suppression and Suspension for what that means for you.
06

Full DNS verification suite

Guided setup for SPF, DKIM, MAIL FROM, and DMARC. Per-record verify buttons. BYOC domains are registered directly in your SES. DNS propagation up to 48 hours, check status anytime.

Three steps to your first send.

BYOC or Shared SES: both modes share the same onboarding flow up to step 3.

01

Create a free account

Register with your email, no credit card, no approval process, instant access. The Free BYOC plan (50 BYOC emails/month) works immediately without any AWS configuration on our end.
02

Add a sending domain

For BYOC: paste your IAM Role ARN: we validate it instantly and register the domain in your SES. For Shared SES: subscribe to a Managed plan and add DNS records. Both modes give you exact records to copy.
03

Generate a key and send

Create an API key (shown once, store it). Then POST /v1/send with X-API-Key: your_key. That's the entire integration. Delivery happens in the background.

Running WordPress? The official SendFleet plugin is step 3 for you: paste the key and every wp_mail() email goes through SendFleet, with no SMTP settings. Free on WordPress.org.

Plans and prices,
side by side.

Start free. Scale when you're ready. Switch modes anytime.

Free BYOC

$0
free, forever
  • ✓50 emails/month via your own SES
  • ✓Unlimited API keys
  • ✓Full dashboard access
  • ✓Shared SES smoke test, to your own address only
  • − Email log history
  • − Webhook events
1M sends a month

BYOC

$9
per month
  • ✓1,000,000 emails/month, your AWS SES quota also applies
  • ✓Unlimited API keys
  • ✓Complete data privacy
  • ✓Your SES reputation & limits
  • ✓Domain verification via your SES
  • ✓Priority email support
Recommended to start

Managed Starter

$5
per month
  • ✓5,000 emails/month
  • ✓Full email log history
  • ✓Webhook delivery events
  • ✓Bounce & complaint handling
  • ✓Priority email support

Managed Growth

$15
per month
  • ✓25,000 emails/month
  • ✓Full email log history
  • ✓Webhook delivery events
  • ✓Bounce & complaint handling
  • ✓Domain verification (Shared SES)
  • ✓Priority email support

Managed Pro

$59
per month
  • ✓100,000 emails/month
  • ✓Everything in Growth
  • ✓Priority support + SLA
  • ✓Advanced analytics

Five things only we do.
And four where somebody else wins.

Every figure was read off that provider's own pricing page. The rows where we lose stay in, because a comparison with nothing in it against us is not a comparison.

SendFleet Amazon SES Resend Postmark
Send through your own cloud account Yes, on BYOC Your account, but you build the integration No No
Recipient, subject and body held by the provider Never, on BYOC Whatever you build Email logs Message streams
Flat price for up to 1,000,000 emails a month Yes, $9 a month on BYOC Metered per email Tiered, then overage Tiered, then overage
Cheapest paid plan $5 for 5,000 emails Metered, $0.10 per 1,000 $20 for 50,000 $15 for 10,000
Change which account sends, per domain, on one key Yes One account No No
Free tier 50 a month, permanent, no card 3,000 a month, first 12 months only 3,000 a month, 100 a day 100 a month, permanent, no card
Cheapest at 100,000 a month $16, on SES direct rather than with us $16 $35, cheaper than us $18 plus $1.20 per 1,000
Sandbox to get out of first Only on BYOC Yes No, they publish that Review before sending to others
Published deliverability figure None None None Yes, and they lead with it

The five green rows are why this product exists, and none of the three other columns has an answer to any of them. That is the whole pitch. The four rows underneath are where one of them beats us or where we have nothing to show, and they are here because a table with only the easy rows in it is a table nobody believes.

Full comparison, with sources and dates →

Frequently asked questions.

BYOC means your emails send through your own AWS SES account. We access your IAM role using short-lived temporary credentials to make the API call, and your email content never touches our servers. You need an AWS account with SES approved for production access.

BYOC routes email through your AWS account, your reputation, your SES limits, and zero content stored on our side. Shared SES sends via our managed AWS infrastructure, stores your email logs in your dashboard, and requires no AWS setup. Both use the exact same API endpoint.

We store only a SHA-512 hash of your key, so your stored key cannot be read back. The raw secret is shown exactly once, when you create it. Each key also carries a short public label, so you can tell your keys apart in the dashboard. You can revoke a key from the dashboard, and a revoked key stops authenticating immediately.

ExternalId is a unique 48-character value generated when you save your BYOC config. It must appear in your IAM trust policy's Condition block. Without it, any party who learns your Role ARN could ask our infrastructure to assume it, the "confused deputy" attack. With ExternalId, only requests carrying the correct value (only we know it) can assume your role.

Yes. Plans and domains are independent. Note that sending domains are registered to a specific mode at creation time: BYOC domains live in your SES, Shared domains live in ours. Adding a new domain after switching modes takes a few minutes but is fully self-serve.

API requests beyond your plan's monthly limit return HTTP 429 until the billing period resets. You can upgrade to the next Managed tier anytime: Starter (5k) → Growth (25k) → Pro (100k), and the new limit applies immediately, no waiting for the next cycle.

Yes. 50 BYOC emails per month, no credit card, no time limit. It's deliberately low, enough to validate your integration end-to-end before committing to a paid plan. Upgrade to $9/month for 1,000,000 sends a month with no other changes to your code.

One endpoint.
Two sending modes.

Start free with 50 emails/month on your own AWS SES: no credit card. Or skip AWS entirely with Managed SES from $5/month.