Email & phone validation
Check it before your agent sends it.
One call tells you whether an email address can receive mail, is a throwaway or a typo, and whether a phone number is real for its country. A REST API and a remote MCP server, built for AI agents and the apps they run in.
// Press Check to call the live API (counts toward your 50 free daily checks).
What it checks
Plain answers, with the reasons
Every response has a verdict (valid, risky or invalid) and a list of reasons written for people, so an agent can explain its decision.
valid_formatRFC-style syntax, length limits, legal characters and dotsdomain_existsThe domain is registered and resolves in DNSaccepts_mailMX records exist; null-MX domains and dead domains are caughtdisposableKnown throwaway inbox providersrole_accountShared inboxes like info@, sales@, support@free_providerGmail, Yahoo, Outlook and other free mailboxessuggestionLikely typos: gmial.com → gmail.com, yahoo.con → yahoo.com
Phone
validMatches an assigned number range for its countrye164Normalized to +E.164, plus international and national formatscountryDetected from the number, or from the country you passtypeMobile, landline, toll-free, VoIP, premium rate and morepossibleRight length even when the range isn't assigned
What it doesn't do yet: it doesn't connect to the recipient's mail server to confirm the exact mailbox, and it doesn't check whether a phone line is currently active or which carrier it's on. Responses say so with "mailbox_checked": false and "line_checked": false.
REST API
One GET request
Send your key as Authorization: Bearer pl_…, an X-API-Key header, or ?key=. Leave it out to use the free daily allowance. Full spec: openapi.json.
curl
curl "https://plumbline-verify.pages.dev/v1/email?email=bob@gmial.com" \
-H "Authorization: Bearer $PLUMBLINE_KEY"
curl "https://plumbline-verify.pages.dev/v1/phone?phone=020%207183%208750&country=GB"
curl -X POST https://plumbline-verify.pages.dev/v1/batch \
-H "Content-Type: application/json" \
-d '{"emails":["a@gmail.com"],"phones":["+14155550123"]}'Response
{
"email": "bob@gmial.com",
"verdict": "invalid",
"score": 25,
"valid_format": true,
"domain_exists": true,
"accepts_mail": true,
"disposable": false,
"role_account": false,
"suggestion": "bob@gmail.com",
"mailbox_checked": false,
"reasons": [
"gmial.com has no mail (MX) records. Mail may still arrive through its website server, but this is unreliable.",
"Possible typo. Did you mean bob@gmail.com?"
]
}Errors are JSON with a plain message: 400 missing input, 401 unknown key, 402 out of credits or free allowance used (with a buy_url). Remaining checks come back in the X-Credits-Remaining header.
Remote MCP server
Give your agent the tools
Plumbline is a remote MCP server over Streamable HTTP. There's nothing to install. Add the URL to Claude, Cursor or any MCP client, with your key in the URL.
Claude Code
claude mcp add --transport http plumbline \ "https://plumbline-verify.pages.dev/mcp?key=YOUR_KEY"
MCP client config (JSON)
{
"mcpServers": {
"plumbline": {
"type": "http",
"url": "https://plumbline-verify.pages.dev/mcp?key=YOUR_KEY"
}
}
}validate_emailVerdict, score and reasons for one address. 1 credit.
validate_phoneValidity, country, line type and formats. 1 credit.
account_statusCredits left on the key, or the free allowance. Free.
Pricing
Prepaid credits. One check, one credit.
No subscription. Credits never expire. Pay by card through Stripe and your key is sent to you after checkout.
Topping up an existing key? Add ?client_reference_id=YOUR_KEY to any buy link and the credits go onto that key. Payments are handled by Stripe.
Questions
Good to know
Do you store the emails and numbers I check?
No. Inputs are checked and discarded. We keep only API keys, credit balances and a daily count per (hashed) IP for the free allowance.
How fast is it?
Phone checks run instantly at the edge. Email checks need one or two DNS lookups and usually return in well under a second.
Why not just use a regex?
A regex can't tell you that a domain doesn't exist, has no mail servers, is a throwaway provider, or is one letter off from gmail.com. Those are the mistakes that cause bounces.
Can my agent use it without me?
Yes. Agents can call it with no key for the free allowance. With a key in the MCP URL, every tool call draws from your prepaid credits, and account_status lets the agent check the balance.
What happens when credits run out?
Requests return HTTP 402 with a message and a link to buy more. Nothing is charged automatically.
Who runs Plumbline?
Plumbline is operated by SilverQueen EOOD in Sofia, Bulgaria. Contact: sawhorsesites@gmail.com.