curl --request POST \
--url https://api.reply.io/v3/live-data/searches \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"accountListIds": [
{
"value": 2
}
],
"industries": [
{
"value": "<string>"
}
],
"companyLocations": [
{
"value": "<string>"
}
],
"companySizes": [],
"headcountGrowth": {
"min": 1,
"max": 1
},
"departmentHeadcountGrowth": {
"department": "<string>",
"min": 1,
"max": 1
},
"accountKeywords": {
"values": [
{
"value": "<string>"
}
]
},
"isHiringOnLinkedIn": true,
"contactLocations": [
{
"value": "<string>"
}
],
"jobTitles": [
{
"value": "<string>"
}
],
"departments": [
{
"value": "<string>"
}
],
"seniorities": [
"<string>"
],
"contactKeywords": {
"values": [
{
"value": "<string>"
}
]
}
},
"contactsCountToAdd": 2,
"addContactsWithoutEmails": true,
"maxPeoplePerCompany": 1,
"sequenceId": 123,
"listIds": [
123
],
"referenceUrl": "<string>",
"searchContactPhones": true
}
'import requests
url = "https://api.reply.io/v3/live-data/searches"
payload = {
"filters": {
"accountListIds": [{ "value": 2 }],
"industries": [{ "value": "<string>" }],
"companyLocations": [{ "value": "<string>" }],
"companySizes": [],
"headcountGrowth": {
"min": 1,
"max": 1
},
"departmentHeadcountGrowth": {
"department": "<string>",
"min": 1,
"max": 1
},
"accountKeywords": { "values": [{ "value": "<string>" }] },
"isHiringOnLinkedIn": True,
"contactLocations": [{ "value": "<string>" }],
"jobTitles": [{ "value": "<string>" }],
"departments": [{ "value": "<string>" }],
"seniorities": ["<string>"],
"contactKeywords": { "values": [{ "value": "<string>" }] }
},
"contactsCountToAdd": 2,
"addContactsWithoutEmails": True,
"maxPeoplePerCompany": 1,
"sequenceId": 123,
"listIds": [123],
"referenceUrl": "<string>",
"searchContactPhones": True
}
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({
filters: {
accountListIds: [{value: 2}],
industries: [{value: '<string>'}],
companyLocations: [{value: '<string>'}],
companySizes: [],
headcountGrowth: {min: 1, max: 1},
departmentHeadcountGrowth: {department: '<string>', min: 1, max: 1},
accountKeywords: {values: [{value: '<string>'}]},
isHiringOnLinkedIn: true,
contactLocations: [{value: '<string>'}],
jobTitles: [{value: '<string>'}],
departments: [{value: '<string>'}],
seniorities: ['<string>'],
contactKeywords: {values: [{value: '<string>'}]}
},
contactsCountToAdd: 2,
addContactsWithoutEmails: true,
maxPeoplePerCompany: 1,
sequenceId: 123,
listIds: [123],
referenceUrl: '<string>',
searchContactPhones: true
})
};
fetch('https://api.reply.io/v3/live-data/searches', 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.reply.io/v3/live-data/searches",
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([
'filters' => [
'accountListIds' => [
[
'value' => 2
]
],
'industries' => [
[
'value' => '<string>'
]
],
'companyLocations' => [
[
'value' => '<string>'
]
],
'companySizes' => [
],
'headcountGrowth' => [
'min' => 1,
'max' => 1
],
'departmentHeadcountGrowth' => [
'department' => '<string>',
'min' => 1,
'max' => 1
],
'accountKeywords' => [
'values' => [
[
'value' => '<string>'
]
]
],
'isHiringOnLinkedIn' => true,
'contactLocations' => [
[
'value' => '<string>'
]
],
'jobTitles' => [
[
'value' => '<string>'
]
],
'departments' => [
[
'value' => '<string>'
]
],
'seniorities' => [
'<string>'
],
'contactKeywords' => [
'values' => [
[
'value' => '<string>'
]
]
]
],
'contactsCountToAdd' => 2,
'addContactsWithoutEmails' => true,
'maxPeoplePerCompany' => 1,
'sequenceId' => 123,
'listIds' => [
123
],
'referenceUrl' => '<string>',
'searchContactPhones' => true
]),
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.reply.io/v3/live-data/searches"
payload := strings.NewReader("{\n \"filters\": {\n \"accountListIds\": [\n {\n \"value\": 2\n }\n ],\n \"industries\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companyLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companySizes\": [],\n \"headcountGrowth\": {\n \"min\": 1,\n \"max\": 1\n },\n \"departmentHeadcountGrowth\": {\n \"department\": \"<string>\",\n \"min\": 1,\n \"max\": 1\n },\n \"accountKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n },\n \"isHiringOnLinkedIn\": true,\n \"contactLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"jobTitles\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"departments\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"seniorities\": [\n \"<string>\"\n ],\n \"contactKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n }\n },\n \"contactsCountToAdd\": 2,\n \"addContactsWithoutEmails\": true,\n \"maxPeoplePerCompany\": 1,\n \"sequenceId\": 123,\n \"listIds\": [\n 123\n ],\n \"referenceUrl\": \"<string>\",\n \"searchContactPhones\": true\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.reply.io/v3/live-data/searches")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"accountListIds\": [\n {\n \"value\": 2\n }\n ],\n \"industries\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companyLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companySizes\": [],\n \"headcountGrowth\": {\n \"min\": 1,\n \"max\": 1\n },\n \"departmentHeadcountGrowth\": {\n \"department\": \"<string>\",\n \"min\": 1,\n \"max\": 1\n },\n \"accountKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n },\n \"isHiringOnLinkedIn\": true,\n \"contactLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"jobTitles\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"departments\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"seniorities\": [\n \"<string>\"\n ],\n \"contactKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n }\n },\n \"contactsCountToAdd\": 2,\n \"addContactsWithoutEmails\": true,\n \"maxPeoplePerCompany\": 1,\n \"sequenceId\": 123,\n \"listIds\": [\n 123\n ],\n \"referenceUrl\": \"<string>\",\n \"searchContactPhones\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/live-data/searches")
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 \"filters\": {\n \"accountListIds\": [\n {\n \"value\": 2\n }\n ],\n \"industries\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companyLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companySizes\": [],\n \"headcountGrowth\": {\n \"min\": 1,\n \"max\": 1\n },\n \"departmentHeadcountGrowth\": {\n \"department\": \"<string>\",\n \"min\": 1,\n \"max\": 1\n },\n \"accountKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n },\n \"isHiringOnLinkedIn\": true,\n \"contactLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"jobTitles\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"departments\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"seniorities\": [\n \"<string>\"\n ],\n \"contactKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n }\n },\n \"contactsCountToAdd\": 2,\n \"addContactsWithoutEmails\": true,\n \"maxPeoplePerCompany\": 1,\n \"sequenceId\": 123,\n \"listIds\": [\n 123\n ],\n \"referenceUrl\": \"<string>\",\n \"searchContactPhones\": true\n}"
response = http.request(request)
puts response.read_body{
"searchId": 123
}{
"title": "Bad Request",
"status": 400,
"detail": "Filters are invalid.",
"code": "liveDataSearch.invalidParameter"
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "You do not have permission to add prospects.",
"code": "liveDataSearch.forbidden"
}{
"title": "Conflict",
"status": 409,
"detail": "A live data search is already in progress.",
"code": "liveDataSearch.searchInProgress"
}{
"title": "Unprocessable Entity",
"status": 422,
"detail": "No matching contacts were found for the given filters.",
"code": "liveDataSearch.noMatchingContacts"
}{
"title": "Bad Gateway",
"status": 502,
"detail": "Upstream service failure: ...",
"code": "liveDataSearch.upstreamFailure"
}Start a Live Data search
Beta. This endpoint is in beta. Behavior, parameters, and response shapes may change without notice.
contacts:write scope (or a broader one that includes it).
Starts a Live Data search that finds contacts matching the filters and adds them as prospects (optionally moving them into a sequence and/or lists). Consumes credits from the Reply credit pool per resulting contact. Returns the created search’s id; track its progress via GET /v3/live-data/searches/{id}.
curl --request POST \
--url https://api.reply.io/v3/live-data/searches \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"accountListIds": [
{
"value": 2
}
],
"industries": [
{
"value": "<string>"
}
],
"companyLocations": [
{
"value": "<string>"
}
],
"companySizes": [],
"headcountGrowth": {
"min": 1,
"max": 1
},
"departmentHeadcountGrowth": {
"department": "<string>",
"min": 1,
"max": 1
},
"accountKeywords": {
"values": [
{
"value": "<string>"
}
]
},
"isHiringOnLinkedIn": true,
"contactLocations": [
{
"value": "<string>"
}
],
"jobTitles": [
{
"value": "<string>"
}
],
"departments": [
{
"value": "<string>"
}
],
"seniorities": [
"<string>"
],
"contactKeywords": {
"values": [
{
"value": "<string>"
}
]
}
},
"contactsCountToAdd": 2,
"addContactsWithoutEmails": true,
"maxPeoplePerCompany": 1,
"sequenceId": 123,
"listIds": [
123
],
"referenceUrl": "<string>",
"searchContactPhones": true
}
'import requests
url = "https://api.reply.io/v3/live-data/searches"
payload = {
"filters": {
"accountListIds": [{ "value": 2 }],
"industries": [{ "value": "<string>" }],
"companyLocations": [{ "value": "<string>" }],
"companySizes": [],
"headcountGrowth": {
"min": 1,
"max": 1
},
"departmentHeadcountGrowth": {
"department": "<string>",
"min": 1,
"max": 1
},
"accountKeywords": { "values": [{ "value": "<string>" }] },
"isHiringOnLinkedIn": True,
"contactLocations": [{ "value": "<string>" }],
"jobTitles": [{ "value": "<string>" }],
"departments": [{ "value": "<string>" }],
"seniorities": ["<string>"],
"contactKeywords": { "values": [{ "value": "<string>" }] }
},
"contactsCountToAdd": 2,
"addContactsWithoutEmails": True,
"maxPeoplePerCompany": 1,
"sequenceId": 123,
"listIds": [123],
"referenceUrl": "<string>",
"searchContactPhones": True
}
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({
filters: {
accountListIds: [{value: 2}],
industries: [{value: '<string>'}],
companyLocations: [{value: '<string>'}],
companySizes: [],
headcountGrowth: {min: 1, max: 1},
departmentHeadcountGrowth: {department: '<string>', min: 1, max: 1},
accountKeywords: {values: [{value: '<string>'}]},
isHiringOnLinkedIn: true,
contactLocations: [{value: '<string>'}],
jobTitles: [{value: '<string>'}],
departments: [{value: '<string>'}],
seniorities: ['<string>'],
contactKeywords: {values: [{value: '<string>'}]}
},
contactsCountToAdd: 2,
addContactsWithoutEmails: true,
maxPeoplePerCompany: 1,
sequenceId: 123,
listIds: [123],
referenceUrl: '<string>',
searchContactPhones: true
})
};
fetch('https://api.reply.io/v3/live-data/searches', 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.reply.io/v3/live-data/searches",
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([
'filters' => [
'accountListIds' => [
[
'value' => 2
]
],
'industries' => [
[
'value' => '<string>'
]
],
'companyLocations' => [
[
'value' => '<string>'
]
],
'companySizes' => [
],
'headcountGrowth' => [
'min' => 1,
'max' => 1
],
'departmentHeadcountGrowth' => [
'department' => '<string>',
'min' => 1,
'max' => 1
],
'accountKeywords' => [
'values' => [
[
'value' => '<string>'
]
]
],
'isHiringOnLinkedIn' => true,
'contactLocations' => [
[
'value' => '<string>'
]
],
'jobTitles' => [
[
'value' => '<string>'
]
],
'departments' => [
[
'value' => '<string>'
]
],
'seniorities' => [
'<string>'
],
'contactKeywords' => [
'values' => [
[
'value' => '<string>'
]
]
]
],
'contactsCountToAdd' => 2,
'addContactsWithoutEmails' => true,
'maxPeoplePerCompany' => 1,
'sequenceId' => 123,
'listIds' => [
123
],
'referenceUrl' => '<string>',
'searchContactPhones' => true
]),
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.reply.io/v3/live-data/searches"
payload := strings.NewReader("{\n \"filters\": {\n \"accountListIds\": [\n {\n \"value\": 2\n }\n ],\n \"industries\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companyLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companySizes\": [],\n \"headcountGrowth\": {\n \"min\": 1,\n \"max\": 1\n },\n \"departmentHeadcountGrowth\": {\n \"department\": \"<string>\",\n \"min\": 1,\n \"max\": 1\n },\n \"accountKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n },\n \"isHiringOnLinkedIn\": true,\n \"contactLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"jobTitles\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"departments\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"seniorities\": [\n \"<string>\"\n ],\n \"contactKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n }\n },\n \"contactsCountToAdd\": 2,\n \"addContactsWithoutEmails\": true,\n \"maxPeoplePerCompany\": 1,\n \"sequenceId\": 123,\n \"listIds\": [\n 123\n ],\n \"referenceUrl\": \"<string>\",\n \"searchContactPhones\": true\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.reply.io/v3/live-data/searches")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"accountListIds\": [\n {\n \"value\": 2\n }\n ],\n \"industries\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companyLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companySizes\": [],\n \"headcountGrowth\": {\n \"min\": 1,\n \"max\": 1\n },\n \"departmentHeadcountGrowth\": {\n \"department\": \"<string>\",\n \"min\": 1,\n \"max\": 1\n },\n \"accountKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n },\n \"isHiringOnLinkedIn\": true,\n \"contactLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"jobTitles\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"departments\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"seniorities\": [\n \"<string>\"\n ],\n \"contactKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n }\n },\n \"contactsCountToAdd\": 2,\n \"addContactsWithoutEmails\": true,\n \"maxPeoplePerCompany\": 1,\n \"sequenceId\": 123,\n \"listIds\": [\n 123\n ],\n \"referenceUrl\": \"<string>\",\n \"searchContactPhones\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/live-data/searches")
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 \"filters\": {\n \"accountListIds\": [\n {\n \"value\": 2\n }\n ],\n \"industries\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companyLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"companySizes\": [],\n \"headcountGrowth\": {\n \"min\": 1,\n \"max\": 1\n },\n \"departmentHeadcountGrowth\": {\n \"department\": \"<string>\",\n \"min\": 1,\n \"max\": 1\n },\n \"accountKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n },\n \"isHiringOnLinkedIn\": true,\n \"contactLocations\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"jobTitles\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"departments\": [\n {\n \"value\": \"<string>\"\n }\n ],\n \"seniorities\": [\n \"<string>\"\n ],\n \"contactKeywords\": {\n \"values\": [\n {\n \"value\": \"<string>\"\n }\n ]\n }\n },\n \"contactsCountToAdd\": 2,\n \"addContactsWithoutEmails\": true,\n \"maxPeoplePerCompany\": 1,\n \"sequenceId\": 123,\n \"listIds\": [\n 123\n ],\n \"referenceUrl\": \"<string>\",\n \"searchContactPhones\": true\n}"
response = http.request(request)
puts response.read_body{
"searchId": 123
}{
"title": "Bad Request",
"status": 400,
"detail": "Filters are invalid.",
"code": "liveDataSearch.invalidParameter"
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "You do not have permission to add prospects.",
"code": "liveDataSearch.forbidden"
}{
"title": "Conflict",
"status": 409,
"detail": "A live data search is already in progress.",
"code": "liveDataSearch.searchInProgress"
}{
"title": "Unprocessable Entity",
"status": 422,
"detail": "No matching contacts were found for the given filters.",
"code": "liveDataSearch.noMatchingContacts"
}{
"title": "Bad Gateway",
"status": 502,
"detail": "Upstream service failure: ...",
"code": "liveDataSearch.upstreamFailure"
}Authorizations
Authenticate every request with a Bearer token. Pass your Reply API key in the
Authorization header:
Authorization: Bearer <your-api-key>
Get your API key from the Reply dashboard: Settings → API Key.
Body
Configuration for a Live Data search that adds found contacts as prospects.
Account- and contact-level filter configuration for a Live Data search.
Most collections are capped at 25 items. accountKeywords and contactKeywords are always present and non-null in responses even when empty ({ "values": [], "type": "or" }).
Show child attributes
Show child attributes
Number of contacts to find and add
x >= 1When true, contacts without an email address are still added
Maximum contacts to add per company. Optional; defaults to 1 when omitted.
x >= 1Sequence to move the found contacts into
Prospect lists to add the found contacts to
Optional reference URL used to seed the search
When true, enrich phone numbers during the search
Response
Search started
Id of the created search; poll GET /v3/live-data/searches/{id}.