Email authentication posture (SPF, DMARC, MTA-STS) API

Email authentication posture of a domain from DNS (Cloudflare DNS over HTTPS): MX records and null MX, SPF parsed into mechanisms with its all qualifier and a recursive DNS-lookup count against the RFC 7208 limit of 10, DMARC policy (p, sp, pct, alignment, report addresses' domains), MTA-STS and TLS-RPT records, and BIMI. DKIM is not assessed because selectors cannot be enumerated. Returns an A-F grade and 0-100 score with weighted reasons.

$0.003 per call  USDC over x402 v2 on Base, Polygon, Arbitrum, Avalanche or Sei. No signup, no API key. Requests that fail or match nothing are not charged.

Endpoint

GET https://api.kit-rx.com/v1/domain/email-auth

Parameters

NameTypeRequiredDescription
domainstringyesBare domain, hostname, email address or URL. Scheme, path, port and credentials are stripped and IDNs are converted to punycode. IP addresses and private names are rejected. e.g. github.com

Example request

https://api.kit-rx.com/v1/domain/email-auth?domain=github.com

Without payment the server answers 402 Payment Required with the price (3000 atomic USDC) in the PAYMENT-REQUIRED header. Any x402 v2 client pays and retries automatically. A request with no parameters runs this example.

curl -i "https://api.kit-rx.com/v1/domain/email-auth?domain=github.com"

Pay from an agent

AgentCash: fetch the URL. OpenDexter MCP: x402_fetch. Kit Rx MCP server: https://api.kit-rx.com/mcp. Code:

import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { wrapFetchWithPayment } from "@x402/fetch";
import { privateKeyToAccount } from "viem/accounts";

const client = new x402Client();
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.BUYER_KEY) });
const pay = wrapFetchWithPayment(fetch, client);
const res = await pay("https://api.kit-rx.com/v1/domain/email-auth?domain=github.com");
console.log(await res.json());

Example response

{
  "query": {
    "domain": "github.com"
  },
  "result": {
    "domain": "github.com",
    "input_host": "github.com",
    "registrable_domain": "github.com",
    "grade": "B",
    "score": 88,
    "reasons": [
      {
        "code": "dmarc_quarantine",
        "points": -5,
        "detail": "DMARC policy is quarantine; reject is the strongest setting."
      },
      {
        "code": "no_mta_sts",
        "points": -5,
        "detail": "No MTA-STS record, so inbound SMTP TLS is opportunistic and can be downgraded."
      },
      {
        "code": "no_tls_rpt",
        "points": -2,
        "detail": "No TLS-RPT record, so the owner receives no reports of SMTP TLS failures."
      }
    ],
    "mx": {
      "accepts_mail": true,
      "null_mx": false,
      "implicit_mx": false,
      "records": [
        {
          "priority": 0,
          "host": "github-com.mail.protection.outlook.com"
        }
      ]
    },
    "spf": {
      "present": true,
      "multiple_records": false,
      "record": "v=spf1 ip4:192.30.252.0/22 include:spf.protection.outlook.com … ~all",
      "all": "~all",
      "effective_all": "~all",
      "redirect": null,
      "mechanisms": [
        {
          "qualifier": "+",
          "mechanism": "ip4",
          "value": "192.30.252.0/22"
        },
        {
          "qualifier": "+",
          "mechanism": "include",
          "value": "spf.protection.outlook.com"
        },
        {
          "qualifier": "~",
          "mechanism": "all",
          "value": null
        }
      ],
      "dns_lookups": {
        "counted": 10,
        "top_level": 8,
        "limit": 10,
        "exceeds_limit": false,
        "complete": true,
        "loop": false
      },
      "broken_includes": [],
      "uses_ptr": false,
      "unknown_terms": []
    },
    "dmarc": {
      "present": true,
      "record_domain": "github.com",
      "inherited": false,
      "record": "v=DMARC1; p=quarantine; sp=reject; pct=100; rua=mailto:[redacted]@github.com; ruf=mailto:[redacted]@github.com; fo=1",
      "policy": "quarantine",
      "p": "quarantine",
      "sp": "reject",
      "pct": 100,
      "adkim": null,
      "aspf": null,
      "rua_present": true,
      "rua_domains": [
        "github.com"
      ],
      "ruf_present": true,
      "multiple_records": false
    },
    "mta_sts": {
      "present": false,
      "valid": false,
      "id": null
    },
    "tls_rpt": {
      "present": false,
      "rua_present": false
    },
    "bimi": {
      "present": false,
      "logo_url": null,
      "has_certificate": false
    },
    "dkim": {
      "assessed": false,
      "detail": "DKIM keys are published under sender-chosen selectors …"
    }
  },
  "sources": [
    {
      "name": "Cloudflare DNS over HTTPS (JSON API)",
      "url": "https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/"
    }
  ],
  "attribution": [
    "DNS resolved via Cloudflare 1.1.1.1 DNS-over-HTTPS."
  ],
  "generated_at": "2026-11-14T21:47:15.232Z"
}

Kit Rx: Composed public-data reports for AI agents, paid per call in USDC over x402. Machine-readable: OpenAPI, llms.txt, /.well-known/x402, agent skills.