Domains

Add sending domains, configure DNS records, and verify ownership.

One-click Cloudflare DNS setup

If your domain uses Cloudflare DNS, SMTPfast can configure DKIM, SPF, DMARC, and the MAIL FROM bounce subdomain in one step via Cloudflare Domain Connect. No copy-pasting DNS records.

  1. Add the domain in SMTPfast. SMTPfast detects you are on Cloudflare from the NS records.
  2. On the domain detail page, click Connect Cloudflare. A new tab opens at dash.cloudflare.com showing every DNS record SMTPfast wants to add for this domain.
  3. Approve. Cloudflare writes the records, then redirects you back to SMTPfast.
  4. Click Verify Now on the detail page. Status flips to verified within a few minutes.

For every other provider (GoDaddy, IONOS, Squarespace, Namecheap, Route 53, etc.) the manual DNS records below still work. We are rolling out one-click setup to additional providers as their Domain Connect templates get onboarded.

POST/v1/domains

Add a new sending domain. Returns the DNS records you need to configure.

Parameters

ParameterTypeRequiredDescription
domainstringYesThe domain name to add (e.g. yourapp.com)

Request Body

json
{
  "domain": "yourapp.com"
}

Response

json
{
  "id": "dom_xyz789",
  "domain": "yourapp.com",
  "status": "pending",
  "dns_records": [
    {
      "type": "CNAME",
      "name": "abc123._domainkey.yourapp.com",
      "value": "abc123.dkim.amazonses.com",
      "purpose": "DKIM signing"
    },
    {
      "type": "CNAME",
      "name": "def456._domainkey.yourapp.com",
      "value": "def456.dkim.amazonses.com",
      "purpose": "DKIM signing"
    },
    {
      "type": "CNAME",
      "name": "ghi789._domainkey.yourapp.com",
      "value": "ghi789.dkim.amazonses.com",
      "purpose": "DKIM signing"
    },
    {
      "type": "TXT",
      "name": "yourapp.com",
      "value": "v=spf1 include:amazonses.com ~all",
      "purpose": "SPF authorization"
    },
    {
      "type": "TXT",
      "name": "_dmarc.yourapp.com",
      "value": "v=DMARC1; p=none;",
      "purpose": "DMARC policy"
    },
    {
      "type": "MX",
      "name": "bounce.yourapp.com",
      "value": "feedback-smtp.us-east-1.amazonses.com",
      "priority": 10,
      "purpose": "MAIL FROM bounce delivery"
    },
    {
      "type": "TXT",
      "name": "bounce.yourapp.com",
      "value": "v=spf1 include:amazonses.com ~all",
      "purpose": "MAIL FROM SPF"
    }
  ]
}
GET/v1/domains

List all domains on your account with their verification status.

Response

json
{
  "data": [
    {
      "id": "dom_xyz789",
      "domain": "yourapp.com",
      "status": "verified",
      "created_at": "2026-04-01T10:00:00Z",
      "verified_at": "2026-04-01T10:15:00Z"
    },
    {
      "id": "dom_abc456",
      "domain": "staging.yourapp.com",
      "status": "pending",
      "created_at": "2026-04-05T14:00:00Z",
      "verified_at": null
    }
  ]
}
GET/v1/domains/:id

Get full details for a domain including its DNS records and verification status.

Parameters

ParameterTypeRequiredDescription
idstringYesThe domain ID

Response

json
{
  "id": "dom_xyz789",
  "domain": "yourapp.com",
  "status": "verified",
  "created_at": "2026-04-01T10:00:00Z",
  "verified_at": "2026-04-01T10:15:00Z",
  "dns_records": [
    {
      "type": "CNAME",
      "name": "abc123._domainkey.yourapp.com",
      "value": "abc123.dkim.amazonses.com",
      "status": "verified"
    },
    {
      "type": "CNAME",
      "name": "def456._domainkey.yourapp.com",
      "value": "def456.dkim.amazonses.com",
      "status": "verified"
    },
    {
      "type": "CNAME",
      "name": "ghi789._domainkey.yourapp.com",
      "value": "ghi789.dkim.amazonses.com",
      "status": "verified"
    },
    {
      "type": "TXT",
      "name": "_dmarc.yourapp.com",
      "value": "v=DMARC1; p=none;",
      "status": "verified"
    }
  ]
}
POST/v1/domains/:id/verify

