curl --request GET \
--url https://app.tryspecter.com/api/v1/people/{personId}/email \
--header 'X-API-Key: <api-key>'import requests
url = "https://app.tryspecter.com/api/v1/people/{personId}/email"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://app.tryspecter.com/api/v1/people/{personId}/email', 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://app.tryspecter.com/api/v1/people/{personId}/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.tryspecter.com/api/v1/people/{personId}/email"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.tryspecter.com/api/v1/people/{personId}/email")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.tryspecter.com/api/v1/people/{personId}/email")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"email": "jane.doe@example.com",
"type": "personal"
}{
"errorCode": "API_KEY_MISSING",
"message": "No API Key was presented on the header X-API-KEY"
}{
"errorCode": "OUT_OF_CREDITS",
"message": "There are no more credits available to complete the request"
}{
"errorCode": "NOT_PERMITTED",
"message": "API key present, but you are not permitted"
}{
"errorCode": "NOT_FOUND",
"message": "Not Found"
}{
"errorCode": "VALIDATION_ERROR",
"message": "Field required (body.name)"
}{
"errorCode": "RATE_LIMITED",
"message": "You have been rate-limited"
}{
"errorCode": "clerk_unavailable",
"message": "Key verification is temporarily unavailable"
}Get person email
Returns a contactable email for a person, found via a waterfall across multiple data providers. Use the optional type parameter to request a professional or personal email. If you omit it, the endpoint returns a professional email where available, otherwise a personal one. Each response states which type it returned.
Costs 2 credits per matched result.
What you need
A Specter person ID. Resolve one from an email with
Enrich person by email, or
from a LinkedIn identifier with
Enrich person; a company’s team also
carries person_id on every row via
Get company employees.
Behaviour
- Returns a single email with its
type(professionalorpersonal). - Returns
204if the person exists but no email is available. - Returns
404if the person ID doesn’t exist.
What you do next
- Open the full profile. Get career history, skills, and education with Get person by ID.
curl --request GET \
--url https://app.tryspecter.com/api/v1/people/{personId}/email \
--header 'X-API-Key: <api-key>'import requests
url = "https://app.tryspecter.com/api/v1/people/{personId}/email"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://app.tryspecter.com/api/v1/people/{personId}/email', 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://app.tryspecter.com/api/v1/people/{personId}/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.tryspecter.com/api/v1/people/{personId}/email"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.tryspecter.com/api/v1/people/{personId}/email")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.tryspecter.com/api/v1/people/{personId}/email")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"email": "jane.doe@example.com",
"type": "personal"
}{
"errorCode": "API_KEY_MISSING",
"message": "No API Key was presented on the header X-API-KEY"
}{
"errorCode": "OUT_OF_CREDITS",
"message": "There are no more credits available to complete the request"
}{
"errorCode": "NOT_PERMITTED",
"message": "API key present, but you are not permitted"
}{
"errorCode": "NOT_FOUND",
"message": "Not Found"
}{
"errorCode": "VALIDATION_ERROR",
"message": "Field required (body.name)"
}{
"errorCode": "RATE_LIMITED",
"message": "You have been rate-limited"
}{
"errorCode": "clerk_unavailable",
"message": "Key verification is temporarily unavailable"
}Authorizations
Path Parameters
The ID of the person being requested.
Query Parameters
The kind of email to fetch, applied as a filter: professional and personal return only an address of that kind, or 204 if none is on file — they never substitute the other kind. Omit (or pass either) to take professional when available and fall back to personal. The type in the response always describes the address returned.
personal, professional, either Was this page helpful?