curl --request POST \
--url https://api.glasser.ai/v1/solutions/gtm/people_search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"job_titles": [
"<string>"
],
"seniorities": [],
"locations": [
"<string>"
],
"company_domain": "<string>",
"keywords": "<string>",
"full_name": "<string>",
"email": "<string>",
"linkedin_url": "<string>",
"limit": 50,
"task_id": "<string>",
"metadata": {}
}
'import requests
url = "https://api.glasser.ai/v1/solutions/gtm/people_search"
payload = {
"job_titles": ["<string>"],
"seniorities": [],
"locations": ["<string>"],
"company_domain": "<string>",
"keywords": "<string>",
"full_name": "<string>",
"email": "<string>",
"linkedin_url": "<string>",
"limit": 50,
"task_id": "<string>",
"metadata": {}
}
headers = {
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
job_titles: ['<string>'],
seniorities: [],
locations: ['<string>'],
company_domain: '<string>',
keywords: '<string>',
full_name: '<string>',
email: '<string>',
linkedin_url: '<string>',
limit: 50,
task_id: '<string>',
metadata: {}
})
};
fetch('https://api.glasser.ai/v1/solutions/gtm/people_search', 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.glasser.ai/v1/solutions/gtm/people_search",
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([
'job_titles' => [
'<string>'
],
'seniorities' => [
],
'locations' => [
'<string>'
],
'company_domain' => '<string>',
'keywords' => '<string>',
'full_name' => '<string>',
'email' => '<string>',
'linkedin_url' => '<string>',
'limit' => 50,
'task_id' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"idempotency-key: <idempotency-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.glasser.ai/v1/solutions/gtm/people_search"
payload := strings.NewReader("{\n \"job_titles\": [\n \"<string>\"\n ],\n \"seniorities\": [],\n \"locations\": [\n \"<string>\"\n ],\n \"company_domain\": \"<string>\",\n \"keywords\": \"<string>\",\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"limit\": 50,\n \"task_id\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("idempotency-key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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.glasser.ai/v1/solutions/gtm/people_search")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"job_titles\": [\n \"<string>\"\n ],\n \"seniorities\": [],\n \"locations\": [\n \"<string>\"\n ],\n \"company_domain\": \"<string>\",\n \"keywords\": \"<string>\",\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"limit\": 50,\n \"task_id\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.glasser.ai/v1/solutions/gtm/people_search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"job_titles\": [\n \"<string>\"\n ],\n \"seniorities\": [],\n \"locations\": [\n \"<string>\"\n ],\n \"company_domain\": \"<string>\",\n \"keywords\": \"<string>\",\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"limit\": 50,\n \"task_id\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {},
"output": {
"total_matches": 123,
"items": [
{
"name": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"job_title": "<string>",
"seniority": "<string>",
"department": "<string>",
"headline": "<string>",
"linkedin_url": "<string>",
"city": "<string>",
"region": "<string>",
"country": "<string>",
"country_code": "<string>",
"email": "<string>",
"email_status": "<string>",
"email_catch_all": true,
"email_source": "<string>",
"phone": "<string>",
"company_name": "<string>",
"company_domain": "<string>",
"company_linkedin_url": "<string>",
"apollo_match_confidence": "<string>",
"pdl_likelihood": 123,
"hunter_email_score": 123,
"zoominfo_accuracy_score": 123
}
]
},
"provider_response": {
"http_status": 349,
"error": null
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {},
"action": "search",
"result_status": "success",
"error": {
"code": "<string>",
"message": "<string>"
},
"runs": [
{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {
"omitted": true
},
"output": {
"omitted": true
},
"provider_response": {
"http_status": 349
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {}
}
],
"result_url": "<string>"
}{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {},
"output": {
"total_matches": 123,
"items": [
{
"name": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"job_title": "<string>",
"seniority": "<string>",
"department": "<string>",
"headline": "<string>",
"linkedin_url": "<string>",
"city": "<string>",
"region": "<string>",
"country": "<string>",
"country_code": "<string>",
"email": "<string>",
"email_status": "<string>",
"email_catch_all": true,
"email_source": "<string>",
"phone": "<string>",
"company_name": "<string>",
"company_domain": "<string>",
"company_linkedin_url": "<string>",
"apollo_match_confidence": "<string>",
"pdl_likelihood": 123,
"hunter_email_score": 123,
"zoominfo_accuracy_score": 123
}
]
},
"provider_response": {
"http_status": 349,
"error": null
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {},
"action": "search",
"result_status": "success",
"error": {
"code": "<string>",
"message": "<string>"
},
"runs": [
{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {
"omitted": true
},
"output": {
"omitted": true
},
"provider_response": {
"http_status": 349
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {}
}
],
"result_url": "<string>"
}{
"error": {
"code": "validation_failed",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "insufficient_balance",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "endpoint_not_permitted",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "idempotency_conflict",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "rate_limited",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "service_unavailable",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}人员搜索
查找人员、补全资料、查询工作邮箱和手机号,或验证邮箱。选择操作并提供必填字段。
curl --request POST \
--url https://api.glasser.ai/v1/solutions/gtm/people_search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"job_titles": [
"<string>"
],
"seniorities": [],
"locations": [
"<string>"
],
"company_domain": "<string>",
"keywords": "<string>",
"full_name": "<string>",
"email": "<string>",
"linkedin_url": "<string>",
"limit": 50,
"task_id": "<string>",
"metadata": {}
}
'import requests
url = "https://api.glasser.ai/v1/solutions/gtm/people_search"
payload = {
"job_titles": ["<string>"],
"seniorities": [],
"locations": ["<string>"],
"company_domain": "<string>",
"keywords": "<string>",
"full_name": "<string>",
"email": "<string>",
"linkedin_url": "<string>",
"limit": 50,
"task_id": "<string>",
"metadata": {}
}
headers = {
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
job_titles: ['<string>'],
seniorities: [],
locations: ['<string>'],
company_domain: '<string>',
keywords: '<string>',
full_name: '<string>',
email: '<string>',
linkedin_url: '<string>',
limit: 50,
task_id: '<string>',
metadata: {}
})
};
fetch('https://api.glasser.ai/v1/solutions/gtm/people_search', 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.glasser.ai/v1/solutions/gtm/people_search",
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([
'job_titles' => [
'<string>'
],
'seniorities' => [
],
'locations' => [
'<string>'
],
'company_domain' => '<string>',
'keywords' => '<string>',
'full_name' => '<string>',
'email' => '<string>',
'linkedin_url' => '<string>',
'limit' => 50,
'task_id' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"idempotency-key: <idempotency-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.glasser.ai/v1/solutions/gtm/people_search"
payload := strings.NewReader("{\n \"job_titles\": [\n \"<string>\"\n ],\n \"seniorities\": [],\n \"locations\": [\n \"<string>\"\n ],\n \"company_domain\": \"<string>\",\n \"keywords\": \"<string>\",\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"limit\": 50,\n \"task_id\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("idempotency-key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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.glasser.ai/v1/solutions/gtm/people_search")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"job_titles\": [\n \"<string>\"\n ],\n \"seniorities\": [],\n \"locations\": [\n \"<string>\"\n ],\n \"company_domain\": \"<string>\",\n \"keywords\": \"<string>\",\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"limit\": 50,\n \"task_id\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.glasser.ai/v1/solutions/gtm/people_search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"job_titles\": [\n \"<string>\"\n ],\n \"seniorities\": [],\n \"locations\": [\n \"<string>\"\n ],\n \"company_domain\": \"<string>\",\n \"keywords\": \"<string>\",\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"limit\": 50,\n \"task_id\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {},
"output": {
"total_matches": 123,
"items": [
{
"name": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"job_title": "<string>",
"seniority": "<string>",
"department": "<string>",
"headline": "<string>",
"linkedin_url": "<string>",
"city": "<string>",
"region": "<string>",
"country": "<string>",
"country_code": "<string>",
"email": "<string>",
"email_status": "<string>",
"email_catch_all": true,
"email_source": "<string>",
"phone": "<string>",
"company_name": "<string>",
"company_domain": "<string>",
"company_linkedin_url": "<string>",
"apollo_match_confidence": "<string>",
"pdl_likelihood": 123,
"hunter_email_score": 123,
"zoominfo_accuracy_score": 123
}
]
},
"provider_response": {
"http_status": 349,
"error": null
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {},
"action": "search",
"result_status": "success",
"error": {
"code": "<string>",
"message": "<string>"
},
"runs": [
{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {
"omitted": true
},
"output": {
"omitted": true
},
"provider_response": {
"http_status": 349
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {}
}
],
"result_url": "<string>"
}{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {},
"output": {
"total_matches": 123,
"items": [
{
"name": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"job_title": "<string>",
"seniority": "<string>",
"department": "<string>",
"headline": "<string>",
"linkedin_url": "<string>",
"city": "<string>",
"region": "<string>",
"country": "<string>",
"country_code": "<string>",
"email": "<string>",
"email_status": "<string>",
"email_catch_all": true,
"email_source": "<string>",
"phone": "<string>",
"company_name": "<string>",
"company_domain": "<string>",
"company_linkedin_url": "<string>",
"apollo_match_confidence": "<string>",
"pdl_likelihood": 123,
"hunter_email_score": 123,
"zoominfo_accuracy_score": 123
}
]
},
"provider_response": {
"http_status": 349,
"error": null
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {},
"action": "search",
"result_status": "success",
"error": {
"code": "<string>",
"message": "<string>"
},
"runs": [
{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {
"omitted": true
},
"output": {
"omitted": true
},
"provider_response": {
"http_status": 349
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {}
}
],
"result_url": "<string>"
}{
"error": {
"code": "validation_failed",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "insufficient_balance",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "endpoint_not_permitted",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "idempotency_conflict",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "rate_limited",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "service_unavailable",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}各操作输出
各操作的规范化字段。enrich 和 find_email 返回与搜索行相同字段的单个人员。原生输出保留在 Run 中,可通过 GET /v1/runs/:id 读取。未报告的值为 null;有效空结果保留操作结构,各字段为 null 或 items 为 [],result_status 为 no_result。姓名、职称和标签按响应方原样保留。自有模型分数带数据提供商名称,如 pdl_likelihood,其他家为 null。- search: total_matches, items[]: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- list_employees: total_matches, items[]: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- enrich: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- find_email: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- find_phone: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- verify_email: email, email_status, email_catch_all, email_disposable, email_webmail, hunter_email_score
{
"action": "find_email",
"provider": "hunter",
"status": "COMPLETED",
"result_status": "success",
"output": {
"name": null, "first_name": "Avery", "last_name": "Example", "job_title": null,
"email": "example@stripe.com", "email_status": "valid", "email_catch_all": true, "email_source": "generated",
"company_name": "Stripe", "company_domain": "stripe.com", "hunter_email_score": 80, "…": "other fields null"
},
"charge_usd": "0.0245",
"runs": [{ "provider": "hunter", "status": "COMPLETED", "charge_usd": "0.0245" }],
"result_url": "/v1/solutions/gtm/people_search/result?token=…"
}
筛选规则
- PDL 精确匹配
job_titles,因此 “CTO” 不匹配 “Co-founder & CTO”。locations按子串匹配,因此 “london” 也匹配 “new london, connecticut”。 - ZoomInfo 没有
founder、owner、partner、head、entry或intern职级,auto会跳过无法满足这些条件的 ZoomInfo。其senior对应整个 “Non Manager” 层级,也包含初级个人贡献者。 - Hunter search 仅列出
company_domain下的个人邮箱,不包含 info@ 等角色邮箱。Prospeo enrich 仅返回其持有已验证工作邮箱的人员。通过 Apollo 执行 find_email 时,也可仅提供linkedin_url;匹配到人员但没有真实邮箱时,视为未找到且不收费。
请求头
为每次预期执行生成唯一值,推荐使用 UUID。使用同一个键和执行参数重试,可读取原 Run,避免再次扣费。使用同一个键但修改执行参数会返回 409;修改 task_id 或 metadata 不会更新原 Run。
1请求体
默认为 search。
- search:至少提供 job_titles、seniorities、locations、company_domain、keywords 之一。Apollo 和 ZoomInfo 不返回邮箱或电话;PDL 返回完整记录;Hunter 列出 company_domain 下的个人邮箱。
- list_employees:提供 company_domain。从 LeadMagic 获取最多 100 份员工资料及实际职称,这是样本,不是完整员工名册,不应用职称或地点筛选。
- enrich:提供 linkedin_url、email,或 full_name 加 company_domain。Prospeo 仅返回其持有已验证工作邮箱的人员。
- find_email:提供 full_name 和 company_domain;Apollo 也接受仅提供 linkedin_url。Apollo 匹配但未返回真实邮箱时,视为未找到且不收费。
- verify_email:提供 email。invalid、catch-all、disposable、unknown 判断均为成功答案,不是无结果。使用最终 Run 的 completed_at 作为检查时间。
- find_phone:LeadMagic 需要 linkedin_url;Prospeo 也接受 email,或 full_name 加 company_domain。仅查询手机号,不发消息或拨号。
筛选条件不会被静默丢弃。auto 会跳过无法应用条件的数据提供商;明确指定时返回 400。
search, list_employees, enrich, find_email, verify_email, find_phone 默认为 auto,按 Glasser 偏好顺序选择第一家符合条件的数据提供商。指定的数据提供商必须支持请求且获得当前 API Key 的允许,不会切换到其他家。可用值见下方。
auto, apollo, pdl, leadmagic, zoominfo, hunter, prospeo 匹配的职称。PDL 精确匹配每个职称,因此 'CTO' 不匹配 'Co-founder & CTO'。
1 - 20 elements1 - 200职级,可多选:owner、founder、c_suite、partner、vp、head、director、manager、senior、entry、intern。指定数据提供商没有对应级别时返回 400,自动模式下跳过。ZoomInfo 没有 founder、owner、partner、head、entry 或 intern;其 senior 对应整个 Non Manager 层级,也包含初级个人贡献者。
1 - 11 elementsowner, founder, c_suite, partner, vp, head, director, manager, senior, entry, intern 自由文本地点。PDL 在人员地点名称中按子串匹配,因此 'london' 也匹配 'new london, connecticut'。
1 - 20 elements1 - 200网站域名,例如 stripe.com。也接受完整 URL,并提取主机名。
3 - 2531 - 3001 - 200邮箱地址。
320^[^\s@]+@[^\s@]+\.[^\s@]+$个人 LinkedIn 资料 URL,格式为 linkedin.com/in/,不接受公司页面。
2048linkedin\.com\/in\/[^/?#\s]+返回条数。请从较少条数开始:路由到的接口可能据此计费。各能力还会进一步限制上限。
1 <= x <= 100将相关 Run,包括自动切换产生的 Run,归入同一个 Task。复用稳定字符串,并通过 Task 筛选 Run 列表。
可选追踪字段,随 Run 返回,也可用于筛选。不会发送给数据提供商,也不影响路由、价格或幂等。
- 最多 20 个键:小写字母、数字和下划线,以字母开头,最长 40 个字符。
- 值:长度为 1–500 的字符串。
- user_id:终端用户的不透明 ID,不得使用邮箱或姓名。
无效条目整体丢弃,不截断。请求继续执行,Run 返回实际保存的字段。
Show child attributes
Show child attributes
响应
成功
在控制台打开 Run,需要工作空间成员权限。
^[a-z0-9][a-z0-9-]*$^\/.+$QUEUED 或 RUNNING 表示仍在执行。COMPLETED 表示已有数据提供商响应,包括非 2xx 响应。FAILED 请读取 failure。STOPPED 表示分派前停止。charge_usd 与状态分别检查。
QUEUED, RUNNING, COMPLETED, FAILED, STOPPED Run 失败原因,仅在 status 为 FAILED 时非 null。
Show child attributes
Show child attributes
各操作的规范化字段。enrich 和 find_email 返回与搜索行相同字段的单个人员。原生输出保留在 Run 中,可通过 GET /v1/runs/:id 读取。未报告的值为 null;有效空结果保留操作结构,各字段为 null 或 items 为 [],result_status 为 no_result。姓名、职称和标签按响应方原样保留。自有模型分数带数据提供商名称,如 pdl_likelihood,其他家为 null。
- search: total_matches, items[]: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- list_employees: total_matches, items[]: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- enrich: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- find_email: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- find_phone: name, first_name, last_name, job_title, seniority, department, headline, linkedin_url, city, region, country, country_code, email, email_status, email_catch_all, email_source, phone, company_name, company_domain, company_linkedin_url, apollo_match_confidence, pdl_likelihood, hunter_email_score, zoominfo_accuracy_score
- verify_email: email, email_status, email_catch_all, email_disposable, email_webmail, hunter_email_score
- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
仅在 status 为 COMPLETED 时非 null。
- 2xx 响应:output 为任意结构的数据提供商原生 JSON;正文为空时为 null。
- 非 2xx 响应:error 包含数据提供商错误正文,output 为 null。
两种正文均会移除敏感字段。
Show child attributes
Show child attributes
此 Solution 响应所含 runs 的总费用,全部 Run 结算前为 null。每个 Run 保留各自费用;失败也可能收费。
^(0|[1-9]\d*)\.(\d{2}|\d{2}\d{0,3}[1-9])$单个 Run 的计费依据;多个 Run 汇总时为 null。各项费用请查看 runs[].charge_basis。
Show child attributes
Show child attributes
当前是否可接受停止请求。不保证能在分派前停止 Run。
请求停止的时间。如果已开始分派,Run 仍可能继续。
ISO 8601 UTC 时间戳。
ISO 8601 UTC 时间戳。
ISO 8601 UTC 时间戳。
已保存的追踪字段,可用于筛选 Run,不发送给数据提供商,不影响路由、价格或幂等。
- 最多 20 个键:小写字母、数字和下划线,以字母开头,最长 40 个字符。
- 值:长度为 1–500 的字符串。
- user_id:终端用户的不透明 ID,不得使用邮箱或姓名。
Show child attributes
Show child attributes
search, list_employees, enrich, find_email, verify_email, find_phone 业务交付状态,与 status 中的最终 Run 生命周期独立。no_result 为有效空结果;error 表示数据提供商输出无法交付。
success, no_result, error, pending Show child attributes
Show child attributes
Show child attributes
Show child attributes
通过认证读取规范化结果和总费用的只读 URL 路径,配合 API 服务地址使用。不创建 Run,也不恢复切换。GET /v1/runs/:id 仍返回原生单个 Run。