{
  "openapi": "3.1.0",
  "info": {
    "title": "Mailvett API",
    "version": "1.0.0",
    "summary": "Free email validation API and MCP server: syntax, MX, disposable, role, free-provider and typo checks with a verdict, reasons and a 0-100 score. No SMTP probing.",
    "description": "Paste addresses and get a clear verdict for each: syntax, domain and mail server (MX), mail provider, disposable, role (info@, sales@), free provider and likely typos (gmial.com → gmail.com), plus domain age, SPF and DMARC.\n\nFree tier: 20 calls per minute per IP address. Up to 10 emails per call. Domain age and parked-site checks run in full for up to 5 different domains per call. Mailboxes are never probed (no SMTP), so the top score is 90. Free, no key. No key needed. Remote MCP server: https://mailvett.cybermax-tools.workers.dev/mcp",
    "contact": {
      "name": "CyberMax",
      "url": "https://cybermax-tools-cybermax.static.hf.space/"
    },
    "license": {
      "name": "Proprietary (free to call)",
      "identifier": "LicenseRef-CyberMax"
    }
  },
  "servers": [
    {
      "url": "https://mailvett.cybermax-tools.workers.dev"
    }
  ],
  "paths": {
    "/api/validate": {
      "get": {
        "tags": [
          "Mailvett"
        ],
        "summary": "Validate up to 10 email addresses",
        "description": "Checks syntax, domain existence, MX / implicit MX / null MX, mail provider, disposable, role, free provider, typo suggestions, SPF, DMARC, RDAP domain age and parked-domain signals, then returns verdict (deliverable_likely, risky, undeliverable, invalid), score 0-100 and reason codes.",
        "operationId": "validateEmailsGet",
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "required": true,
            "description": "Up to 10 addresses, comma separated",
            "schema": {
              "type": "string"
            },
            "example": "jane.doe@gmial.com,info@stripe.com"
          },
          {
            "name": "suggestTypos",
            "in": "query",
            "required": false,
            "description": "Suggest corrections for likely typos (default true)",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Results (same field names as the bulk version's dataset records) plus the free-tier limits.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                },
                "example": {
                  "results": [
                    {
                      "input": "jane.doe@gmial.com",
                      "email": "jane.doe@gmial.com",
                      "verdict": "risky",
                      "score": 1,
                      "reasons": [
                        "mail_server_from_a_record",
                        "disposable_domain",
                        "possible_typo_of:gmail.com",
                        "no_spf",
                        "no_dmarc",
                        "domain_age_years:23"
                      ],
                      "summary": "jane.doe@gmial.com: risky (score 1) - Implicit (A record), disposable domain, did you mean jane.doe@gmail.com?, domain 23y old.",
                      "localPart": "jane.doe",
                      "domain": "gmial.com",
                      "syntax": {
                        "valid": true,
                        "error": null
                      },
                      "domainExists": true,
                      "mx": {
                        "present": true,
                        "hosts": [],
                        "provider": "Implicit (A record)",
                        "implicit": true,
                        "nullMx": false
                      },
                      "flags": {
                        "disposable": true,
                        "role": false,
                        "roleType": null,
                        "freeProvider": false,
                        "typoSuggestion": "gmail.com",
                        "parkedDomain": false
                      },
                      "suggestion": "jane.doe@gmail.com",
                      "domainHealth": {
                        "spf": null,
                        "dmarc": null,
                        "createdAt": "2003-05-12T18:26:31Z",
                        "ageDays": 8537,
                        "registrar": "GoDaddy.com, LLC",
                        "parkedEvidence": null
                      },
                      "catchAll": "not_checked",
                      "mailbox": "not_checked",
                      "errors": [],
                      "ms": 748,
                      "checkedAt": "2026-09-25T23:03:27.011Z"
                    },
                    {
                      "input": "info@stripe.com",
                      "email": "info@stripe.com",
                      "verdict": "deliverable_likely",
                      "score": 78,
                      "reasons": [
                        "mx_present",
                        "role_account:general",
                        "spf_present",
                        "dmarc:reject",
                        "domain_age_years:31"
                      ],
                      "summary": "info@stripe.com: deliverable_likely (score 78) - Google Workspace, role account (general), domain 31y old.",
                      "localPart": "info",
                      "domain": "stripe.com",
                      "syntax": {
                        "valid": true,
                        "error": null
                      },
                      "domainExists": true,
                      "mx": {
                        "present": true,
                        "hosts": [
                          "aspmx.l.google.com",
                          "alt1.aspmx.l.google.com",
                          "alt2.aspmx.l.google.com",
                          "aspmx2.googlemail.com",
                          "aspmx3.googlemail.com"
                        ],
                        "provider": "Google Workspace",
                        "implicit": false,
                        "nullMx": false
                      },
                      "flags": {
                        "disposable": false,
                        "role": true,
                        "roleType": "general",
                        "freeProvider": false,
                        "typoSuggestion": null,
                        "parkedDomain": false
                      },
                      "suggestion": null,
                      "domainHealth": {
                        "spf": "softfail",
                        "dmarc": "reject",
                        "createdAt": "1995-09-12T04:00:00Z",
                        "ageDays": 11336,
                        "registrar": "SafeNames Ltd.",
                        "parkedEvidence": null
                      },
                      "catchAll": "not_checked",
                      "mailbox": "not_checked",
                      "errors": [],
                      "ms": 107,
                      "checkedAt": "2026-09-25T23:03:26.370Z"
                    },
                    {
                      "input": "test@mailinator.com",
                      "email": "test@mailinator.com",
                      "verdict": "risky",
                      "score": 30,
                      "reasons": [
                        "mx_present",
                        "disposable_domain",
                        "spf_present",
                        "dmarc:reject",
                        "domain_age_years:23"
                      ],
                      "summary": "test@mailinator.com: risky (score 30) - Other / self-hosted, disposable domain, domain 23y old.",
                      "localPart": "test",
                      "domain": "mailinator.com",
                      "syntax": {
                        "valid": true,
                        "error": null
                      },
                      "domainExists": true,
                      "mx": {
                        "present": true,
                        "hosts": [
                          "mail.mailinator.com",
                          "mail2.mailinator.com"
                        ],
                        "provider": "Other / self-hosted",
                        "implicit": false,
                        "nullMx": false
                      },
                      "flags": {
                        "disposable": true,
                        "role": false,
                        "roleType": null,
                        "freeProvider": false,
                        "typoSuggestion": null,
                        "parkedDomain": false
                      },
                      "suggestion": null,
                      "domainHealth": {
                        "spf": "fail",
                        "dmarc": "reject",
                        "createdAt": "2003-07-02T13:50:53Z",
                        "ageDays": 8486,
                        "registrar": "GoDaddy.com, LLC",
                        "parkedEvidence": null
                      },
                      "catchAll": "not_checked",
                      "mailbox": "not_checked",
                      "errors": [],
                      "ms": 292,
                      "checkedAt": "2026-09-25T23:03:26.555Z"
                    },
                    {
                      "input": "sales@this-domain-does-not-exist-9x7q.com",
                      "email": "sales@this-domain-does-not-exist-9x7q.com",
                      "verdict": "undeliverable",
                      "score": 2,
                      "reasons": [
                        "domain_not_found"
                      ],
                      "summary": "sales@this-domain-does-not-exist-9x7q.com: undeliverable (score 2) - role account (sales), domain does not exist.",
                      "localPart": "sales",
                      "domain": "this-domain-does-not-exist-9x7q.com",
                      "syntax": {
                        "valid": true,
                        "error": null
                      },
                      "domainExists": false,
                      "mx": {
                        "present": false,
                        "hosts": [],
                        "provider": null,
                        "implicit": false,
                        "nullMx": false
                      },
                      "flags": {
                        "disposable": false,
                        "role": true,
                        "roleType": "sales",
                        "freeProvider": false,
                        "typoSuggestion": null,
                        "parkedDomain": null
                      },
                      "suggestion": null,
                      "domainHealth": {
                        "spf": null,
                        "dmarc": null,
                        "createdAt": null,
                        "ageDays": null,
                        "registrar": null,
                        "parkedEvidence": null
                      },
                      "catchAll": "not_checked",
                      "mailbox": "not_checked",
                      "errors": [],
                      "ms": 7,
                      "checkedAt": "2026-09-25T23:03:26.270Z"
                    }
                  ],
                  "count": 4,
                  "verdicts": {
                    "deliverable_likely": 1,
                    "risky": 2,
                    "undeliverable": 1,
                    "invalid": 0
                  },
                  "checks": {
                    "domainAge": true,
                    "parkedWebsite": true,
                    "mailbox": "never probed (no SMTP)"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited (see the Retry-After header)",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "504": {
            "description": "Took too long; ask for fewer items",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Mailvett"
        ],
        "summary": "Validate up to 10 email addresses",
        "description": "Checks syntax, domain existence, MX / implicit MX / null MX, mail provider, disposable, role, free provider, typo suggestions, SPF, DMARC, RDAP domain age and parked-domain signals, then returns verdict (deliverable_likely, risky, undeliverable, invalid), score 0-100 and reason codes.",
        "operationId": "validateEmailsPost",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "emails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "maxItems": 10,
                    "description": "Email addresses, also \"Name <email>\" or mailto: links. Up to 10."
                  },
                  "suggestTypos": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "emails"
                ]
              },
              "example": {
                "emails": [
                  "jane.doe@gmial.com",
                  "info@stripe.com",
                  "test@mailinator.com"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Results (same field names as the bulk version's dataset records) plus the free-tier limits.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                },
                "example": {
                  "results": [
                    {
                      "input": "jane.doe@gmial.com",
                      "email": "jane.doe@gmial.com",
                      "verdict": "risky",
                      "score": 1,
                      "reasons": [
                        "mail_server_from_a_record",
                        "disposable_domain",
                        "possible_typo_of:gmail.com",
                        "no_spf",
                        "no_dmarc",
                        "domain_age_years:23"
                      ],
                      "summary": "jane.doe@gmial.com: risky (score 1) - Implicit (A record), disposable domain, did you mean jane.doe@gmail.com?, domain 23y old.",
                      "localPart": "jane.doe",
                      "domain": "gmial.com",
                      "syntax": {
                        "valid": true,
                        "error": null
                      },
                      "domainExists": true,
                      "mx": {
                        "present": true,
                        "hosts": [],
                        "provider": "Implicit (A record)",
                        "implicit": true,
                        "nullMx": false
                      },
                      "flags": {
                        "disposable": true,
                        "role": false,
                        "roleType": null,
                        "freeProvider": false,
                        "typoSuggestion": "gmail.com",
                        "parkedDomain": false
                      },
                      "suggestion": "jane.doe@gmail.com",
                      "domainHealth": {
                        "spf": null,
                        "dmarc": null,
                        "createdAt": "2003-05-12T18:26:31Z",
                        "ageDays": 8537,
                        "registrar": "GoDaddy.com, LLC",
                        "parkedEvidence": null
                      },
                      "catchAll": "not_checked",
                      "mailbox": "not_checked",
                      "errors": [],
                      "ms": 748,
                      "checkedAt": "2026-09-25T23:03:27.011Z"
                    },
                    {
                      "input": "info@stripe.com",
                      "email": "info@stripe.com",
                      "verdict": "deliverable_likely",
                      "score": 78,
                      "reasons": [
                        "mx_present",
                        "role_account:general",
                        "spf_present",
                        "dmarc:reject",
                        "domain_age_years:31"
                      ],
                      "summary": "info@stripe.com: deliverable_likely (score 78) - Google Workspace, role account (general), domain 31y old.",
                      "localPart": "info",
                      "domain": "stripe.com",
                      "syntax": {
                        "valid": true,
                        "error": null
                      },
                      "domainExists": true,
                      "mx": {
                        "present": true,
                        "hosts": [
                          "aspmx.l.google.com",
                          "alt1.aspmx.l.google.com",
                          "alt2.aspmx.l.google.com",
                          "aspmx2.googlemail.com",
                          "aspmx3.googlemail.com"
                        ],
                        "provider": "Google Workspace",
                        "implicit": false,
                        "nullMx": false
                      },
                      "flags": {
                        "disposable": false,
                        "role": true,
                        "roleType": "general",
                        "freeProvider": false,
                        "typoSuggestion": null,
                        "parkedDomain": false
                      },
                      "suggestion": null,
                      "domainHealth": {
                        "spf": "softfail",
                        "dmarc": "reject",
                        "createdAt": "1995-09-12T04:00:00Z",
                        "ageDays": 11336,
                        "registrar": "SafeNames Ltd.",
                        "parkedEvidence": null
                      },
                      "catchAll": "not_checked",
                      "mailbox": "not_checked",
                      "errors": [],
                      "ms": 107,
                      "checkedAt": "2026-09-25T23:03:26.370Z"
                    },
                    {
                      "input": "test@mailinator.com",
                      "email": "test@mailinator.com",
                      "verdict": "risky",
                      "score": 30,
                      "reasons": [
                        "mx_present",
                        "disposable_domain",
                        "spf_present",
                        "dmarc:reject",
                        "domain_age_years:23"
                      ],
                      "summary": "test@mailinator.com: risky (score 30) - Other / self-hosted, disposable domain, domain 23y old.",
                      "localPart": "test",
                      "domain": "mailinator.com",
                      "syntax": {
                        "valid": true,
                        "error": null
                      },
                      "domainExists": true,
                      "mx": {
                        "present": true,
                        "hosts": [
                          "mail.mailinator.com",
                          "mail2.mailinator.com"
                        ],
                        "provider": "Other / self-hosted",
                        "implicit": false,
                        "nullMx": false
                      },
                      "flags": {
                        "disposable": true,
                        "role": false,
                        "roleType": null,
                        "freeProvider": false,
                        "typoSuggestion": null,
                        "parkedDomain": false
                      },
                      "suggestion": null,
                      "domainHealth": {
                        "spf": "fail",
                        "dmarc": "reject",
                        "createdAt": "2003-07-02T13:50:53Z",
                        "ageDays": 8486,
                        "registrar": "GoDaddy.com, LLC",
                        "parkedEvidence": null
                      },
                      "catchAll": "not_checked",
                      "mailbox": "not_checked",
                      "errors": [],
                      "ms": 292,
                      "checkedAt": "2026-09-25T23:03:26.555Z"
                    },
                    {
                      "input": "sales@this-domain-does-not-exist-9x7q.com",
                      "email": "sales@this-domain-does-not-exist-9x7q.com",
                      "verdict": "undeliverable",
                      "score": 2,
                      "reasons": [
                        "domain_not_found"
                      ],
                      "summary": "sales@this-domain-does-not-exist-9x7q.com: undeliverable (score 2) - role account (sales), domain does not exist.",
                      "localPart": "sales",
                      "domain": "this-domain-does-not-exist-9x7q.com",
                      "syntax": {
                        "valid": true,
                        "error": null
                      },
                      "domainExists": false,
                      "mx": {
                        "present": false,
                        "hosts": [],
                        "provider": null,
                        "implicit": false,
                        "nullMx": false
                      },
                      "flags": {
                        "disposable": false,
                        "role": true,
                        "roleType": "sales",
                        "freeProvider": false,
                        "typoSuggestion": null,
                        "parkedDomain": null
                      },
                      "suggestion": null,
                      "domainHealth": {
                        "spf": null,
                        "dmarc": null,
                        "createdAt": null,
                        "ageDays": null,
                        "registrar": null,
                        "parkedEvidence": null
                      },
                      "catchAll": "not_checked",
                      "mailbox": "not_checked",
                      "errors": [],
                      "ms": 7,
                      "checkedAt": "2026-09-25T23:03:26.270Z"
                    }
                  ],
                  "count": 4,
                  "verdicts": {
                    "deliverable_likely": 1,
                    "risky": 2,
                    "undeliverable": 1,
                    "invalid": 0
                  },
                  "checks": {
                    "domainAge": true,
                    "parkedWebsite": true,
                    "mailbox": "never probed (no SMTP)"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited (see the Retry-After header)",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "504": {
            "description": "Took too long; ask for fewer items",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "retryAfterSeconds": {
            "type": "integer"
          },
          "limits": {
            "type": "object"
          }
        },
        "required": [
          "error",
          "message"
        ]
      }
    }
  },
  "x-mcp-server": "https://mailvett.cybermax-tools.workers.dev/mcp"
}