curl --request POST \
--url https://api.aisa.one/apis/v1/apollo/people/match \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain": "apollo.io",
"name": "tim zheng"
}
'import requests
url = "https://api.aisa.one/apis/v1/apollo/people/match"
payload = {
"domain": "apollo.io",
"name": "tim zheng"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({domain: 'apollo.io', name: 'tim zheng'})
};
fetch('https://api.aisa.one/apis/v1/apollo/people/match', 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.aisa.one/apis/v1/apollo/people/match",
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([
'domain' => 'apollo.io',
'name' => 'tim zheng'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.aisa.one/apis/v1/apollo/people/match"
payload := strings.NewReader("{\n \"domain\": \"apollo.io\",\n \"name\": \"tim zheng\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.aisa.one/apis/v1/apollo/people/match")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain\": \"apollo.io\",\n \"name\": \"tim zheng\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/apollo/people/match")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain\": \"apollo.io\",\n \"name\": \"tim zheng\"\n}"
response = http.request(request)
puts response.read_body{
"person": {},
"waterfall": {}
}People Enrichment
Enrich one person: give whatever identifiers you have and get back Apollo’s full record for them.
curl --request POST \
--url https://api.aisa.one/apis/v1/apollo/people/match \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain": "apollo.io",
"name": "tim zheng"
}
'import requests
url = "https://api.aisa.one/apis/v1/apollo/people/match"
payload = {
"domain": "apollo.io",
"name": "tim zheng"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({domain: 'apollo.io', name: 'tim zheng'})
};
fetch('https://api.aisa.one/apis/v1/apollo/people/match', 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.aisa.one/apis/v1/apollo/people/match",
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([
'domain' => 'apollo.io',
'name' => 'tim zheng'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.aisa.one/apis/v1/apollo/people/match"
payload := strings.NewReader("{\n \"domain\": \"apollo.io\",\n \"name\": \"tim zheng\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.aisa.one/apis/v1/apollo/people/match")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain\": \"apollo.io\",\n \"name\": \"tim zheng\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/apollo/people/match")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain\": \"apollo.io\",\n \"name\": \"tim zheng\"\n}"
response = http.request(request)
puts response.read_body{
"person": {},
"waterfall": {}
}email, first_name plus last_name, name, domain, organization_name, linkedin_url or hashed_email — the more you supply, the likelier the match. Returns a person object with id, name, title, headline, linkedin_url, twitter_url, github_url, photo_url, organization_id and an employment_history array, plus a request_id. Personal emails and phone numbers are withheld unless reveal_personal_emails or reveal_phone_number is set, and those cost extra credits. A 200 does not guarantee a match — check whether person actually came back. Use post_apollo_people_bulk_match for up to 10 people in one call; use post_apollo_mixed_people_api_search when you do not have an identifier and need to find candidates first.
https://mcp.aisa.one/mcp — Claude
Code, Codex, Cursor, VS Code and the rest. Authorization is OAuth: the client
opens a browser, you click Allow once, and there is no key to paste. Your
agent then reaches every endpoint through a few meta tools: search,
list_categories, get_details and batch_quote are free, batch_use is
billed per call. Setup per client is in
Connect via MCP; the live tool list and what each call
costs are on aisa.one/mcp.Request contract
- Method and path: POST /apis/v1/apollo/people/match
- Availability: enabled
- Request URL template: https://api.aisa.one/apis/v1/apollo/people/match
- reveal_phone_number: query; optional
- run_waterfall_email: query; optional
- run_waterfall_phone: query; optional
- webhook_url: query; optional
- Runtime facts: 9ab7612cf2d53be794cbf1d65d4a257f986ac6783e53c7c3a5d868e4593061c3
{
"operationId": "post_apollo_people_match",
"method": "POST",
"path": "/apis/v1/apollo/people/match",
"servers": [
{
"url": "https://api.aisa.one"
}
],
"parameters": [
{
"description": "Set to true if you want to enrich the person's data with all available phone numbers, including mobile phone numbers. This potentially consumes credits as part of your Apollo pricing plan . The default value is false. If this parameter is set to true, you must enter a webhook URL for the webhook_url parameter. Apollo will asynchronously verify phone numbers for you, then send a JSON response that includes only details about the person's phone numbers to the webhook URL you provide. It can take several minutes for the phone numbers to be delivered.",
"examples": {
"default": {
"value": false
}
},
"in": "query",
"name": "reveal_phone_number",
"required": false,
"schema": {
"default": false,
"type": "boolean"
}
},
{
"description": "Set to true to enable email waterfall enrichment",
"examples": {
"default": {
"value": false
}
},
"in": "query",
"name": "run_waterfall_email",
"required": false,
"schema": {
"default": false,
"type": "boolean"
}
},
{
"description": "Set to true to enable phone waterfall enrichment",
"examples": {
"default": {
"value": false
}
},
"in": "query",
"name": "run_waterfall_phone",
"required": false,
"schema": {
"default": false,
"type": "boolean"
}
},
{
"description": "If you set the reveal_phone_number parameter to true, this parameter becomes mandatory. Otherwise, do not use this parameter. Enter the webhook URL that specifies where Apollo should send a JSON response that includes the phone number you requested. Apollo suggests testing this flow to ensure you receive the separate response with the phone number. If phone numbers are not revealed delivered to the webhook URL, try applying UTF-8 encoding to the webhook URL. Example: https://webhook.site/cc4cf44e-e047-4774-8dac-473d28474e40; https%3A%2F%2Fwebhook.site%2Fcc4cf44e-e047-4774-8dac-473d28474e40",
"in": "query",
"name": "webhook_url",
"required": false,
"schema": {
"format": "https_url",
"maxLength": 2048,
"minLength": 1,
"type": "string"
}
}
],
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"content": {
"application/json": {
"example": {
"domain": "apollo.io",
"name": "tim zheng"
},
"schema": {
"anyOf": [
{
"properties": {
"first_name": {
"minLength": 1,
"type": "string"
}
},
"required": [
"first_name"
]
},
{
"properties": {
"last_name": {
"minLength": 1,
"type": "string"
}
},
"required": [
"last_name"
]
},
{
"properties": {
"name": {
"minLength": 1,
"type": "string"
}
},
"required": [
"name"
]
},
{
"properties": {
"email": {
"minLength": 1,
"type": "string"
}
},
"required": [
"email"
]
},
{
"properties": {
"hashed_email": {
"minLength": 1,
"type": "string"
}
},
"required": [
"hashed_email"
]
},
{
"properties": {
"organization_name": {
"minLength": 1,
"type": "string"
}
},
"required": [
"organization_name"
]
},
{
"properties": {
"domain": {
"minLength": 1,
"type": "string"
}
},
"required": [
"domain"
]
},
{
"properties": {
"id": {
"minLength": 1,
"type": "string"
}
},
"required": [
"id"
]
},
{
"properties": {
"linkedin_url": {
"minLength": 1,
"type": "string"
}
},
"required": [
"linkedin_url"
]
}
],
"description": "Identify one person. Give at least one identifier; the more you supply, the likelier the match.",
"minProperties": 1,
"properties": {
"domain": {
"description": "The domain name for the person's employer. This can be the current employer or a previous employer. Do not include www., the @ symbol, or similar. Example: apollo.io or microsoft.com",
"type": "string"
},
"email": {
"description": "The email address of the person. Example: example@email.com",
"type": "string"
},
"first_name": {
"description": "The first name of the person. This is typically used in combination with the last_name parameter. Example: tim",
"type": "string"
},
"hashed_email": {
"description": "The hashed email of the person. The email should adhere to either the MD5 or SHA-256 hash format. Example: 8d935115b9ff4489f2d1f9249503cadf (MD5) or 97817c0c49994eb500ad0a5e7e2d8aed51977b26424d508f66e4e8887746a152 (SHA-256)",
"type": "string"
},
"id": {
"description": "The Apollo ID for the person. Each person in the Apollo database is assigned a unique ID. To find IDs, call the People API Search endpoint and identify the values for person_id. Example: 587cf802f65125cad923a266",
"type": "string"
},
"last_name": {
"description": "The last name of the person. This is typically used in combination with the first_name parameter. Example: zheng",
"type": "string"
},
"linkedin_url": {
"description": "The URL for the person's LinkedIn profile. Example: http://www.linkedin.com/in/tim-zheng-677ba010",
"type": "string"
},
"name": {
"description": "The full name of the person. This will typically be a first name and last name separated by a space. If you use this parameter, you do not need to use the first_name and last_name parameters. Example: tim zheng",
"type": "string"
},
"organization_name": {
"description": "The name of the person's employer. This can be the current employer or a previous employer. Example: apollo",
"type": "string"
},
"reveal_personal_emails": {
"description": "Set to true if you want to enrich the person's data with personal emails. This potentially consumes credits as part of your Apollo pricing plan . The default value is false. If a person resides in a GDPR -compliant region, Apollo will not reveal their personal email.",
"type": "boolean"
}
},
"type": "object"
}
}
},
"required": true
},
"x-aisa-status": "enabled",
"x-aisa-pricing": {
"cost_contract": "fixed_success",
"customer_multiplier": 1.0,
"customer_pricing": "provider_cost_multiplier",
"default_request_estimate_usd": 0.01975,
"estimate_source": "profile_seed",
"evidence_source": "request_snapshot"
},
"components": {
"securitySchemes": {
"bearerAuth": {
"scheme": "bearer",
"type": "http"
}
}
}
}
Cost and request rules
Published reference price: $0.01975 USD per successful request. Account-specific pricing and final settlement may differ. Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.- Default request reference estimate (USD): 0.01975
- Cost contract: fixed_success
- Published reference multiplier: 1.0
- Settlement evidence source: request_snapshot
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Set to true if you want to enrich the person's data with all available phone numbers, including mobile phone numbers. This potentially consumes credits as part of your Apollo pricing plan . The default value is false. If this parameter is set to true, you must enter a webhook URL for the webhook_url parameter. Apollo will asynchronously verify phone numbers for you, then send a JSON response that includes only details about the person's phone numbers to the webhook URL you provide. It can take several minutes for the phone numbers to be delivered.
Set to true to enable email waterfall enrichment
Set to true to enable phone waterfall enrichment
If you set the reveal_phone_number parameter to true, this parameter becomes mandatory. Otherwise, do not use this parameter. Enter the webhook URL that specifies where Apollo should send a JSON response that includes the phone number you requested. Apollo suggests testing this flow to ensure you receive the separate response with the phone number. If phone numbers are not revealed delivered to the webhook URL, try applying UTF-8 encoding to the webhook URL. Example: https://webhook.site/cc4cf44e-e047-4774-8dac-473d28474e40; https%3A%2F%2Fwebhook.site%2Fcc4cf44e-e047-4774-8dac-473d28474e40
1 - 2048Body
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
Identify one person. Give at least one identifier; the more you supply, the likelier the match.
The first name of the person. This is typically used in combination with the last_name parameter. Example: tim
1The email address of the person. Example: example@email.com
The hashed email of the person. The email should adhere to either the MD5 or SHA-256 hash format. Example: 8d935115b9ff4489f2d1f9249503cadf (MD5) or 97817c0c49994eb500ad0a5e7e2d8aed51977b26424d508f66e4e8887746a152 (SHA-256)
The Apollo ID for the person. Each person in the Apollo database is assigned a unique ID. To find IDs, call the People API Search endpoint and identify the values for person_id. Example: 587cf802f65125cad923a266
The last name of the person. This is typically used in combination with the first_name parameter. Example: zheng
The URL for the person's LinkedIn profile. Example: http://www.linkedin.com/in/tim-zheng-677ba010
The full name of the person. This will typically be a first name and last name separated by a space. If you use this parameter, you do not need to use the first_name and last_name parameters. Example: tim zheng
The name of the person's employer. This can be the current employer or a previous employer. Example: apollo
Set to true if you want to enrich the person's data with personal emails. This potentially consumes credits as part of your Apollo pricing plan . The default value is false. If a person resides in a GDPR -compliant region, Apollo will not reveal their personal email.