curl --request POST \
--url https://api.aisa.one/apis/v1/apollo/contacts/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_label_ids": [
"<string>"
],
"contact_stage_ids": [
"<string>"
],
"page": 123,
"per_page": 123,
"q_keywords": "<string>",
"sort_ascending": false,
"sort_by_field": "<string>"
}
'import requests
url = "https://api.aisa.one/apis/v1/apollo/contacts/search"
payload = {
"contact_label_ids": ["<string>"],
"contact_stage_ids": ["<string>"],
"page": 123,
"per_page": 123,
"q_keywords": "<string>",
"sort_ascending": False,
"sort_by_field": "<string>"
}
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({
contact_label_ids: ['<string>'],
contact_stage_ids: ['<string>'],
page: 123,
per_page: 123,
q_keywords: '<string>',
sort_ascending: false,
sort_by_field: '<string>'
})
};
fetch('https://api.aisa.one/apis/v1/apollo/contacts/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.aisa.one/apis/v1/apollo/contacts/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([
'contact_label_ids' => [
'<string>'
],
'contact_stage_ids' => [
'<string>'
],
'page' => 123,
'per_page' => 123,
'q_keywords' => '<string>',
'sort_ascending' => false,
'sort_by_field' => '<string>'
]),
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/contacts/search"
payload := strings.NewReader("{\n \"contact_label_ids\": [\n \"<string>\"\n ],\n \"contact_stage_ids\": [\n \"<string>\"\n ],\n \"page\": 123,\n \"per_page\": 123,\n \"q_keywords\": \"<string>\",\n \"sort_ascending\": false,\n \"sort_by_field\": \"<string>\"\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/contacts/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_label_ids\": [\n \"<string>\"\n ],\n \"contact_stage_ids\": [\n \"<string>\"\n ],\n \"page\": 123,\n \"per_page\": 123,\n \"q_keywords\": \"<string>\",\n \"sort_ascending\": false,\n \"sort_by_field\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/apollo/contacts/search")
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 \"contact_label_ids\": [\n \"<string>\"\n ],\n \"contact_stage_ids\": [\n \"<string>\"\n ],\n \"page\": 123,\n \"per_page\": 123,\n \"q_keywords\": \"<string>\",\n \"sort_ascending\": false,\n \"sort_by_field\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"breadcrumbs": [
{}
],
"contacts": [
{}
],
"disable_eu_prospecting": true,
"has_join": true,
"num_fetch_result": {},
"pagination": {},
"partial_results_limit": 123,
"partial_results_only": true
}Search for Contacts
Search contacts — the people saved in this Apollo workspace.
curl --request POST \
--url https://api.aisa.one/apis/v1/apollo/contacts/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_label_ids": [
"<string>"
],
"contact_stage_ids": [
"<string>"
],
"page": 123,
"per_page": 123,
"q_keywords": "<string>",
"sort_ascending": false,
"sort_by_field": "<string>"
}
'import requests
url = "https://api.aisa.one/apis/v1/apollo/contacts/search"
payload = {
"contact_label_ids": ["<string>"],
"contact_stage_ids": ["<string>"],
"page": 123,
"per_page": 123,
"q_keywords": "<string>",
"sort_ascending": False,
"sort_by_field": "<string>"
}
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({
contact_label_ids: ['<string>'],
contact_stage_ids: ['<string>'],
page: 123,
per_page: 123,
q_keywords: '<string>',
sort_ascending: false,
sort_by_field: '<string>'
})
};
fetch('https://api.aisa.one/apis/v1/apollo/contacts/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.aisa.one/apis/v1/apollo/contacts/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([
'contact_label_ids' => [
'<string>'
],
'contact_stage_ids' => [
'<string>'
],
'page' => 123,
'per_page' => 123,
'q_keywords' => '<string>',
'sort_ascending' => false,
'sort_by_field' => '<string>'
]),
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/contacts/search"
payload := strings.NewReader("{\n \"contact_label_ids\": [\n \"<string>\"\n ],\n \"contact_stage_ids\": [\n \"<string>\"\n ],\n \"page\": 123,\n \"per_page\": 123,\n \"q_keywords\": \"<string>\",\n \"sort_ascending\": false,\n \"sort_by_field\": \"<string>\"\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/contacts/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_label_ids\": [\n \"<string>\"\n ],\n \"contact_stage_ids\": [\n \"<string>\"\n ],\n \"page\": 123,\n \"per_page\": 123,\n \"q_keywords\": \"<string>\",\n \"sort_ascending\": false,\n \"sort_by_field\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/apollo/contacts/search")
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 \"contact_label_ids\": [\n \"<string>\"\n ],\n \"contact_stage_ids\": [\n \"<string>\"\n ],\n \"page\": 123,\n \"per_page\": 123,\n \"q_keywords\": \"<string>\",\n \"sort_ascending\": false,\n \"sort_by_field\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"breadcrumbs": [
{}
],
"contacts": [
{}
],
"disable_eu_prospecting": true,
"has_join": true,
"num_fetch_result": {},
"pagination": {},
"partial_results_limit": 123,
"partial_results_only": true
}page and per_page. Returns contacts with id, name, first_name, last_name, title, organization_name, linkedin_url, contact_stage_id, owner_id, person_id and source, alongside pagination and model_ids. ⚠️ The workspace is shared across AIsa callers, so results include contacts other callers created. To find people who are not saved here, use post_apollo_mixed_people_api_search.
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/contacts/search
- Availability: enabled
- Request URL template: https://api.aisa.one/apis/v1/apollo/contacts/search
- Runtime facts: 9ab7612cf2d53be794cbf1d65d4a257f986ac6783e53c7c3a5d868e4593061c3
{
"operationId": "post_apollo_contacts_search",
"method": "POST",
"path": "/apis/v1/apollo/contacts/search",
"servers": [
{
"url": "https://api.aisa.one"
}
],
"parameters": [],
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"properties": {
"contact_label_ids": {
"description": "The Apollo IDs for the labels that you want to include in your search results. If you add multiple labels, Apollo will include all contacts connected to any of the labels, along with the other parameters, in the search results. Example: `['6095a710bd01d100a506d4ae']`",
"items": {
"type": "string"
},
"type": "array"
},
"contact_stage_ids": {
"description": "The Apollo IDs for the contact stages that you want to include in your search results. If you add multiple contact stages, Apollo will include all contacts that match any of the stages, along with the other parameters, in the search results. Call the [list contact stages endpoint](https://docs.apollo.io/reference/list-contact-stages) to retrieve a list of all the contact stage IDs available in your Apollo account. Example: `6095a710bd01d100a506d4ae`",
"items": {
"type": "string"
},
"type": "array"
},
"page": {
"description": "The page number of the Apollo data that you want to retrieve. Use this parameter in combination with the `per_page` parameter to make search results navigable and improve the performance of the endpoint. Example: `4`",
"format": "int32",
"type": "integer"
},
"per_page": {
"description": "The number of search results that should be returned for each page. Limiting the number of results per page improves the endpoint's performance. Use the `page` parameter to search the different pages of data. Example: `10`",
"format": "int32",
"type": "integer"
},
"q_keywords": {
"description": "Add a keyword search string to narrow the contacts in your team's Apollo account. Keywords should be related to the same search concept and can include names, job titles, employers or company names, or email addresses. Examples: `matthew helm`; `CEO`; `Sumware Software`",
"type": "string"
},
"sort_ascending": {
"default": false,
"description": "Set to `true` to sort the matching contacts in ascending order. This parameter must be used with `sort_by_field`. Otherwise, the sorting logic is not applied. Example: `true`",
"type": "boolean"
},
"sort_by_field": {
"description": "Sort the matching contacts by 1 of the following options: \n- `contact_last_activity_date`: The most recent activity date recorded first.\n- `contact_email_last_opened_at`: The most recent email opened date first.\n- `contact_email_last_clicked_at`: The most recent email clicked first.\n- `contact_created_at`: The most recently created first.\n- `contact_updated_at`: The most recently updated first.",
"type": "string"
}
},
"type": "object"
}
}
},
"required": true
},
"x-aisa-status": "enabled",
"x-aisa-pricing": {
"cost_contract": "fixed_success",
"customer_pricing": "fixed_success",
"default_request_estimate_usd": 0.012,
"estimate_source": "profile_seed",
"evidence_source": "request_snapshot"
},
"components": {
"securitySchemes": {
"bearerAuth": {
"scheme": "bearer",
"type": "http"
}
}
}
}
Cost and request rules
Published reference price: $0.012 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.012
- Cost contract: fixed_success
- Settlement evidence source: request_snapshot
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The Apollo IDs for the labels that you want to include in your search results. If you add multiple labels, Apollo will include all contacts connected to any of the labels, along with the other parameters, in the search results. Example: ['6095a710bd01d100a506d4ae']
The Apollo IDs for the contact stages that you want to include in your search results. If you add multiple contact stages, Apollo will include all contacts that match any of the stages, along with the other parameters, in the search results. Call the list contact stages endpoint to retrieve a list of all the contact stage IDs available in your Apollo account. Example: 6095a710bd01d100a506d4ae
The page number of the Apollo data that you want to retrieve. Use this parameter in combination with the per_page parameter to make search results navigable and improve the performance of the endpoint. Example: 4
The number of search results that should be returned for each page. Limiting the number of results per page improves the endpoint's performance. Use the page parameter to search the different pages of data. Example: 10
Add a keyword search string to narrow the contacts in your team's Apollo account. Keywords should be related to the same search concept and can include names, job titles, employers or company names, or email addresses. Examples: matthew helm; CEO; Sumware Software
Set to true to sort the matching contacts in ascending order. This parameter must be used with sort_by_field. Otherwise, the sorting logic is not applied. Example: true
Sort the matching contacts by 1 of the following options:
contact_last_activity_date: The most recent activity date recorded first.contact_email_last_opened_at: The most recent email opened date first.contact_email_last_clicked_at: The most recent email clicked first.contact_created_at: The most recently created first.contact_updated_at: The most recently updated first.
Response
Successful response
Response array
Response array
Response field
Response field
Fetch-result metadata
Pagination metadata
Response field
Response field