Prime VerifierPrime VerifierDevelopersAPI v1
Dashboard →
API reference / Find email

Find email

Find the most likely deliverable address for a person at a company domain, one at a time, as a batch, or as a background job. You are charged only when a usable address is returned.

POST/v1/finder

Find one email. POST /v1/finder/single (or /v1/finder)

Request body application/json
FieldTypeRequiredDescription
firstNamestring · nulloptional
lastNamestring · nulloptional
domainstring · nulloptional
Response 200 · inside data
FieldTypeDescriptionExample
emailstring · nullThe found email address, or null when nothing usable was found."[email protected]"
statusstring · nullWhether an address was returned: Found or Not Found."Found"
qualitystring · nullSend-readiness of the found address: Good, Risky, or Bad."Good"
resultstring · nullOk (verified deliverable), Catch-all (the domain accepts it), or Unknown."Ok"
reasonstring · nullInternal reason for the outcome, e.g. found, catch_all, not_found, unsupported_free_domain."found"
confidenceinteger · int32Confidence in the format for this person on this domain, 0 to 100.92
providerstring · nullThe domain's mailbox provider when detected, e.g. google, microsoft. Empty otherwise."google"
creditsChargedinteger · int32Credits charged for this call: 10 when an email is returned, 0 on a miss.10
creditsRemaininginteger · int64Your remaining credit balance after this call.48200
!

Returns 401, 402 with the error envelope { status, error: { code, message } }. Branch on the numeric error.code, never the message.

Request
curl -X POST "https://api.primeverifier.com/v1/finder" \
  -H "X-API-KEY: pk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Jane",
    "lastName": "Doe",
    "domain": "acme.com"
  }'
const res = await fetch("https://api.primeverifier.com/v1/finder", {
  method: "POST",
  headers: {
    "X-API-KEY": "pk_live_your_api_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "firstName": "Jane",
    "lastName": "Doe",
    "domain": "acme.com"
  }),
});
const data = await res.json();
console.log(data);
import requests

res = requests.post(
    "https://api.primeverifier.com/v1/finder",
    headers={"X-API-KEY": "pk_live_your_api_key"},
    json={"firstName": "Jane", "lastName": "Doe", "domain": "acme.com"},
)
print(res.json())
using var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, "https://api.primeverifier.com/v1/finder");
req.Headers.Add("X-API-KEY", "pk_live_your_api_key");
req.Content = new StringContent("{\"firstName\":\"Jane\",\"lastName\":\"Doe\",\"domain\":\"acme.com\"}",
    Encoding.UTF8, "application/json");
var res = await client.SendAsync(req);
Console.WriteLine(await res.Content.ReadAsStringAsync());
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.primeverifier.com/v1/finder"))
    .header("X-API-KEY", "pk_live_your_api_key")
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("{\"firstName\":\"Jane\",\"lastName\":\"Doe\",\"domain\":\"acme.com\"}"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://api.primeverifier.com/v1/finder");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => ["X-API-KEY: pk_live_your_api_key", "Content-Type: application/json"],
    CURLOPT_POSTFIELDS => json_encode(["firstName" => "Jane", "lastName" => "Doe", "domain" => "acme.com"]),
]);
$response = curl_exec($ch);
echo $response;
body := strings.NewReader(`{"firstName":"Jane","lastName":"Doe","domain":"acme.com"}`)
req, _ := http.NewRequest("POST", "https://api.primeverifier.com/v1/finder", body)
req.Header.Set("X-API-KEY", "pk_live_your_api_key")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
require "net/http"
require "json"

