DNS + mail-auth lookup

DNS records plus SPF, DMARC and MX checks for a domain in one call.

DNS lookup over DNS-over-HTTPS (Cloudflare, Google fallback): A, AAAA, MX, NS, TXT, CNAME, CAA, SOA, SRV, HTTPS, DS... for one domain in one call, plus a mail-auth check (MX hosts, SPF, DMARC policy, warnings) and the DNSSEC-validated flag.

$0.0025 per call in USDC on Base via x402, or pay by card with prepaid credits (2 credits) · 1 free call per caller · no signup · Listed on PayAPI Market (this route is not PayAPI-verified yet; 7 other routes are, each by one settled test payment)

GET https://freetier-agent-api.pages.dev/api/dns

When to use it

Use dns to read any DNS records of a domain and check its mail setup (MX, SPF, DMARC) in one call. Use email-verify to check a single address.

Parameters

NameTypeDescription
domain requiredstringdomain or hostname, e.g. example.com (URLs and emails are trimmed to the host)
typesstringcomma list of record types, default A,AAAA,MX,NS,TXT,CNAME,CAA (max 10)
mailstring (true | false)false skips the SPF/DMARC check

Example output (real response, trimmed)

{
 "domain": "github.com",
 "status": "NOERROR",
 "exists": true,
 "dnssec_validated": false,
 "records": {
  "A": [
   {
    "data": "140.82.114.3",
    "ttl": 26
   }
  ],
  "AAAA": [],
  "MX": [
   {
    "data": "0 github-com.mail.protection.outlook.com.",
    "ttl": 259,
    "priority": 0,
    "host": "github-com.mail.protection.outlook.com"
   }
  ],
  "NS": [
   {
    "data": "dns1.p08.nsone.net.",
    "ttl": 559
   },
   {
    "data": "dns2.p08.nsone.net.",
    "ttl": 559
   }
  ],
  "TXT": [
   {
    "data": "00Dd0000000hHE0=1TBKg000000TN2r",
    "ttl": 300
   },
   {
    "data": "MS=6BF03E6AF5CB689E315FB6199603BABF2C88D805",
    "ttl": 300
   }
  ],
  "CNAME": [],
  "CAA": [
   {
    "data": "0 issue \"digicert.com\"",
    "ttl": 1451
   },
   {
    "data": "0 issue \"globalsign.com\"",
    "ttl": 1451
   }
  ]
 },
 "mail": {
  "accepts_mail": true,
  "mx_hosts": [
   "github-com.mail.protection.outlook.com"
  ],
  "spf": "v=spf1 ip4:192.30.252.0/22 include:spf.protection.outlook.com include:_netblocks.google.com include:_netblocks2.google.com include:mail.zendesk.com include:_...",
  "spf_all": "~all",
  "spf_multiple": false,
  "dmarc": "v=DMARC1; p=quarantine; sp=reject; pct=100; rua=mailto:dmarc@github.com; ruf=mailto:dmarc@github.com; fo=1",
  "dmarc_policy": "quarantine",
  "dmarc_pct": 100,
  "dmarc_rua": "mailto:dmarc@github.com",
  "warnings": []
 },
 "resolver": "cloudflare",
 "checked_at": "2026-10-25T22:37:38.279Z",
 "sources": [
  {
   "name": "Cloudflare 1.1.1.1 (DNS-over-HTTPS)",
   "url": "https://developers.cloudflare.com/1.1.1.1/"
  }
 ]
}

Try it

Free call (no wallet needed)

curl -s "https://freetier-agent-api.pages.dev/api/dns?domain=github.com"

Pay by card (no wallet): prepaid credits

Buy a credit pack on Gumroad (1,000 credits $3), then send your license key. The X-Credits-Remaining response header shows your balance; failed calls are not charged.

curl -s "https://freetier-agent-api.pages.dev/api/dns?domain=github.com" \
  -H 'X-License-Key: YOUR-LICENSE-KEY'

JavaScript / TypeScript (@x402/fetch)

// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY); // wallet with USDC on Base
const fetchWithPayment = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const res = await fetchWithPayment("https://freetier-agent-api.pages.dev/api/dns?domain=github.com");
console.log(await res.json());

Python (x402 + httpx)

# pip install "x402[httpx,evm]" eth-account
import asyncio, os
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client

async def main():
    client = x402Client()
    register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))
    async with x402HttpxClient(client) as http:
        r = await http.get("https://freetier-agent-api.pages.dev/api/dns?domain=github.com")
        print(r.json())

asyncio.run(main())

A bare request without parameters returns the HTTP 402 payment challenge (x402 v2 in the PAYMENT-REQUIRED header, v1 in the body). Invalid input gets a 400 before any payment.

Billing policy

Failed calls are never charged. Failed calls are never charged: the payment is verified first, the request runs, and the payment is settled only if it succeeded. Errors (4xx/5xx) are not settled, and invalid input is rejected before any payment or free call.

Uptime and latency

Independent monitoring of this endpoint: 402index service page (health, 30-day uptime, p50 latency).

Also available as


Agent Extraction API by FreeTier Kits · Terms · llms.txt · /.well-known/x402 · MCP: https://freetier-agent-api.pages.dev/mcp · Contact: tec@mail.grokbot.com
This site and its texts were written with AI assistance and reviewed for accuracy; example outputs are real responses from the API.