Trigger a verification check for the domain. SMTPfast will query your DNS records and update the status.

Parameters

ParameterTypeRequiredDescription
idstringYesThe domain ID

Response

json
{
  "id": "dom_xyz789",
  "domain": "yourapp.com",
  "status": "verified",
  "verified_at": "2026-04-05T12:30:00Z"
}

Claiming a domain another account holds

A domain belongs to one account. If someone added your domain before you (a former contractor, an old account, a typo on their side) and never verified it, adding it returns 409 with code: "domain_claimable" and a TXT record bound to your team. Publish that record, call the claim endpoint, and the domain moves to you in its unverified state; you then publish the DKIM, SPF and DMARC records as usual. The previous holder is told by email and any mail they still had queued through the domain is cancelled. A domain the other account verified at any point in the past cannot be claimed this way; contact support.

GET/v1/domains/claim

The TXT record to publish before claiming a domain. Requires the domain:read scope.

Parameters

ParameterTypeRequiredDescription
domainstringYesThe domain to claim (query parameter)

Response

json
{
  "domain": "acme.com",
  "record": { "type": "TXT", "name": "_smtpfast-claim.acme.com", "value": "smtpfast-claim=3f9a...", "ttl": "Auto" }
}
POST/v1/domains/claim

Check the TXT record and move the domain to your team. Requires the domain:write scope. Limited to 20 checks per hour per team.

422 with code claim_record_missing means the record was not visible yet; the response repeats the record to publish. 503 with code dns_unavailable means our resolver failed, try again shortly. 409 with code verified_elsewhere means the other account verified the domain at some point. The record is bound to the current holder's row, so it stops working once the domain changes hands. The claim counts against your plan's domain limit like a normal add.

Parameters

ParameterTypeRequiredDescription
domainstringYesThe domain to claim

Request Body

json
{ "domain": "acme.com" }

Response

json
{
  "id": "dom_xyz789",
  "domain": "acme.com",
  "status": "pending",
  "created_at": "2026-09-03T09:00:00.000Z",
  "message": "Domain claimed. Publish its DNS records to verify it for sending."
}

DNS Record Types

DKIM (CNAME records)

DomainKeys Identified Mail cryptographically signs outgoing emails so receiving servers can verify they came from your domain. SMTPfast provides three SES DKIM CNAME records.

SPF (TXT record)

Sender Policy Framework tells receiving servers which mail servers are allowed to send email on behalf of your domain. SMTPfast should be included in your existing SPF record if one already exists. Do not publish multiple SPF TXT records for the same hostname; merge providers into one record instead.

DMARC (TXT record)

Domain-based Message Authentication, Reporting, and Conformance defines how receiving servers should handle emails that fail SPF or DKIM checks. A basic p=none policy is recommended to start, then tighten to p=quarantine or p=reject once you confirm everything works.

MAIL FROM (MX and TXT records)

SMTPfast uses a bounce subdomain such as bounce.yourapp.com so bounce handling and SPF alignment match your sending domain. Two records are needed on the bounce subdomain: an MX pointing at SES (so receivers can deliver bounce reports) and a SPF TXT authorising SES on the bounce subdomain itself.

Troubleshooting

Status stuck on “DNS records visible, waiting for SES”

SES has seen your DKIM records and is finishing identity verification on its own schedule (typically minutes, sometimes up to a few hours). Click Verify Now on the domain detail page to refresh status. No action needed.

MAIL FROM shows “Failed” even though the records are in DNS

SES does not auto-retry MAIL FROM verification once it has marked the configuration failed. Click Verify Now in the SMTPfast UI; it re-arms the MAIL FROM identity behind the scenes which kicks SES into a fresh check. Status moves back to pending, then to verified within a few minutes if the records are correct.

DKIM stays on “Failed” for several hours

Confirm the three CNAME records are present and resolvable (most DNS providers proxy CNAMEs by default; on Cloudflare, ensure the cloud icon next to each DKIM CNAME is grey, not orange). If the records are correct and DKIM still shows as Failed, contact us at [email protected] and we will retry verification on the SES side.

I want to delete a domain and start over

The domain detail page has a Danger zone at the bottom of the Configuration tab. Deleting removes the SES identity, all DKIM tokens, and verification state. Any API key still sending from that domain stops working immediately. Re-adding the same domain afterwards generates fresh DKIM tokens, so the existing CNAMEs in DNS need to be replaced.