DKIM keys

Publish and verify the DKIM records returned when you add a domain.

wemail provisions Easy DKIM when you add a sending domain. The domain response includes the selector or CNAME tokens you must publish. Use GET /v3/domains/{name} to retrieve the current records and PUT /v3/domains/{name}/verify after DNS propagation.

Rotation

Easy DKIM keys rotate automatically. Keep every active CNAME record published; wemail verifies the replacement before traffic moves to it.

Code examples

cURL
curl -X POST https://api.wemail.io/v3/domains \
  -H "Authorization: Bearer afn_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "domain": "mail.acme.io" }'
Node.js
await wemail.domains.create({ domain: "mail.acme.io" });
Python
wemail.domains.create(domain="mail.acme.io")
PHP
$wemail->domains->create(['domain' => 'mail.acme.io']);
Ruby
wemail.domains.create(domain: "mail.acme.io")
Go
client.Domains.Create(ctx, &wemail.DomainParams{Domain: "mail.acme.io"})
Java
wemail.domains().create("mail.acme.io");
.NET
await wemail.Domains.CreateAsync(new DomainParams { Domain = "mail.acme.io" });
ResponseExample response
{
  "id": "dom_01HCXV5Z…",
  "domain": "mail.acme.io",
  "status": "pending",
  "spf": false,
  "dkim": false,
  "dmarc": false,
  "dkim_selector": "afn8kq2x1w9",
  "tracking_subdomain": "track.mail.acme.io",
  "dns_records": [
    { "type": "CNAME", "host": "afn8kq2x1w9._domainkey.mail.acme.io", "value": "afn8kq2x1w9.dkim.wemail.io", "ok": false },
    { "type": "TXT",   "host": "mail.acme.io",                        "value": "v=spf1 include:wemail.io ~all", "ok": false },
    { "type": "CNAME", "host": "track.mail.acme.io",                  "value": "track.wemail.io", "ok": false },
    { "type": "TXT",   "host": "_dmarc.mail.acme.io",                 "value": "v=DMARC1; p=none;", "ok": false }
  ],
  "sent_count": 0,
  "reputation": null,
  "created_at": "2026-05-10T09:42:18Z",
  "verified_at": null
}