{"openapi":"3.1.0","info":{"title":"ScrapeMole Domains: DNS, WHOIS/RDAP, domain availability, email security, SSL certificates and subdomains for AI agents","version":"1.0.0","description":"Pay-per-call domain intelligence for agents: live DNS records (DoH), WHOIS/RDAP registration data (registrar, dates, status, nameservers; no personal data), bulk domain availability (10 names per call) an email security audit (SPF, DKIM, DMARC, MTA-STS, BIMI) with a grade, a live SSL/TLS certificate check and subdomains from Certificate Transparency logs (crt.sh). USDC via x402; failed calls are never charged.\n\nPayments: x402 v2, scheme \"exact\", USDC on Base (eip155:8453). The payment is verified before the work and settled only when the response is 200. Terms: https://domains.scrapemole.workers.dev/terms","contact":{"email":"edgaras@mail.grokbot.com","url":"https://scrapemole.pages.dev"},"x-guidance":"Call any /v1 endpoint without payment to receive a 402 with the exact price, then retry with an x402 client (e.g. @x402/fetch). 4xx/5xx responses are never charged."},"servers":[{"url":"https://domains.scrapemole.workers.dev"}],"components":{"securitySchemes":{"x402":{"type":"http","scheme":"x402","description":"HTTP 402 payment with USDC via the x402 protocol."}}},"paths":{"/v1/dns":{"get":{"operationId":"dns","summary":"Live DNS records for a name: A, AAAA, CNAME, MX, NS, TXT, SOA, CAA, SRV, HTTPS, DS and more, with TTLs and DNSSEC validation flag.","description":"Use when you need the current DNS records of a domain or hostname: resolves the requested record types live over DNS-over-HTTPS (Cloudflare 1.1.1.1 with Google fallback) and returns every answer with TTL, plus the response code (NOERROR/NXDOMAIN) and whether DNSSEC validated. Up to 8 types per call.","tags":["dns","domains","network","devops"],"parameters":[{"name":"name","in":"query","required":true,"description":"Domain or hostname, e.g. example.com or www.example.com.","schema":{"type":"string","examples":["cloudflare.com"]}},{"name":"type","in":"query","required":false,"description":"Comma-separated record types (max 8). Supported: A, NS, CNAME, SOA, PTR, MX, TXT, AAAA, SRV, DS, DNSKEY, HTTPS, SVCB, CAA.","schema":{"type":"string","default":"A,AAAA,CNAME,MX,NS,TXT"}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"name":"cloudflare.com","status":"NOERROR","dnssecValidated":true,"records":{"A":[{"name":"cloudflare.com","type":"A","ttl":300,"data":"104.16.132.229"}],"MX":[{"name":"cloudflare.com","type":"MX","ttl":300,"data":"5 mxa-canary.global.inbound.cf-emailsecurity.net"}]},"resolver":"cloudflare-dns.com"}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/whois":{"get":{"operationId":"rdap","summary":"Domain registration data (WHOIS successor RDAP): registrar, created/expiry/updated dates, status codes, nameservers, DNSSEC. No personal contact data.","description":"Use when you need to know who registered a domain through (registrar), when it was created, when it expires, its EPP status (e.g. clientTransferProhibited), nameservers and DNSSEC: queries the authoritative registry RDAP server (the modern WHOIS) found via the IANA bootstrap. Registrant personal data is never returned. Answers 404 (not charged) when the domain is not registered.","tags":["whois","rdap","domains","registrar","expiry"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Registrable domain, e.g. example.com.","schema":{"type":"string","examples":["github.com"]}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.002","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"domain":"github.com","status":["client delete prohibited","client transfer prohibited","client update prohibited"],"registeredAt":"2007-10-09T18:20:50Z","expiresAt":"2026-10-09T18:20:50Z","updatedAt":"2024-09-07T09:16:32Z","registrar":{"name":"MarkMonitor Inc.","ianaId":"292","abuseEmail":"abusecomplaints@markmonitor.com"},"nameservers":["dns1.p08.nsone.net","ns-1283.awsdns-32.org"],"dnssec":false,"ageDays":6942,"daysToExpiry":0,"rdapServer":"https://rdap.verisign.com"}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/availability":{"get":{"operationId":"availability","summary":"Check up to 10 domain names at once: registered or available, from the registries (RDAP), with DNS fallback.","description":"Use when naming a product, company or project and you need to know which domains are free: checks up to 10 domain names in one call against the authoritative registry RDAP servers (DNS delegation as fallback for TLDs without RDAP) and returns registered / available / likely-available / unknown per name, with expiry and registrar for taken ones.","tags":["domains","availability","naming","branding","rdap"],"parameters":[{"name":"domains","in":"query","required":true,"description":"Comma-separated domain names (max 10), e.g. \"acme.com,acme.io,acme.ai\".","schema":{"type":"string","examples":["scrapemole.com,example.com"]}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.004","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"count":2,"available":["scrapemole.com"],"results":[{"domain":"scrapemole.com","status":"available","method":"rdap"},{"domain":"example.com","status":"registered","method":"rdap","expiresAt":"2026-08-13T04:00:00Z","registrar":"RESERVED-Internet Assigned Numbers Authority"}]}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/email-security":{"get":{"operationId":"emailSecurity","summary":"Email security / deliverability audit of a domain: MX and provider, SPF, DMARC policy, DKIM (common selectors), MTA-STS, TLS-RPT, BIMI, with a grade and fix list.","description":"Use when you need to check whether a domain is protected against email spoofing or set up for deliverability: reads MX (and guesses the mail provider), SPF (qualifier, lookup count), DMARC (policy, pct, report addresses), DKIM on common selectors, MTA-STS (record and policy mode), TLS-RPT and BIMI, and returns a grade A-F, a score and a list of concrete issues.","tags":["email","dmarc","spf","dkim","security","deliverability"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Domain that sends/receives email, e.g. example.com.","schema":{"type":"string","examples":["github.com"]}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.003","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"domain":"github.com","grade":"A","score":7,"maxScore":8,"issues":[],"mx":[{"preference":1,"host":"aspmx.l.google.com"}],"provider":"Google Workspace","spf":{"record":"v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com … ~all","allQualifier":"~","policy":"softfail","dnsLookupsTopLevel":8,"multipleRecords":false},"dmarc":{"record":"v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@github.com","policy":"reject","pct":100,"aggregateReports":["mailto:dmarc@github.com"],"forensicReports":[],"alignmentDkim":"r","alignmentSpf":"r"},"dkim":{"selectorsChecked":["google","selector1"],"selectorsFound":["google"]},"mtaSts":null,"tlsRpt":null,"bimi":null}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/ssl":{"get":{"operationId":"ssl","summary":"Live SSL/TLS certificate check of a host: trusted or not (and why), hostname match, expiry and days left, issuer, SANs, TLS version, cipher, chain.","description":"Use when you need to know whether a website or mail server has a valid HTTPS certificate or when it expires: opens a live TLS connection (SNI) to the host and returns whether the chain is publicly trusted (with the exact error, e.g. CERT_HAS_EXPIRED or self-signed), whether the certificate matches the hostname, validity dates and days remaining, subject, issuer, SAN list, key type, TLS protocol, cipher, ALPN and the certificate chain. Answers about the certificate even when it is invalid (that is the point); unreachable hosts are not charged.","tags":["ssl","tls","certificate","https","security","monitoring"],"parameters":[{"name":"host","in":"query","required":true,"description":"Hostname, e.g. github.com (no path).","schema":{"type":"string","examples":["github.com"]}},{"name":"port","in":"query","required":false,"description":"TLS port: 443, 8443, 465, 993 or 995.","schema":{"type":"string","default":"443"}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.003","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"host":"github.com","port":443,"ip":"140.82.112.3","handshakeMs":41,"protocol":"TLSv1.3","cipher":"TLS_AES_128_GCM_SHA256","alpn":"h2","trusted":true,"hostnameMatch":true,"validFrom":"2026-08-01T00:00:00.000Z","validTo":"2026-11-29T23:59:59.000Z","daysRemaining":49,"expired":false,"subject":{"CN":"github.com"},"issuer":{"C":"GB","O":"Sectigo Limited","CN":"Sectigo ECC Domain Validation Secure Server CA"},"sans":["github.com","www.github.com"],"keyType":"EC prime256v1","chain":[{"subject":"github.com","issuer":"Sectigo ECC Domain Validation Secure Server CA","validTo":"2026-11-29T23:59:59.000Z","selfSigned":false}]}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/subdomains":{"get":{"operationId":"subdomains","summary":"Subdomains of a domain found in public Certificate Transparency logs (unexpired certificates), with first-seen, latest expiry and issuer per name.","description":"Use for attack-surface mapping, asset inventory or competitive research: lists every hostname under a domain that appears in unexpired publicly-logged TLS certificates, deduplicated, with wildcard flag, first-seen date, latest certificate expiry and issuer. Data from crt.sh (Sectigo) with Cert Spotter (SSLMate) as fallback; the response names the source. Only names in public certificates, no DNS brute force.","tags":["subdomains","certificate-transparency","recon","security","domains"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Registrable domain, e.g. example.com.","schema":{"type":"string","examples":["example.com"]}},{"name":"limit","in":"query","required":false,"description":"Max names returned (1-5000).","schema":{"type":"string","default":"1000"}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.003","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"domain":"example.com","source":"crt.sh","partial":false,"total":3,"names":[{"name":"*.example.com","wildcard":true,"firstSeen":"2026-01-15T00:00:00","lastExpiry":"2027-01-15T23:59:59","issuer":"C=US, O=DigiCert Inc, CN=DigiCert Global G3 TLS ECC SHA384 2020 CA1"},{"name":"www.example.com","wildcard":false,"firstSeen":"2026-01-15T00:00:00","lastExpiry":"2027-01-15T23:59:59","issuer":"C=US, O=DigiCert Inc, CN=DigiCert Global G3 TLS ECC SHA384 2020 CA1"}],"truncated":false,"attribution":"Certificate Transparency data via crt.sh (Sectigo)"}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}}}}