uri = URI("https://api.primeverifier.com/v1/finder")
req = Net::HTTP::Post.new(uri)
req["X-API-KEY"] = "pk_live_your_api_key"
req["Content-Type"] = "application/json"
req.body = { firstName: "Jane", lastName: "Doe", domain: "acme.com" }.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
Response200 OK
{
  "status": "success",
  "data": {
    "email": "[email protected]",
    "status": "Found",
    "quality": "Good",
    "result": "Ok",
    "reason": "found",
    "confidence": 92,
    "provider": "google",
    "creditsCharged": 10,
    "creditsRemaining": 48200
  },
  "error": null
}
Try itPOST /v1/finder
Runs a real request against api.primeverifier.com. A decisive verification may use 1 credit.
POST/v1/finder/batch

Find many emails in ONE request (tenant integration). POST /v1/finder/batch Body: { "contacts": [ { "first_name", "last_name", "domain" }, … ] } (max 100). Synchronous, like /v1/verify/batch

Request body application/json
FieldTypeRequiredDescription
contactsFinderRequest[]optional
!

Returns 400, 402 with the error envelope { status, error: { code, message } }. Branch on the numeric error.code, never the message.

Request
curl -X POST "https://api.primeverifier.com/v1/finder/batch" \
  -H "X-API-KEY: pk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "contacts": [
      {
        "firstName": "Jane",
        "lastName": "Doe",
        "domain": "acme.com"
      }
    ]
  }'
const res = await fetch("https://api.primeverifier.com/v1/finder/batch", {
  method: "POST",
  headers: {
    "X-API-KEY": "pk_live_your_api_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "contacts": [
      {
        "firstName": "Jane",
        "lastName": "Doe",
        "domain": "acme.com"
      }
    ]
  }),
});
const data = await res.json();
console.log(data);
import requests

res = requests.post(
    "https://api.primeverifier.com/v1/finder/batch",
    headers={"X-API-KEY": "pk_live_your_api_key"},
    json={"contacts": [{"firstName": "Jane", "lastName": "Doe", "domain": "acme.com"}]},
)
print(res.json())
using var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, "https://api.primeverifier.com/v1/finder/batch");
req.Headers.Add("X-API-KEY", "pk_live_your_api_key");
req.Content = new StringContent("{\"contacts\":[{\"firstName\":\"Jane\",\"lastName\":\"Doe\",\"domain\":\"acme.com\"}]}",
    Encoding.UTF8, "application/json");
var res = await client.SendAsync(req);
Console.WriteLine(await res.Content.ReadAsStringAsync());
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.primeverifier.com/v1/finder/batch"))
    .header("X-API-KEY", "pk_live_your_api_key")
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("{\"contacts\":[{\"firstName\":\"Jane\",\"lastName\":\"Doe\",\"domain\":\"acme.com\"}]}"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://api.primeverifier.com/v1/finder/batch");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => ["X-API-KEY: pk_live_your_api_key", "Content-Type: application/json"],
    CURLOPT_POSTFIELDS => json_encode(["contacts" => [["firstName" => "Jane", "lastName" => "Doe", "domain" => "acme.com"]]]),
]);
$response = curl_exec($ch);
echo $response;
body := strings.NewReader(`{"contacts":[{"firstName":"Jane","lastName":"Doe","domain":"acme.com"}]}`)
req, _ := http.NewRequest("POST", "https://api.primeverifier.com/v1/finder/batch", body)
req.Header.Set("X-API-KEY", "pk_live_your_api_key")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
require "net/http"
require "json"

uri = URI("https://api.primeverifier.com/v1/finder/batch")
req = Net::HTTP::Post.new(uri)
req["X-API-KEY"] = "pk_live_your_api_key"
req["Content-Type"] = "application/json"
req.body = { contacts: [{ firstName: "Jane", lastName: "Doe", domain: "acme.com" }] }.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
Response200 OK
{
  "status": "success",
  "data": {},
  "error": null
}
Try itPOST /v1/finder/batch
Runs a real request against api.primeverifier.com. A decisive verification may use 1 credit.
POST/v1/finder/jobs
!

Returns 400 with the error envelope { status, error: { code, message } }. Branch on the numeric error.code, never the message.

