Email Auth API

API reference

Email Auth HTTP endpoints on api.syndaq.com.

All Email Auth endpoints are served from https://api.syndaq.com/v1/emailauth/.

Authenticated requests require a valid Email Auth key. Lookup routes require your ea_sec_ secret key.

Endpoints overview

MethodPathAuthPurpose
GET/v1/emailauth/lookupSecret keyLookup by ?domain= query parameter
GET/v1/emailauth/lookup/{domain}Secret keyLookup by domain in the URL path
GET/v1/emailauth/statusPublic or secret keyPlan limits and quota snapshot

Response headers

Successful and error responses may include:

HeaderDescription
X-Request-IdUnique ID for support and log correlation
X-RateLimit-LimitPlan requests per minute for this key
X-RateLimit-RemainingRequests left in the current minute window
X-RateLimit-ResetUnix timestamp when the minute window resets
X-Quota-LimitMonthly quota for the subscription
X-Quota-RemainingLookups left this calendar month (UTC)
X-Quota-PeriodCurrent quota month (YYYY-MM)
Retry-AfterSeconds to wait after HTTP 429

GET /v1/emailauth/lookup

Returns SPF, DKIM, and DMARC authentication signals for a single domain.

Request

Pass the target domain using one of these forms:

GET /v1/emailauth/lookup/example.com
GET /v1/emailauth/lookup?domain=example.com

Headers:

Authorization: Bearer ea_sec_YOUR_SECRET_KEY

Success response (200)

{
  "success": true,
  "domain": "example.com",
  "cached": true,
  "fetched_at": "2026-07-15 12:00:00.000",
  "score": 100,
  "spf": {
    "found": true,
    "record": "v=spf1 -all"
  },
  "dkim": {
    "found": true,
    "selectors": [
      {
        "selector": "selector1",
        "record": "v=DKIM1; k=rsa; p=MIGfMA0GCSq..."
      }
    ]
  },
  "dmarc": {
    "found": true,
    "record": "v=DMARC1; p=reject; rua=mailto:[email protected]"
  },
  "request_id": "e6d04020be9b57b1e1069d6e483c0443"
}

Scoring

The score is a presence-based composite (0–100):

SignalPoints when found
SPF35
DMARC40
DKIM (any known selector)25

This score reflects whether records exist, not policy strength or alignment success on real mail.

DKIM is detected by querying common selectors (default, google, selector1, selector2, k1, s1, s2, mail, smtp) as {selector}._domainkey.{domain} TXT records.

Response fields

FieldTypeDescription
domainstringNormalized domain that was checked
cachedbooleantrue when Syndaq already holds a recent result for this lookup
fetched_atstringWhen this result was last retrieved
scoreintegerComposite presence score from 0 to 100
spf.foundbooleanWhether a v=spf1 TXT record was found
spf.recordstring \nullRaw SPF record when present
dkim.foundbooleanWhether any DKIM selector returned a record
dkim.selectorsarrayMatching selector objects (selector, record)
dmarc.foundbooleanWhether a v=DMARC1 record was found at _dmarc.
dmarc.recordstring \nullRaw DMARC record when present

GET /v1/emailauth/status

Returns key status, plan limits, and quota usage without performing a lookup.

Request

GET /v1/emailauth/status
Authorization: Bearer ea_sec_YOUR_SECRET_KEY

The public key (ea_pub_) is accepted on this route.

Success response (200)

{
  "success": true,
  "status": "active",
  "product": "emailauth",
  "plan": "starter",
  "rate_limit_per_minute": 120,
  "monthly_quota": 10000,
  "quota_unlimited": false,
  "quota_remaining": 9842,
  "quota_period": "2026-07",
  "database_records": 42000
}

Errors

Failed requests return JSON with success: false, error, error_code, and usually request_id.

HTTPerror_codeTypical cause
400invalid_domainMissing or malformed domain
401missing_credentialsNo API key provided
401invalid_api_keyUnknown, inactive, or revoked key
401wrong_key_typePublic key used on a lookup endpoint
403ip_not_allowedCaller IP not on the key allowlist
429rate_limit_exceededPer-minute limit exceeded
429quota_exceededMonthly quota exhausted
502lookup_failedTemporary DNS lookup failure
500internal_errorUnexpected server error

Handle non-200 responses in your application and retry transient errors with exponential backoff.