Parse incoming email into structured JSON. Deliver via webhook or pull from the API. SDKs for every language. No mail server required.
npm install mailkite — or the equivalent for your language. Every SDK mirrors the same API surface.
Add your domain to MailKite and point MX records. We handle authentication (SPF, DKIM, DMARC) automatically.
Register a webhook or poll the API. Every inbound email arrives as structured JSON — ready to act on.
Type-safe, same API surface across every language.
Dashboard → Messages
Filter Received · myapp.ai
Click any row for the full message, headers,
delivery attempts, and attachment links.Show me the last 10 messages to support@myapp.ai, then open the
one from ada@example.com in full.import { MailKite } from "mailkite";
const mk = new MailKite(process.env.MAILKITE_API_KEY);
// An array, newest first.
const messages = await mk.listMessages(undefined, 10);
// Pull one in full — decoded body, headers, attachment links.
const message = await mk.getMessage(messages[0].id);import os
from mailkite import MailKite
mk = MailKite(os.environ["MAILKITE_API_KEY"])
# A list, newest first.
messages = mk.listMessages(limit=10)
# Pull one in full — decoded body, headers, attachment links.
message = mk.getMessage(messages[0]["id"])<?php
$mk = new \MailKite\Client(getenv('MAILKITE_API_KEY'));
// An array, newest first.
$messages = $mk->listMessages(null, 10);
// Pull one in full — decoded body, headers, attachment links.
$message = $mk->getMessage($messages[0]['id']);MailKite mk = new MailKite(System.getenv("MAILKITE_API_KEY"));
// A list, newest first.
Object messages = mk.listMessages(null, 10);
// Pull one in full — decoded body, headers, attachment links.
Object message = mk.getMessage("msg_2Hk9…");mk := mailkite.New(os.Getenv("MAILKITE_API_KEY"))
// A slice, newest first.
messages, err := mk.ListMessages(mailkite.Limit(10))
// Pull one in full — decoded body, headers, attachment links.
message, err := mk.GetMessage("msg_2Hk9…")require "mailkite"
mk = Mailkite::Client.new(ENV["MAILKITE_API_KEY"])
# An array, newest first.
messages = mk.listMessages(nil, 10)
# Pull one in full — decoded body, headers, attachment links.
message = mk.getMessage(messages[0]["id"])# Newest first.
curl "https://api.mailkite.dev/api/messages?limit=10" \
-H "Authorization: Bearer $MAILKITE_API_KEY"
# Pull one in full — decoded body, headers, attachment links.
curl https://api.mailkite.dev/api/messages/msg_2Hk9… \
-H "Authorization: Bearer $MAILKITE_API_KEY" Pull messages via the REST API or get them pushed to your webhook in real-time. Both paths return the same clean JSON.
Type-safe SDKs for Node, Python, Go, Ruby, PHP, Java, .NET, and Rust. Every method mirrors the API 1:1.
Every webhook includes an x-mailkite-signature header. Verify authenticity with one function call in any language.
threadId resolves In-Reply-To and References headers. Group replies into conversations without parsing email headers.
Attachments are extracted, stored, and delivered as signed URLs. Download directly or process in your pipeline.
Add a domain, verify MX records, and start receiving in under 5 minutes. SPF, DKIM, and DMARC handled automatically.
An inbound email API receives email on your behalf, parses the message into structured data (sender, subject, body, attachments), and delivers it to your application via a webhook or API call. MailKite delivers pre-parsed JSON — no MIME handling required.
SendGrid delivers inbound email as a multipart form POST, requiring you to re-parse the MIME structure. MailKite delivers a clean JSON payload with HMAC signature verification, built-in threading, and attachment URLs — no re-parsing.
Yes. MailKite has official SDKs for Node.js, Python, Go, Ruby, PHP, Java, .NET, and Rust. Every SDK mirrors the REST API 1:1 with type-safe bindings.
MailKite parses and delivers inbound email in under 1 second. Webhooks fire immediately; the REST API is updated within seconds of receipt.
Get an API key, add a domain, receive your first email in under 5 minutes.