Request
curl -X POST "https://api.primeverifier.com/v1/finder/jobs" \
  -H "X-API-KEY: pk_live_your_api_key"
const res = await fetch("https://api.primeverifier.com/v1/finder/jobs", {
  method: "POST",
  headers: {
    "X-API-KEY": "pk_live_your_api_key",
  },
});
const data = await res.json();
console.log(data);
import requests

res = requests.post(
    "https://api.primeverifier.com/v1/finder/jobs",
    headers={"X-API-KEY": "pk_live_your_api_key"},
)
print(res.json())
using var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, "https://api.primeverifier.com/v1/finder/jobs");
req.Headers.Add("X-API-KEY", "pk_live_your_api_key");
var res = await client.SendAsync(req);
Console.WriteLine(await res.Content.ReadAsStringAsync());
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.primeverifier.com/v1/finder/jobs"))
    .header("X-API-KEY", "pk_live_your_api_key")
    .method("POST", HttpRequest.BodyPublishers.noBody())
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://api.primeverifier.com/v1/finder/jobs");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => ["X-API-KEY: pk_live_your_api_key"],
]);
$response = curl_exec($ch);
echo $response;
req, _ := http.NewRequest("POST", "https://api.primeverifier.com/v1/finder/jobs", nil)
req.Header.Set("X-API-KEY", "pk_live_your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
require "net/http"
require "json"

uri = URI("https://api.primeverifier.com/v1/finder/jobs")
req = Net::HTTP::Post.new(uri)
req["X-API-KEY"] = "pk_live_your_api_key"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
Try itPOST /v1/finder/jobs
Runs a real request against api.primeverifier.com. A decisive verification may use 1 credit.
GET/v1/finder/jobs

List the caller's bulk-finder jobs (paginated). GET /v1/finder/jobs

Parameters
NameInTypeRequiredDescription
pagequeryinteger · int32optional
pageSizequeryinteger · int32optional
Request
curl -X GET "https://api.primeverifier.com/v1/finder/jobs?page=string&pageSize=string" \
  -H "X-API-KEY: pk_live_your_api_key"
const res = await fetch("https://api.primeverifier.com/v1/finder/jobs?page=string&pageSize=string", {
  method: "GET",
  headers: {
    "X-API-KEY": "pk_live_your_api_key",
  },
});
const data = await res.json();
console.log(data);
import requests

res = requests.get(
    "https://api.primeverifier.com/v1/finder/jobs?page=string&pageSize=string",
    headers={"X-API-KEY": "pk_live_your_api_key"},
)
print(res.json())
using var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Get, "https://api.primeverifier.com/v1/finder/jobs?page=string&pageSize=string");
req.Headers.Add("X-API-KEY", "pk_live_your_api_key");
var res = await client.SendAsync(req);
Console.WriteLine(await res.Content.ReadAsStringAsync());
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.primeverifier.com/v1/finder/jobs?page=string&pageSize=string"))
    .header("X-API-KEY", "pk_live_your_api_key")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://api.primeverifier.com/v1/finder/jobs?page=string&pageSize=string");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => ["X-API-KEY: pk_live_your_api_key"],
]);
$response = curl_exec($ch);
echo $response;
req, _ := http.NewRequest("GET", "https://api.primeverifier.com/v1/finder/jobs?page=string&pageSize=string", nil)
req.Header.Set("X-API-KEY", "pk_live_your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
require "net/http"
require "json"

uri = URI("https://api.primeverifier.com/v1/finder/jobs?page=string&pageSize=string")
req = Net::HTTP::Get.new(uri)
req["X-API-KEY"] = "pk_live_your_api_key"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
Response200 OK
{
  "status": "success",
  "data": {},
  "error": null
}
Try itGET /v1/finder/jobs
POST/v1/finder/single

Find one email. POST /v1/finder/single (or /v1/finder)

Request body application/json
FieldTypeRequiredDescription
firstNamestring · nulloptional
lastNamestring · nulloptional
domainstring · nulloptional
Response 200 · inside data
FieldTypeDescriptionExample
emailstring · nullThe found email address, or null when nothing usable was found."[email protected]"
statusstring · nullWhether an address was returned: Found or Not Found."Found"
qualitystring · nullSend-readiness of the found address: Good, Risky, or Bad."Good"
resultstring · nullOk (verified deliverable), Catch-all (the domain accepts it), or Unknown."Ok"
reasonstring · nullInternal reason for the outcome, e.g. found, catch_all, not_found, unsupported_free_domain."found"
confidenceinteger · int32Confidence in the format for this person on this domain, 0 to 100.92
providerstring · nullThe domain's mailbox provider when detected, e.g. google, microsoft. Empty otherwise."google"
creditsChargedinteger · int32Credits charged for this call: 10 when an email is returned, 0 on a miss.10
creditsRemaininginteger · int64Your remaining credit balance after this call.48200
!

Returns 401, 402 with the error envelope { status, error: { code, message } }. Branch on the numeric error.code, never the message.

Request
curl -X POST "https://api.primeverifier.com/v1/finder/single" \
  -H "X-API-KEY: pk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Jane",
    "lastName": "Doe",
    "domain": "acme.com"
  }'
