Email Authentication Check

Check a domain's email authentication from live DNS: SPF, DMARC policy, mail servers and DKIM selectors. The check to run before sending outreach.

Pay by wallet (x402) email-auth-check

Example

Input
{
  "domain": "google.com"
}
Answer
{
  "domain": "google.com",
  "has_mx": true,
  "mx_hosts": [
    "smtp.google.com"
  ],
  "dkim_note": "DKIM probed via common selectors only — a miss does not prove the domain has no DKIM; pass dkim_selector for an exact check",
  "dmarc_pct": null,
  "dkim_found": [
    {
      "selector": "google",
      "record_present": true
    }
  ],
  "spf_record": "v=spf1 include:_spf.google.com ~all",
  "spf_status": "present",
  "auth_summary": "enforced",
  "dmarc_policy": "reject",
  "dmarc_record": "v=DMARC1; p=reject; rua=mailto:...",
  "dmarc_status": "present",
  "dmarc_present": true,
  "dmarc_inherited_from": null,
  "dkim_checked_selectors": [
    "default",
    "google",
    "selector1",
    "selector2",
    "k1",
    "s1",
    "dkim"
  ],
  "dmarc_effective_policy": "reject",
  "dmarc_subdomain_policy": null
}

Inputs

FieldTypeRequiredWhat it is
taskstringNoFree-text alias — domain or email address
emailstringNoAlias — a full email address; its domain is checked
domainstringNoDomain to check (e.g. example.com)
dkim_selectorstringNoOptional exact DKIM selector to probe (otherwise common selectors are tried)

Output fields

How reliably each field appears in a successful answer.

FieldTypeAppears
domainstringAlways (present in every successful answer)
has_mxbooleanAlways (present in every successful answer)
mx_hostsarrayAlways (present in every successful answer)
dkim_notestring or nullUsually (present for most inputs)
dkim_foundarrayAlways (present in every successful answer)
spf_recordstring or nullUsually (present for most inputs)
spf_statusone of present, missing, invalid_multipleAlways (present in every successful answer)
auth_summaryone of enforced, partially_enforced, configured_monitor_only, incompleteAlways (present in every successful answer)
dmarc_policystring or nullUsually (present for most inputs)
dmarc_recordstring or nullUsually (present for most inputs)
dmarc_statusone of present, missing, invalid_multipleAlways (present in every successful answer)
dmarc_presentbooleanAlways (present in every successful answer)
dmarc_inherited_fromstring or nullSometimes (present only for some inputs)
dkim_checked_selectorsarrayAlways (present in every successful answer)
dmarc_effective_policystring or nullUsually (present for most inputs)
dmarc_subdomain_policy—Sometimes (present only for some inputs)
dmarc_pct—Sometimes (present only for some inputs)

How to call it

The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.

# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
  -H "Authorization: Bearer $STRALE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "capability_slug": "email-auth-check",
    "inputs": {
      "domain": "google.com"
    },
    "max_price_cents": 3
  }'

Limitations

  • Custom DKIM selectors can be missed

    Without a dkim_selector input, only common selectors (default, google, selector1/2, k1, s1, dkim) are probed. DKIM published under a custom selector will not be found; the output says "not found via common selectors", never "domain has no DKIM".

    What to do instead: Pass dkim_selector for an exact check (find it in a received message's DKIM-Signature s= tag)

  • SPF is presence/shape-checked, not fully evaluated

    The check verifies a single valid-looking v=spf1 record exists (and flags the RFC 7208 multiple-record failure) but does not recursively evaluate includes or compute the effective pass set.