{"name":"Emailchaser marketing site API","description":"Public endpoints behind the free tools on www.emailchaser.com. The Emailchaser product API is a separate service.","documentation_url":"https://www.emailchaser.com/openapi.json","product_api":{"base_url":"https://api.emailchaser.com/r","description":"https://www.emailchaser.com/openapi.json","docs":"https://www.emailchaser.com/docs","openapi":"https://api.emailchaser.com/r/openapi.json","mcp_server":"https://app.emailchaser.com/api/mcp","authentication":"Authorization: Bearer <API key>"},"site":{"llms_txt":"https://www.emailchaser.com/llms.txt","sitemap":"https://www.emailchaser.com/sitemap.xml","markdown":"Send `Accept: text/markdown` to any page URL, or append `.md` to it."},"errors":{"shape":{"error":"string (alias of message)","code":"string","message":"string","hint":"string","status":"number","documentation_url":"string"},"note":"Every /api/ endpoint answers with JSON, including errors and 404s."},"endpoints":[{"method":"GET","path":"/api","description":"Lists the endpoints behind the free tools, the error shape they share, and where the product API and MCP server live."},{"method":"POST","path":"/api/audience-size","description":"Powers the B2B audience size calculator. At least one criteria array must be non-empty.","rate_limit":"10 requests per minute per IP"},{"method":"GET","path":"/api/domain-health","description":"The same check, with the domain in the query string","rate_limit":"20 requests per minute per IP (shared with POST)"},{"method":"POST","path":"/api/domain-health","description":"Powers /domain-health-check and the SPF, DKIM, DMARC, MX and blacklist checker pages. Reads live DNS on every call and stores nothing. Each check comes back as pass, warn, fail or error (could not check), with a plain-English line, what was found and, where one can be derived, the record to publish. A blocklist that refuses the query or does not answer is reported as not checked, never as clean. Send an IPv4 address instead of a domain to check it on the IP blocklists only.","rate_limit":"20 requests per minute per IP"},{"method":"POST","path":"/api/email-etiquette","description":"Powers the email etiquette checker. The email text must be between 40 and 6,000 characters.","rate_limit":"5 requests per hour per IP"},{"method":"POST","path":"/api/contact","description":"Powers the contact form. Sends the message to support and a confirmation to the address given.","rate_limit":"3 requests per minute per IP"},{"method":"POST","path":"/api/news-subscribe","description":"Subscribe an address to the daily deliverability briefing","rate_limit":"5 requests per minute per IP"},{"method":"GET","path":"/api/news-health","description":"Answers 200 whether or not the pipeline is healthy: read `ok`, and `degraded` for the case where the site is serving from the repo mirror instead of the CMS."},{"method":"GET","path":"/api/inbox-rules-index.json","description":"The DNS measurements behind /deliverability-news, /dmarc-adoption-rate and the tool pages: for each run, the share of a fixed panel of real business domains that enforce DMARC, publish strict SPF or MTA-STS, plus the mailbox-provider and security-gateway mix and the per-sector breakdown. Recipient domains, not Emailchaser sending data. The series has gaps; `note` states how many measurements exist."},{"method":"GET","path":"/api/markdown/{path}","description":"Normally reached by content negotiation rather than by name: send `Accept: text/markdown` to any page URL, or append `.md` to it. Responses carry `Vary: Accept`."}]}