Search and register a domain from the dashboard and MailKite provisions SPF, DKIM, and MX automatically — it's usually verified the moment it's registered. Not ready to commit to a domain yet? Claim a free MailKite subdomain and start sending and receiving today.
Search availability and register a new domain from MailKite — no separate registrar account, no copy-pasting nameservers.
SPF, DKIM, and MX are set up as part of registration, so a newly registered domain is typically verified immediately — no manual records to paste.
Claim a free MailKite subdomain and send and receive today, then move to your own domain later without changing your integration.
A newly registered domain or a managed subdomain works exactly like any other domain on your account — same API, same webhook, same free tier.
Search a domain name from the dashboard (or the API) and see what's available to register.
Register the domain in your name — MailKite provisions the mail DNS as part of the flow, so there's no separate DNS step.
The domain is typically verified the moment it's registered — create a mailbox, a route, or start calling the Send API right away.
Registration and mail DNS happen together — no nameserver copy-paste, no waiting on propagation.
Dashboard → Domains → [ Register a domain ]
Search myapp.dev
● available — price shown before you confirm
Click [ Register ]
SPF, DKIM, and MX are provisioned for you — usually
verified the moment registration completes.Check whether myapp.dev is available to register — if it is,
register it and set it up for email.import { MailKite } from "mailkite";
const mk = new MailKite(process.env.MAILKITE_API_KEY);
// Read-only — no charge.
const check = await mk.checkDomainAvailability("myapp.dev");
if (check.available) {
// Charges your card, then provisions SPF/DKIM/MX and adds the
// domain to your account in the same call.
const res = await mk.registerDomain({
domain: "myapp.dev",
contact: {
firstName: "Ada", lastName: "Lovelace",
email: "ada@example.com", phone: "+1.4155551234",
address: "1 Main St", city: "San Francisco",
zip: "94105", country: "US",
},
});
}import os
from mailkite import MailKite
mk = MailKite(os.environ["MAILKITE_API_KEY"])
# Read-only — no charge.
check = mk.checkDomainAvailability("myapp.dev")
if check["available"]:
# Charges your card, then provisions SPF/DKIM/MX and adds the
# domain to your account in the same call.
res = mk.registerDomain({
"domain": "myapp.dev",
"contact": {
"firstName": "Ada", "lastName": "Lovelace",
"email": "ada@example.com", "phone": "+1.4155551234",
"address": "1 Main St", "city": "San Francisco",
"zip": "94105", "country": "US",
},
})<?php
$mk = new \MailKite\Client(getenv('MAILKITE_API_KEY'));
// Read-only — no charge.
$check = $mk->checkDomainAvailability('myapp.dev');
if ($check['available']) {
// Charges your card, then provisions SPF/DKIM/MX and adds the
// domain to your account in the same call.
$res = $mk->registerDomain([
'domain' => 'myapp.dev',
'contact' => [
'firstName' => 'Ada', 'lastName' => 'Lovelace',
'email' => 'ada@example.com', 'phone' => '+1.4155551234',
'address' => '1 Main St', 'city' => 'San Francisco',
'zip' => '94105', 'country' => 'US',
],
]);
}MailKite mk = new MailKite(System.getenv("MAILKITE_API_KEY"));
// Read-only — no charge.
Object check = mk.checkDomainAvailability("myapp.dev");
// Charges your card, then provisions SPF/DKIM/MX and adds the
// domain to your account in the same call.
Object res = mk.registerDomain(Map.of(
"domain", "myapp.dev",
"contact", Map.of(
"firstName", "Ada", "lastName", "Lovelace",
"email", "ada@example.com", "phone", "+1.4155551234",
"address", "1 Main St", "city", "San Francisco",
"zip", "94105", "country", "US")
));mk := mailkite.New(os.Getenv("MAILKITE_API_KEY"))
// Read-only — no charge.
check, err := mk.CheckDomainAvailability("myapp.dev")
// Charges your card, then provisions SPF/DKIM/MX and adds the
// domain to your account in the same call.
res, err := mk.RegisterDomain(map[string]any{
"domain": "myapp.dev",
"contact": map[string]any{
"firstName": "Ada", "lastName": "Lovelace",
"email": "ada@example.com", "phone": "+1.4155551234",
"address": "1 Main St", "city": "San Francisco",
"zip": "94105", "country": "US",
},
})require "mailkite"
mk = Mailkite::Client.new(ENV["MAILKITE_API_KEY"])
# Read-only — no charge.
check = mk.checkDomainAvailability("myapp.dev")
if check["available"]
# Charges your card, then provisions SPF/DKIM/MX and adds the
# domain to your account in the same call.
res = mk.registerDomain(
"domain" => "myapp.dev",
"contact" => {
"firstName" => "Ada", "lastName" => "Lovelace",
"email" => "ada@example.com", "phone" => "+1.4155551234",
"address" => "1 Main St", "city" => "San Francisco",
"zip" => "94105", "country" => "US"
}
)
end# Check availability and price — read-only, no charge.
curl "https://api.mailkite.dev/api/domains/register/check?domain=myapp.dev" \
-H "Authorization: Bearer $MAILKITE_API_KEY"
# Register it — charges your card, then provisions SPF/DKIM/MX
# and adds the domain to your account in the same call.
curl https://api.mailkite.dev/api/domains/register \
-H "Authorization: Bearer $MAILKITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "myapp.dev",
"contact": {
"firstName": "Ada", "lastName": "Lovelace",
"email": "ada@example.com", "phone": "+1.4155551234",
"address": "1 Main St", "city": "San Francisco",
"zip": "94105", "country": "US"
}
}' {
"domain": { "id": "dom_…", "domain": "myapp.dev", "status": "verified" },
"dns": [
{ "type": "MX", "name": "myapp.dev", "value": "mx.mailkite.dev", "priority": 10 },
{ "type": "TXT", "name": "myapp.dev", "value": "v=spf1 include:mailkite.dev ~all" },
{ "type": "TXT", "name": "mailkite._domainkey.myapp.dev", "value": "v=DKIM1; k=rsa; p=…" }
],
"registration": { "status": "registered", "reference": "reg_…" },
"dnsProvisioned": true,
"charge": { "amount": 1200, "currency": "usd", "status": "captured" }
}{
"domain": { "id": "dom_…", "domain": "myapp.dev", "status": "verified" },
"dns": [
{ "type": "MX", "name": "myapp.dev", "value": "mx.mailkite.dev", "priority": 10 },
{ "type": "TXT", "name": "myapp.dev", "value": "v=spf1 include:mailkite.dev ~all" },
{ "type": "TXT", "name": "mailkite._domainkey.myapp.dev", "value": "v=DKIM1; k=rsa; p=…" }
],
"registration": { "status": "registered", "reference": "reg_…" },
"dnsProvisioned": true,
"charge": { "amount": 1200, "currency": "usd", "status": "captured" }
}{
"domain": { "id": "dom_…", "domain": "myapp.dev", "status": "verified" },
"dns": [
{ "type": "MX", "name": "myapp.dev", "value": "mx.mailkite.dev", "priority": 10 },
{ "type": "TXT", "name": "myapp.dev", "value": "v=spf1 include:mailkite.dev ~all" },
{ "type": "TXT", "name": "mailkite._domainkey.myapp.dev", "value": "v=DKIM1; k=rsa; p=…" }
],
"registration": { "status": "registered", "reference": "reg_…" },
"dnsProvisioned": true,
"charge": { "amount": 1200, "currency": "usd", "status": "captured" }
}{
"domain": { "id": "dom_…", "domain": "myapp.dev", "status": "verified" },
"dns": [
{ "type": "MX", "name": "myapp.dev", "value": "mx.mailkite.dev", "priority": 10 },
{ "type": "TXT", "name": "myapp.dev", "value": "v=spf1 include:mailkite.dev ~all" },
{ "type": "TXT", "name": "mailkite._domainkey.myapp.dev", "value": "v=DKIM1; k=rsa; p=…" }
],
"registration": { "status": "registered", "reference": "reg_…" },
"dnsProvisioned": true,
"charge": { "amount": 1200, "currency": "usd", "status": "captured" }
}{
"domain": { "id": "dom_…", "domain": "myapp.dev", "status": "verified" },
"dns": [
{ "type": "MX", "name": "myapp.dev", "value": "mx.mailkite.dev", "priority": 10 },
{ "type": "TXT", "name": "myapp.dev", "value": "v=spf1 include:mailkite.dev ~all" },
{ "type": "TXT", "name": "mailkite._domainkey.myapp.dev", "value": "v=DKIM1; k=rsa; p=…" }
],
"registration": { "status": "registered", "reference": "reg_…" },
"dnsProvisioned": true,
"charge": { "amount": 1200, "currency": "usd", "status": "captured" }
}{
"domain": { "id": "dom_…", "domain": "myapp.dev", "status": "verified" },
"dns": [
{ "type": "MX", "name": "myapp.dev", "value": "mx.mailkite.dev", "priority": 10 },
{ "type": "TXT", "name": "myapp.dev", "value": "v=spf1 include:mailkite.dev ~all" },
{ "type": "TXT", "name": "mailkite._domainkey.myapp.dev", "value": "v=DKIM1; k=rsa; p=…" }
],
"registration": { "status": "registered", "reference": "reg_…" },
"dnsProvisioned": true,
"charge": { "amount": 1200, "currency": "usd", "status": "captured" }
}{
"domain": { "id": "dom_…", "domain": "myapp.dev", "status": "verified" },
"dns": [
{ "type": "MX", "name": "myapp.dev", "value": "mx.mailkite.dev", "priority": 10 },
{ "type": "TXT", "name": "myapp.dev", "value": "v=spf1 include:mailkite.dev ~all" },
{ "type": "TXT", "name": "mailkite._domainkey.myapp.dev", "value": "v=DKIM1; k=rsa; p=…" }
],
"registration": { "status": "registered", "reference": "reg_…" },
"dnsProvisioned": true,
"charge": { "amount": 1200, "currency": "usd", "status": "captured" }
} No — bring any domain you already own and point its MX/SPF/DKIM at MailKite instead. Registering through MailKite is for when you don't have a domain yet and want the purchase and DNS handled in one step.
No — you pay the registrar cost for the domain itself (shown before you confirm), charged to your card on file. What's free is the mail DNS: SPF, DKIM, and MX are provisioned automatically as part of registration.
It's a free, instantly-verified subdomain for testing or launching before you've settled on (or paid for) a real domain — sending and receiving both work immediately.
Yes — add and verify your own domain whenever you're ready and switch addresses over; your API integration and account don't change.
Start free on unlimited domains — no credit card. Or browse the other solutions.