Validate up to 100 email addresses
Validates up to 100 addresses in one call.
Request
POSThttps://email-validator.p.apihiver.com/v1/validate/batch
JSON object. Required: emails.
Request Body
Edit the values below to test different scenarios.
Parameters and body structure are inherited from this endpoint's definition. Changes here only apply to this test run.
Language
Client
1curl --request POST \
2 --url https://email-validator.p.apihiver.com/v1/validate/batch \
3 --header 'Accept: application/json' \
4 --header 'Content-Type: application/json' \
5 --header 'X-API-Key: YOUR_API_KEY' \
6 --data '{
7 "emails": [
8 "[email protected]",
9 "bad@"
10 ]
11}'Validate up to 100 email addresses: Email Validation API reference
Validates up to 100 addresses in one call. This endpoint is part of the Email Validation API: Validate email addresses: syntax, domain and mail-server (MX) checks, disposable detection, typo suggestions and normalisation.
Validate up to 100 email addresses: example requests in every language
POST /v1/validate/batch in Shell (cURL)
curl --request POST \
--url https://email-validator.p.apihiver.com/v1/validate/batch \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-Key: YOUR_API_KEY' \
--data '{
"emails": [
"[email protected]",
"bad@"
]
}'POST /v1/validate/batch in Shell (HTTPie)
echo '{
"emails": [
"[email protected]",
"bad@"
]
}' | \
http POST https://email-validator.p.apihiver.com/v1/validate/batch \
Accept:application/json \
Content-Type:application/json \
X-API-Key:YOUR_API_KEYPOST /v1/validate/batch in Shell (Wget)
wget --quiet \
--method POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-API-Key: YOUR_API_KEY' \
--body-data '{\n "emails": [\n "[email protected]",\n "bad@"\n ]\n}' \
--output-document \
- https://email-validator.p.apihiver.com/v1/validate/batchPOST /v1/validate/batch in Node.js (http)
const http = require('https');
const options = {
method: 'POST',
hostname: 'email-validator.p.apihiver.com',
port: null,
path: '/v1/validate/batch',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({emails: ['[email protected]', 'bad@']}));
req.end();POST /v1/validate/batch in Node.js (Request)
const request = require('request');
const options = {
method: 'POST',
url: 'https://email-validator.p.apihiver.com/v1/validate/batch',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
},
body: {emails: ['[email protected]', 'bad@']},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});POST /v1/validate/batch in Node.js (Unirest)
const unirest = require('unirest');
const req = unirest('POST', 'https://email-validator.p.apihiver.com/v1/validate/batch');
req.headers({
'Content-Type': 'application/json',
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
});
req.type('json');
req.send({
emails: [
'[email protected]',
'bad@'
]
});
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});POST /v1/validate/batch in Node.js (Axios)
const axios = require('axios').default;
const options = {
method: 'POST',
url: 'https://email-validator.p.apihiver.com/v1/validate/batch',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
},
data: {emails: ['[email protected]', 'bad@']}
};
try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}POST /v1/validate/batch in Node.js (Fetch)
const fetch = require('node-fetch');
const url = 'https://email-validator.p.apihiver.com/v1/validate/batch';
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
},
body: '{"emails":["[email protected]","bad@"]}'
};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}POST /v1/validate/batch in JavaScript (XMLHttpRequest)
const data = JSON.stringify({
emails: [
'[email protected]',
'bad@'
]
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener('readystatechange', function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open('POST', 'https://email-validator.p.apihiver.com/v1/validate/batch');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Accept', 'application/json');
xhr.setRequestHeader('X-API-Key', 'YOUR_API_KEY');
xhr.send(data);POST /v1/validate/batch in JavaScript (Axios)
import axios from 'axios';
const options = {
method: 'POST',
url: 'https://email-validator.p.apihiver.com/v1/validate/batch',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
},
data: {emails: ['[email protected]', 'bad@']}
};
try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}POST /v1/validate/batch in JavaScript (Fetch)
const url = 'https://email-validator.p.apihiver.com/v1/validate/batch';
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
},
body: '{"emails":["[email protected]","bad@"]}'
};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}POST /v1/validate/batch in JavaScript (jQuery)
const settings = {
async: true,
crossDomain: true,
url: 'https://email-validator.p.apihiver.com/v1/validate/batch',
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-API-Key': 'YOUR_API_KEY'
},
processData: false,
data: '{\n "emails": [\n "[email protected]",\n "bad@"\n ]\n}'
};
$.ajax(settings).done(function (response) {
console.log(response);
});POST /v1/validate/batch in Python (http.client)
import http.client
conn = http.client.HTTPSConnection("email-validator.p.apihiver.com")
payload = "{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-Key': "YOUR_API_KEY"
}
conn.request("POST", "/v1/validate/batch", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))POST /v1/validate/batch in Python (Requests)
import requests
url = "https://email-validator.p.apihiver.com/v1/validate/batch"
payload = { "emails": ["[email protected]", "bad@"] }
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-Key": "YOUR_API_KEY"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())POST /v1/validate/batch in PHP (cURL)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://email-validator.p.apihiver.com/v1/validate/batch",
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([
'emails' => [
'[email protected]',
'bad@'
]
]),
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"X-API-Key: YOUR_API_KEY"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}POST /v1/validate/batch in PHP (Guzzle)
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://email-validator.p.apihiver.com/v1/validate/batch', [
'body' => '{
"emails": [
"[email protected]",
"bad@"
]
}',
'headers' => [
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'X-API-Key' => 'YOUR_API_KEY',
],
]);
echo $response->getBody();POST /v1/validate/batch in PHP (PECL HTTP v1)
<?php
$request = new HttpRequest();
$request->setUrl('https://email-validator.p.apihiver.com/v1/validate/batch');
$request->setMethod(HTTP_METH_POST);
$request->setHeaders([
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-API-Key' => 'YOUR_API_KEY'
]);
$request->setContentType('application/json');
$request->setBody(json_encode([
'emails' => [
'[email protected]',
'bad@'
]
]));
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}POST /v1/validate/batch in PHP (PECL HTTP v2)
<?php
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append(json_encode([
'emails' => [
'[email protected]',
'bad@'
]
]));
$request->setRequestUrl('https://email-validator.p.apihiver.com/v1/validate/batch');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders([
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-API-Key' => 'YOUR_API_KEY'
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();POST /v1/validate/batch in Java (AsyncHttp)
AsyncHttpClient client = new DefaultAsyncHttpClient();
client.prepare("POST", "https://email-validator.p.apihiver.com/v1/validate/batch")
.setHeader("Content-Type", "application/json")
.setHeader("Accept", "application/json")
.setHeader("X-API-Key", "YOUR_API_KEY")
.setBody("{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}")
.execute()
.toCompletableFuture()
.thenAccept(System.out::println)
.join();
client.close();POST /v1/validate/batch in Java (java.net.http)
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://email-validator.p.apihiver.com/v1/validate/batch"))
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-Key", "YOUR_API_KEY")
.method("POST", HttpRequest.BodyPublishers.ofString("{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());POST /v1/validate/batch in Java (OkHttp)
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}");
Request request = new Request.Builder()
.url("https://email-validator.p.apihiver.com/v1/validate/batch")
.post(body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.addHeader("X-API-Key", "YOUR_API_KEY")
.build();
Response response = client.newCall(request).execute();POST /v1/validate/batch in Java (Unirest)
HttpResponse<String> response = Unirest.post("https://email-validator.p.apihiver.com/v1/validate/batch")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-Key", "YOUR_API_KEY")
.body("{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}")
.asString();POST /v1/validate/batch in C# (HttpClient)
using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://email-validator.p.apihiver.com/v1/validate/batch"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-Key", "YOUR_API_KEY" },
},
Content = new StringContent("{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}POST /v1/validate/batch in C# (RestSharp)
var client = new RestClient("https://email-validator.p.apihiver.com/v1/validate/batch");
var request = new RestRequest("", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "application/json");
request.AddHeader("X-API-Key", "YOUR_API_KEY");
request.AddParameter("application/json", "{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}", ParameterType.RequestBody);
var response = client.Execute(request);POST /v1/validate/batch in Go (NewRequest)
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://email-validator.p.apihiver.com/v1/validate/batch"
payload := strings.NewReader("{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-Key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}POST /v1/validate/batch in Ruby (net::http)
require 'uri'
require 'net/http'
url = URI("https://email-validator.p.apihiver.com/v1/validate/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'YOUR_API_KEY'
request.body = "{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}"
response = http.request(request)
puts response.read_bodyPOST /v1/validate/batch in Swift (NSURLSession)
import Foundation
let headers = [
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-Key": "YOUR_API_KEY"
]
let parameters = ["emails": ["[email protected]", "bad@"]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://email-validator.p.apihiver.com/v1/validate/batch")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()POST /v1/validate/batch in Objective-C (NSURLSession)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"Content-Type": @"application/json",
@"Accept": @"application/json",
@"X-API-Key": @"YOUR_API_KEY" };
NSDictionary *parameters = @{ @"emails": @[ @"[email protected]", @"bad@" ] };
NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://email-validator.p.apihiver.com/v1/validate/batch"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];POST /v1/validate/batch in Kotlin (OkHttp)
val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}")
val request = Request.Builder()
.url("https://email-validator.p.apihiver.com/v1/validate/batch")
.post(body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.addHeader("X-API-Key", "YOUR_API_KEY")
.build()
val response = client.newCall(request).execute()POST /v1/validate/batch in C (libcurl)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://email-validator.p.apihiver.com/v1/validate/batch");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "X-API-Key: YOUR_API_KEY");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}");
CURLcode ret = curl_easy_perform(hnd);POST /v1/validate/batch in Clojure (clj-http)
(require '[clj-http.client :as client])
(client/post "https://email-validator.p.apihiver.com/v1/validate/batch" {:headers {:X-API-Key "YOUR_API_KEY"}
:content-type :json
:form-params {:emails ["[email protected]" "bad@"]}
:accept :json})POST /v1/validate/batch in OCaml (CoHTTP)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://email-validator.p.apihiver.com/v1/validate/batch" in
let headers = Header.add_list (Header.init ()) [
("Content-Type", "application/json");
("Accept", "application/json");
("X-API-Key", "YOUR_API_KEY");
] in
let body = Cohttp_lwt_body.of_string "{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}" in
Client.call ~headers ~body `POST uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)POST /v1/validate/batch in R (httr)
library(httr)
url <- "https://email-validator.p.apihiver.com/v1/validate/batch"
payload <- "{\n \"emails\": [\n \"[email protected]\",\n \"bad@\"\n ]\n}"
encode <- "json"
response <- VERB("POST", url, body = payload, add_headers('X-API-Key' = 'YOUR_API_KEY'), content_type("application/json"), accept("application/json"), encode = encode)
content(response, "text")POST /v1/validate/batch in PowerShell (Invoke-WebRequest)
$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "YOUR_API_KEY")
$response = Invoke-WebRequest -Uri 'https://email-validator.p.apihiver.com/v1/validate/batch' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"emails": [
"[email protected]",
"bad@"
]
}'POST /v1/validate/batch in PowerShell (Invoke-RestMethod)
$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "YOUR_API_KEY")
$response = Invoke-RestMethod -Uri 'https://email-validator.p.apihiver.com/v1/validate/batch' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"emails": [
"[email protected]",
"bad@"
]
}'POST /v1/validate/batch in HTTP (HTTP/1.1)
POST /v1/validate/batch HTTP/1.1
Content-Type: application/json
Accept: application/json
X-Api-Key: YOUR_API_KEY
Host: email-validator.p.apihiver.com
Content-Length: 51
{
"emails": [
"[email protected]",
"bad@"
]
}Example response (200, application/json)
Success.
1{
2 "results": [
3 {
4 "email": "[email protected]",
5 "score": 100,
6 "domain": "gmail.com",
7 "mx_found": true,
8 "disposable": false,
9 "mx_records": [
10 "gmail-smtp-in.l.google.com",
11 "alt1.gmail-smtp-in.l.google.com",
12 "alt2.gmail-smtp-in.l.google.com"
13 ],
14 "deliverable": "likely",
15 "did_you_mean": null,
16 "role_account": false,
17 "valid_syntax": true,
18 "free_provider": true
19 },
20 {
21 "email": "bad@",
22 "score": 0,
23 "domain": null,
24 "mx_found": false,
25 "disposable": false,
26 "mx_records": [],
27 "deliverable": "no",
28 "did_you_mean": null,
29 "role_account": false,
30 "valid_syntax": false,
31 "free_provider": false
32 }
33 ]
34}Errors
- 400 — A required parameter is missing or a value has the wrong format.
1{ 2 "error": { 3 "code": "INVALID_INPUT", 4 "message": "emails: Field required" 5 } 6}
Gateway errors (missing key, no subscription, rate limits) are listed in Error codes.
Other Email Validation API endpoints
- GETValidate one email address
- GETMail servers (MX records) for a domain
- GETCanonical form of an address (lower-case, Gmail dots and +tags removed) — spot duplicate sign-ups
- GETDid-you-mean suggestion for mistyped email domains (gmial.com → gmail.com)
Email Validation API pricing →·Email Validation API overview →