{"openapi":"3.1.0","info":{"title":"scan.mx API","version":"1.0.0","description":"Free email deliverability and DNS diagnostics API. Checks MX, SPF, DKIM, DMARC, DNSSEC, blacklists, and live SMTP for a domain. No API key required.","contact":{"name":"Abuse contact","email":"abuse@scan.mx","url":"https://scan.mx/optout"},"license":{"name":"Proprietary","url":"https://scan.mx/terms"}},"servers":[{"url":"https://api.scan.mx"}],"paths":{"/v1/check":{"get":{"summary":"Run a full email deliverability check for a domain","operationId":"checkDomain","parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to check (no scheme or path).","schema":{"type":"string","maxLength":253},"example":"example.com"},{"name":"smtp","in":"query","required":false,"description":"Set to 1 to also queue a live SMTP probe.","schema":{"type":"string","enum":["0","1"]}}],"responses":{"200":{"description":"Graded report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"403":{"description":"Domain has opted out of scanning"},"422":{"description":"Invalid domain or unknown TLD"},"424":{"description":"domain_not_configured: the domain has no nameservers / DNS delegation, so it does not resolve"},"429":{"description":"Rate limited (rate_limited or rescan_capped)","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the limit resets"}}}}}},"/v1/check/stream":{"get":{"summary":"Stream live SMTP probe progress over Server-Sent Events","description":"Streams progress of an SMTP probe started with GET /v1/check?domain=...&smtp=1. This endpoint does not start the probe. If none was queued, it emits smtp:failed with reason no_probe.","operationId":"checkStream","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","maxLength":253}}],"responses":{"200":{"description":"text/event-stream of smtp:progress, smtp:complete, smtp:failed events","content":{"text/event-stream":{}}},"422":{"description":"Invalid domain"}}}}},"components":{"schemas":{"Check":{"type":"object","properties":{"id":{"type":"string"},"section":{"type":"string"},"status":{"type":"string","enum":["pass","warn","fail","info"]},"severity":{"type":"string"},"message":{"type":"string"},"rfc":{"type":"string","nullable":true},"details":{"type":"object","nullable":true}}},"Report":{"type":"object","properties":{"domain":{"type":"string"},"grade":{"type":"string","enum":["A+","A","B","C","D","F"],"example":"B","description":"A+ requires DMARC p=reject with reporting, MTA-STS enforce, and DANE. Specific weaknesses cap the grade regardless of score."},"score":{"type":"integer","example":82},"provider":{"type":"string","nullable":true},"email_configured":{"type":"boolean","description":"False when the domain resolves but has no MX, SPF, DKIM, or DMARC records at all"},"smtp_status":{"type":"string"},"sections":{"type":"object"},"checks":{"type":"array","items":{"$ref":"#/components/schemas/Check"}},"permalink":{"type":"string"},"created_at":{"type":"integer"},"expires_at":{"type":"integer"}}}}}}