email infrastructure, with an api

send. parse.
forward.

Transactional send, inbound parsing, per-domain forwarding aliases, and a webhook for every event. One API. Hosted in EU. Pay per message.

free tier: 1,000 messages / month. no card.

send a transactional email
curl https://api.klyfta.co/v1/messages \
  -H "Authorization: Bearer $KLYFTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from":    "hi@yourdomain.com",
    "to":      "user@example.com",
    "subject": "welcome",
    "text":    "thanks for signing up."
  }'

{ "id": "msg_01HQ4PZN3K", "status": "queued" }

the stack

four primitives, one api, no surprises.

outbound

POST /v1/messages

Transactional send via REST or SMTP relay. SPF, DKIM, DMARC, BIMI configured per domain through the API. Per-message routing rules. Bounce / complaint webhooks first-class.

inbound

POST /v1/inbound/routes

Receive mail at any address on your domain and get a structured JSON payload (parsed body, headers, attachments) at a webhook URL you specify. Reply-to threading preserved.

aliases

POST /v1/aliases

Per-domain forwarding aliases configured by API. Each alias has its own destination, its own filters, its own pause state. Plus a true catch-all when you want one.

events

POST /v1/webhooks

Every send, delivery, bounce, complaint, open, click, inbound message — emitted as a signed webhook to the URL you specify. Replayable for 30 days.

the api, in three calls

what most apps actually need.

create a forwarding alias

POST /v1/aliases

curl https://api.klyfta.co/v1/aliases \
  -H "Authorization: Bearer $KLYFTA_KEY" \
  -d '{
    "domain":    "yourdomain.com",
    "prefix":    "support",
    "forward_to":"team@example.com"
  }'

{ "id": "ali_01HQ4QP", "address": "support@yourdomain.com" }

register an inbound webhook

POST /v1/inbound/routes

curl https://api.klyfta.co/v1/inbound/routes \
  -H "Authorization: Bearer $KLYFTA_KEY" \
  -d '{
    "match":   "reply+*@yourdomain.com",
    "url":     "https://app.yourdomain.com/inbound",
    "include":["text","html","attachments"]
  }'

{ "id": "rte_01HQ4R7", "active": true }

subscribe to delivery events

POST /v1/webhooks

curl https://api.klyfta.co/v1/webhooks \
  -H "Authorization: Bearer $KLYFTA_KEY" \
  -d '{
    "url":   "https://app.yourdomain.com/hooks/email",
    "events":["delivered","bounced","complained"]
  }'

{ "id": "whk_01HQ4SA", "signing_key": "whsec_..." }

Full reference at /docs. SDKs for Node, Go, Python, Ruby ship from the same OpenAPI spec.

pricing

per-message. no seat tax.

You pay for the messages you send and receive — nothing for "users", nothing for sitting open a dashboard. Bill calculation is on a public page.

free

for prototypes and tiny side-projects

€0

1,000 msgs / mo

  • +outbound, inbound, aliases, webhooks
  • +1 domain
  • +community support
  • +EU-hosted
start with free

developer

for shipped products with real traffic

€0.40

/ 1,000 msgs

  • +everything in free
  • +unlimited domains
  • +30-day event replay
  • +human support inside two business days
start with developer

scale

high-volume, predictable monthly bill

from €0.20

/ 1,000 msgs

  • +everything in developer
  • +dedicated IP optional
  • +custom signing keys
  • +SLA + named contact
start with scale

! we don't do newsletter blasts. if you need to send 50k marketing emails in one go, klyfta will rate-limit you — use a marketing tool.

common questions

things we get asked.

what's the difference between klyfta and SendGrid?
SendGrid (and Mailgun, Postmark, etc.) are good at outbound transactional. klyfta does outbound + inbound parsing + per-domain forwarding aliases through one API with consistent webhooks. If you only need to send, those are fine. If you also need to receive and to do alias routing, you'd otherwise stitch together two or three services.
what's the difference between klyfta and polymail?
polymail is a consumer mail product — a person opens an inbox and reads it. klyfta is infrastructure — your application opens HTTP connections to us. Different audience, different layer.
where are servers located?
EU. Specifically: a primary region with read replicas. We publish the exact provider and region on a public infrastructure page; if we ever move infrastructure, that page updates before the change, not after.
do you train models on the mail you parse?
No. Inbound mail is parsed, signed, posted to your webhook, and dropped from our side within 30 days of delivery (sooner if you ask). No content goes to model training, ours or anyone else's.
can I use klyfta to send marketing campaigns?
Not really. We rate-limit large concurrent sends to a single domain. That's deliberate — marketing campaigns belong on platforms with engagement scoring, suppression lists and unsubscribe pipelines. We are not that.
is there an SDK for X?
Node, Go, Python, Ruby ship today, all generated from the same OpenAPI spec. The raw HTTP API is fine for anything else; one-file implementations in Rust, PHP, .NET are in our examples repo.