On this page

Email & domains

DKIM checker

API · Pro

Coverage: Works with domains from any country. Without a selector we try the defaults of the big providers (Google, Microsoft 365, Zoho, Proton, Fastmail, Mailchimp and others) and the usual generic names, 33 in total. Keys are read as receiving servers do (RFC 6376): RSA and Ed25519.

Open tool
On this page

Purpose

Check a domain’s DKIM keys: type a selector or let us try the most common ones, and see each key’s type, its size in bits and whether it’s in testing or retired.

Requirements

Anyone can read these guides, no account needed. Some tools require Pro, as indicated in each guide.

DKIM lets a domain sign its email with a key published in DNS, so receivers can check that a message comes from that domain and wasn’t altered. Each key sits under a name called a selector. Type a domain and, if you know it, the selector; without one we try 33 common selectors.

How to use it

  1. Open an email sent by that domain and show its original or its headers (in Gmail: the three dots, then “Show original”).

  2. Find the “DKIM-Signature” header: “d=” is the domain and “s=” is the selector, for example s=selector1.

  3. Type the domain and the selector and press “Check DKIM”. Without a selector we try 33 common ones, such as default, google, selector1 or k1.

Synthetic example

Note

Invented example, not a real lookup. Do not call or open its links.

Synthetic example
selector1._domainkey.example.com

Interpret the result

The domain signs its email with DKIM: We found its public key: receivers can check that its messages come from this domain and weren’t altered on the way.

There are DKIM keys, with warnings: We found at least one key, but some are retired, in testing or too weak. The details are under each key.

No DKIM key at the common selectors: That doesn’t prove the domain has no DKIM: it may use another selector. You’ll find it in the “DKIM-Signature: s=” header of an email it sent you. Type it in “Selector” and check again.

No DKIM key at that selector: Check how it’s written: the selector is the “s=” value of the “DKIM-Signature” header, and the domain is its “d=” value.

The key is empty (p=): this selector is retired and no longer signs email.

The key is in testing mode (t=y): the domain asks receivers not to act when the signature fails.

The RSA key is shorter than 1024 bits: it can be broken and many receivers don’t accept it.

The RSA key has 1024 bits: still accepted, but 2048 is recommended.

The key only allows SHA-1, an old algorithm that’s no longer considered safe.

The key record has an error and can’t be read.

The key type isn’t RSA or Ed25519, so receivers can’t use it.

Limitations

Warning

That doesn’t prove the domain has no DKIM: it may use another selector. You’ll find it in the “DKIM-Signature: s=” header of an email it sent you. Type it in “Selector” and check again.

We read the domain’s public DNS records. If you type an email address or a link, only its domain leaves your browser. The domain you look up isn’t stored.

Troubleshooting

That doesn’t look like a public domain. Try something like example.com.

A selector can only have letters, numbers, hyphens, underscores and dots.

DNS didn’t answer in time. Try again in a few seconds.

You’ve run a lot of checks in a row. Wait a minute and try again.

Use with the API

Warning

Needs an API key and credits. Each completed call costs 1 credit, even when there is no data. An active Pro account includes 20 credits per UTC calendar month, shared by every API route and spent first; unused monthly credits do not roll over. Credits bought on your account page work without Pro and never expire.

Note

Errors are never charged: 401 invalid_api_key (missing or invalid key), 403 pro_required (no Pro credits and no purchased credits), 422 invalid input, 429 quota_exceeded (no credits left), rate_limit_exceeded or ai_busy (the AI of sms-check is at capacity), 503 tool_warming (the data is still being prepared) or tool or provider unavailable. After a 429 or 503, retry once the seconds in the Retry-After header have passed.

A domain’s DKIM keys at a selector, or at about 33 common selectors when none is given: each key’s type (rsa or ed25519), size in bits and whether it is in testing or revoked. none_found does not prove the domain has no DKIM: it may use another selector. Nothing is stored.

Send the JSON body to the tool's own route, or to POST /v2/tools with the tool field added. Both routes return the same result.

Endpoint
POST https://api.nocall.io/v2/dkim-check
POST https://api.nocall.io/v2/tools  {"tool":"dkim-check","domain":"example.com","selector":"s1"}

Parameters

NameTypeRequiredDescription
domainstring (1–320)YesA domain, or an email address or link whose domain is used, up to 320 characters. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422.
selectorstring (1–120)NoThe selector: the s= tag of a DKIM-Signature header, up to 120 characters. Without it, about 33 common selectors are tried.
bash
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/dkim-check' \
  --header "Authorization: Bearer $NOCALL_API_KEY" \
  --header 'Content-Type: application/json' \
  --header "Idempotency-Key: $REQUEST_ID" \
  --data '{"domain":"example.com","selector":"s1"}'

Example response (200)

This is the documented example from the API reference. Lookups use a fictional number, and aggregates and AI answers show the shape of the result, not live data.

JSON
{
  "data": {
    "tool": "dkim-check",
    "result": {
      "domain": "example.com",
      "domainAscii": "example.com",
      "selectorGiven": true,
      "selectorsTried": 1,
      "keys": [
        {
          "selector": "s1",
          "keyType": "rsa",
          "keyBits": 2048,
          "testing": false,
          "revoked": false,
          "valid": true,
          "signals": []
        }
      ],
      "signals": [],
      "attention": false
    }
  },
  "meta": {
    "requestId": "req_example",
    "unitsCharged": 1,
    "usage": {
      "periodStart": "2026-10-01",
      "unitLimit": 20,
      "unitsUsed": 3,
      "unitsRemaining": 17
    }
  }
}

Result fields (data.result)

FieldTypeDescription
domainstringThe domain in Unicode.
domainAsciistringThe same domain in ASCII (punycode), as DNS sees it.
selectorGivenbooleanWhether a selector was given; otherwise the common selectors were tried.
selectorsTriedintegerHow many selectors were looked up.
keysarray<object>Every selector that publishes a key: selector, keyType (rsa or ed25519), keyBits (256 for ed25519), testing (t=y), revoked (an empty p=), valid and its signals (revoked_key, testing_mode, weak_key, short_key, sha1_only, syntax_error or unknown_key_type).
signalsarray<"none_found">none_found: no key at the given selector or at any common selector (another selector may still be in use).
attentionbooleanWhether the result deserves a look: no key found, or a key that is invalid, revoked, in testing or weak.

Frequently asked questions

What is DKIM?

DomainKeys Identified Mail: the sending server signs each email with a private key and the domain publishes the public key in DNS. The receiving server checks the signature: if it matches, the email comes from that domain and wasn’t changed on the way.

What is a selector?

The name a key is published under, at selector._domainkey.example.com. A domain can have several, one per provider or per key change. It appears as “s=” in the “DKIM-Signature” header of each email.

Why doesn’t it find a key when the domain uses DKIM?

Selectors can have any name and DNS can’t list them. We try 33 common ones; if the domain uses another, type it in “Selector”. That’s why “not found” doesn’t prove there’s no DKIM.

What do 1024 and 2048 bits mean?

The size of the RSA key: the longer, the harder to break. 1024 bits is still accepted, but 2048 is what’s recommended. Below 1024, many receivers ignore the signature.