const res = await fetch("https://api.primeverifier.com/v1/finder/single", {
  method: "POST",
  headers: {
    "X-API-KEY": "pk_live_your_api_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "firstName": "Jane",
    "lastName": "Doe",
    "domain": "acme.com"
  }),
});
const data = await res.json();
console.log(data);
import requests

res = requests.post(
    "https://api.primeverifier.com/v1/finder/single",
    headers={"X-API-KEY": "pk_live_your_api_key"},
    json={"firstName": "Jane", "lastName": "Doe", "domain": "acme.com"},
)
print(res.json())
using var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, "https://api.primeverifier.com/v1/finder/single");
req.Headers.Add("X-API-KEY", "pk_live_your_api_key");
req.Content = new StringContent("{\"firstName\":\"Jane\",\"lastName\":\"Doe\",\"domain\":\"acme.com\"}",
    Encoding.UTF8, "application/json");
var res = await client.SendAsync(req);
Console.WriteLine(await res.Content.ReadAsStringAsync());
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.primeverifier.com/v1/finder/single"))
    .header("X-API-KEY", "pk_live_your_api_key")
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("{\"firstName\":\"Jane\",\"lastName\":\"Doe\",\"domain\":\"acme.com\"}"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://api.primeverifier.com/v1/finder/single");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => ["X-API-KEY: pk_live_your_api_key", "Content-Type: application/json"],
    CURLOPT_POSTFIELDS => json_encode(["firstName" => "Jane", "lastName" => "Doe", "domain" => "acme.com"]),
]);
$response = curl_exec($ch);
echo $response;
body := strings.NewReader(`{"firstName":"Jane","lastName":"Doe","domain":"acme.com"}`)
req, _ := http.NewRequest("POST", "https://api.primeverifier.com/v1/finder/single", body)
req.Header.Set("X-API-KEY", "pk_live_your_api_key")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
require "net/http"
require "json"

uri = URI("https://api.primeverifier.com/v1/finder/single")
req = Net::HTTP::Post.new(uri)
req["X-API-KEY"] = "pk_live_your_api_key"
req["Content-Type"] = "application/json"
req.body = { firstName: "Jane", lastName: "Doe", domain: "acme.com" }.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
Response200 OK
{
  "status": "success",
  "data": {
    "email": "[email protected]",
    "status": "Found",
    "quality": "Good",
    "result": "Ok",
    "reason": "found",
    "confidence": 92,
    "provider": "google",
    "creditsCharged": 10,
    "creditsRemaining": 48200
  },
  "error": null
}
Try itPOST /v1/finder/single
Runs a real request against api.primeverifier.com. A decisive verification may use 1 credit.