{"openapi":"3.0.3","info":{"title":"Email Validator API","version":"1.1.0","description":"Validate email addresses — syntax (RFC 5322), MX record lookup, disposable domain detection, role-based detection, SPF/DKIM checks, typo suggestions, and risk scoring. Batch up to 100 emails per call. MCP-native.","contact":{"url":"https://api.lazy-mac.com"},"x-logo":{"url":"https://api.lazy-mac.com/email/cover.png"}},"servers":[{"url":"https://api.lazy-mac.com/email"}],"paths":{"/":{"get":{"summary":"API info","operationId":"getInfo","responses":{"200":{"description":"API information","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"description":{"type":"string"},"base_url":{"type":"string"},"endpoints":{"type":"object"}}}}}}}}},"/health":{"get":{"summary":"Health check","operationId":"healthCheck","responses":{"200":{"description":"Service health","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"ts":{"type":"string","format":"date-time"}}}}}}}}},"/version":{"get":{"summary":"Service version","operationId":"getVersion","responses":{"200":{"description":"Version info","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string"},"version":{"type":"string"},"ts":{"type":"string","format":"date-time"}}}}}}}}},"/validate":{"post":{"summary":"Validate a single email address","operationId":"validateEmail","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","example":"user@example.com"}}}}}},"responses":{"200":{"description":"Validation result with risk score","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"syntax":{"type":"object","properties":{"valid":{"type":"boolean"},"reason":{"type":"string","nullable":true}}},"role":{"type":"object","properties":{"is_role":{"type":"boolean"},"role":{"type":"string","nullable":true}}},"disposable":{"type":"object","properties":{"is_disposable":{"type":"boolean"}}},"mx":{"type":"object","properties":{"has_mx":{"type":"boolean"},"mx_records":{"type":"array","items":{"type":"object","properties":{"priority":{"type":"integer"},"exchange":{"type":"string"}}}}}},"domain":{"type":"object","properties":{"domain_exists":{"type":"boolean"}}},"spf":{"type":"object","properties":{"has_spf":{"type":"boolean"},"spf_record":{"type":"string","nullable":true}}},"dkim":{"type":"object","properties":{"has_dkim":{"type":"boolean"},"dkim_selector":{"type":"string","nullable":true}}},"typo":{"type":"object","properties":{"has_typo":{"type":"boolean"},"suggested_domain":{"type":"string","nullable":true}}},"risk":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"label":{"type":"string","enum":["low","medium","high","critical"]}}},"deliverable":{"type":"boolean"}}}}}},"400":{"description":"Missing or invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/validate/batch":{"post":{"summary":"Batch validate up to 100 emails","operationId":"validateBatch","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["emails"],"properties":{"emails":{"type":"array","items":{"type":"string"},"maxItems":100}}}}}},"responses":{"200":{"description":"Batch validation results","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"integer"},"valid":{"type":"integer"},"invalid":{"type":"integer"},"results":{"type":"array","items":{"type":"object"}}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/domain":{"post":{"summary":"Check domain reputation","operationId":"checkDomain","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","example":"gmail.com"}}}}}},"responses":{"200":{"description":"Domain reputation info","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"exists":{"type":"boolean"},"mx":{"type":"object"},"spf":{"type":"object"},"dkim":{"type":"object"},"is_disposable":{"type":"boolean"},"is_free_provider":{"type":"boolean"},"reputation_score":{"type":"integer","minimum":0,"maximum":100},"reputation_label":{"type":"string","enum":["good","fair","poor"]}}}}}},"400":{"description":"Invalid domain","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/suggest":{"post":{"summary":"Suggest email typo corrections","operationId":"suggestFix","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","example":"user@gmial.com"}}}}}},"responses":{"200":{"description":"Typo suggestion result","content":{"application/json":{"schema":{"type":"object","properties":{"original":{"type":"string"},"has_suggestion":{"type":"boolean"},"suggested":{"type":"string","nullable":true},"reason":{"type":"string"}}}}}}}}},"/mcp":{"get":{"summary":"MCP endpoint info","operationId":"mcpInfo","responses":{"200":{"description":"MCP protocol info and available tools","content":{"application/json":{"schema":{"type":"object"}}}}}},"post":{"summary":"MCP JSON-RPC 2.0 endpoint","operationId":"mcpRpc","description":"Implements Model Context Protocol (MCP) over streamable HTTP. Supports initialize, tools/list, tools/call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"type":"integer"},"method":{"type":"string","example":"tools/list"},"params":{"type":"object"}}}}}},"responses":{"200":{"description":"JSON-RPC 2.0 response","content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string"},"id":{"type":"integer"},"result":{"type":"object"},"error":{"type":"object"}}}}}}}}}}}