Verify Email
curl --request POST \
--url https://api.example.com/api/v1/email-verification/single \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/email-verification/single"
payload = { "email": "<string>" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({email: '<string>'})
};
fetch('https://api.example.com/api/v1/email-verification/single', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/email-verification/single",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/email-verification/single"
payload := strings.NewReader("{\n \"email\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/email-verification/single")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/email-verification/single")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"email": "<string>",
"status": "<string>"
}Verification
Verify Email
Verify a single email address
POST
/
api
/
v1
/
email-verification
/
single
Verify Email
curl --request POST \
--url https://api.example.com/api/v1/email-verification/single \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/email-verification/single"
payload = { "email": "<string>" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({email: '<string>'})
};
fetch('https://api.example.com/api/v1/email-verification/single', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/email-verification/single",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/email-verification/single"
payload := strings.NewReader("{\n \"email\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/email-verification/single")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/email-verification/single")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"email": "<string>",
"status": "<string>"
}Verify a single email address synchronously. Results are returned immediately and cached for 24 hours.
Request Body
The email address to verify.
Examples
import { MailBreeze } from "mailbreeze";
const mailbreeze = new MailBreeze({ apiKey: "sk_live_xxx" });
const result = await mailbreeze.verification.verify({ email: "user@example.com" });
if (result.isValid) {
console.log("Email is valid - safe to send");
} else {
console.log(`Invalid: ${result.reason}`);
}
// Check detailed information
console.log(`Result: ${result.result}`); // "valid", "invalid", "risky", "unknown"
console.log(`Risk score: ${result.riskScore}`); // 0-100
console.log(`Cached: ${result.cached}`); // true if previously verified
if (result.details) {
console.log(`Disposable: ${result.details.isDisposable}`);
console.log(`Free provider: ${result.details.isFreeProvider}`);
console.log(`Role account: ${result.details.isRoleAccount}`);
}
from mailbreeze import MailBreeze
client = MailBreeze(api_key="sk_live_xxx")
result = await client.verification.verify(email="user@example.com")
if result.is_valid:
print("Email is valid - safe to send")
else:
print(f"Invalid: {result.reason}")
# Check detailed information
print(f"Result: {result.result}") # "valid", "invalid", "risky", "unknown"
print(f"Risk score: {result.risk_score}") # 0-100
print(f"Cached: {result.cached}") # True if previously verified
if result.details:
print(f"Disposable: {result.details.is_disposable}")
print(f"Free provider: {result.details.is_free_provider}")
client := mailbreeze.NewClient("sk_live_xxx")
result, err := client.Verification.Verify(ctx, &mailbreeze.VerifyEmailParams{
Email: "user@example.com",
})
if err != nil {
log.Fatal(err)
}
if result.IsValid {
fmt.Println("Email is valid - safe to send")
} else {
fmt.Printf("Invalid: %s\n", result.Reason)
}
// Check detailed information
fmt.Printf("Result: %s\n", result.Result)
fmt.Printf("Risk score: %d\n", result.RiskScore)
fmt.Printf("Cached: %t\n", result.Cached)
if result.Details != nil {
fmt.Printf("Disposable: %t\n", result.Details.IsDisposable)
}
$mailbreeze = new MailBreeze('sk_live_xxx');
$response = $mailbreeze->verification->verify(['email' => 'user@example.com']);
$result = $response['data'];
if ($result['isValid']) {
echo "Email is valid - safe to send\n";
} else {
echo "Invalid: " . $result['reason'] . "\n";
}
// Check detailed information
echo "Result: " . $result['result'] . "\n";
echo "Risk score: " . $result['riskScore'] . "\n";
echo "Cached: " . ($result['cached'] ? 'true' : 'false') . "\n";
if (isset($result['details'])) {
echo "Disposable: " . ($result['details']['isDisposable'] ? 'true' : 'false') . "\n";
}
MailBreeze mailbreeze = MailBreeze.builder()
.apiKey("sk_live_xxx")
.build();
VerifyEmailResult result = mailbreeze.verification().verify("user@example.com");
if (result.isValid()) {
System.out.println("Email is valid - safe to send");
} else {
System.out.println("Invalid: " + result.getReason());
}
// Check detailed information
System.out.println("Result: " + result.getResult());
System.out.println("Risk score: " + result.getRiskScore());
System.out.println("Cached: " + result.isCached());
if (result.getDetails() != null) {
System.out.println("Disposable: " + result.getDetails().isDisposable());
}
let client = MailBreeze::new("sk_live_xxx")?;
let result = client.verification.verify("user@example.com").await?;
if result.is_valid {
println!("Email is valid - safe to send");
} else {
println!("Invalid: {}", result.reason);
}
// Check detailed information
println!("Result: {}", result.result);
println!("Risk score: {:?}", result.risk_score);
println!("Cached: {}", result.cached);
if let Some(details) = result.details {
println!("Disposable: {:?}", details.is_disposable);
}
curl -X POST https://api.mailbreeze.com/api/v1/email-verification/single \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com"
}'
Response
The email address that was verified.
Verification result status:
clean- Email is valid and safe to send todirty- Email is invalid or riskyunknown- Could not determine validity
Example Response
{
"success": true,
"data": {
"email": "user@example.com",
"status": "clean"
},
"meta": {
"timestamp": "2025-12-27T13:39:24.882Z",
"requestId": "1bd79156-a875-430c-b8c7-75e9204267ea",
"path": "/api/v1/email-verification/single"
}
}
The response is wrapped in an envelope with
success, data, and meta fields. SDKs automatically extract the data object, so you access fields directly (e.g., result.isValid).Result Categories
| Result | isValid | Description | Recommendation |
|---|---|---|---|
valid | true | Email exists and accepts mail | Safe to send |
invalid | false | Mailbox doesn’t exist | Do not send |
risky | false | May exist but has risk factors | Review manually |
unknown | false | Could not verify | Proceed with caution |
Risk Factors
Emails may be marked asrisky for:
- Disposable email - Temporary addresses that expire
- Role accounts - Generic addresses like admin@, support@
- Catch-all domains - Accept any address, can’t verify mailbox
- High spam complaint domain - Domain has poor reputation
Credits
- New verification: 1 credit deducted
- Cached result: 0 credits (results cached 24 hours)
Errors
| Code | HTTP Status | Description |
|---|---|---|
INVALID_EMAIL | 400 | Email format is invalid |
INSUFFICIENT_CREDITS | 402 | Not enough verification credits |
⌘I