Read search results
Every search you run, single or bulk, produces a search item: the input, the status, and the emails found. This endpoint gives them back to you.
- Up to 100 results per call.
- Limited to 30 calls per minute: wait at least 3 seconds between calls. Webhooks avoid this limit entirely.
- Long lists are paginated. See Pagination.
Get one result
The most common use. Send the _id you received when you started the search:
{ "id": "kMnquYkBTs8kZM9ND26h" }
This also works for a single row of a bulk search.
List your single searches
{ "mode": "single" }
Filter by task with type (email-search, email-verification, domain-search):
{ "mode": "single", "type": "email-search" }
Newest first.
List the rows of a bulk search
Send the file id you got from /bulk-search:
{ "mode": "bulk", "file": "kMnquYkBTs8kZM9ND26h" }
Rows come back in the same order as your data array.
List the rows of all your bulk searches
{ "mode": "bulk" }
Sorted by creation date then row order. Rows of bulk searches started at the same time can be mixed: use their file field to group them. type can't be used with mode: "bulk".
Where is the email?
items[0].status → is it finished? see /statuses
items[0].results.emails[0].email → the email
items[0].results.emails[0].certainty → how reliable it is, see /certainties
items[0].userData.externalId → your own id, if you sent one
https://app.icypeas.com/api/bulk-single-searchs/readGet results from single or bulk searches
AuthorizationstringrequiredYour API key, as is (no
Bearerprefix).Content-TypestringrequiredAlways
application/json.
modestringoptionalType of searches ('bulk' for bulk searches, 'single' for single searches)
Rule: single or bulk
idstringoptionalThe _id of the item you want to fetch
Rule: existing id
filestringoptionalThe file id for your bulk. Useful when you want to retrieve only the searches for a given bulk
Rule: has to be a valid fileId
limitnumberoptionalNumber of results to fetch
Rule: default value is 10, max value is 100
nextbooleanoptionalIf you want to paginate, use this field. true = next page | false = previous page
sortsarray of objectsoptionalArray used to paginate your files, it is this item you need to pass to your requests to fetch the next page
Show item properties (1)
sort itemnumberrequiredTuples of (number, string)
- cURL
- JavaScript
- Python
- PHP
- PowerShell
- JSON body
curl -X POST "https://app.icypeas.com/api/bulk-single-searchs/read" \
-H "Content-Type: application/json" \
-H "Authorization: YOUR_API_KEY" \
-d '{
"mode": "bulk",
"limit": 50,
"file": "#FILEID#"
}'
const response = await fetch("https://app.icypeas.com/api/bulk-single-searchs/read", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "YOUR_API_KEY",
},
body: JSON.stringify({
"mode": "bulk",
"limit": 50,
"file": "#FILEID#"
}),
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
"https://app.icypeas.com/api/bulk-single-searchs/read",
headers={"Authorization": "YOUR_API_KEY"},
json={
"mode": "bulk",
"limit": 50,
"file": "#FILEID#",
},
)
print(response.json())
<?php
$body = <<<'JSON'
{
"mode": "bulk",
"limit": 50,
"file": "#FILEID#"
}
JSON;
$ch = curl_init("https://app.icypeas.com/api/bulk-single-searchs/read");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Authorization: YOUR_API_KEY",
],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
$headers = @{
"Authorization" = "YOUR_API_KEY"
"Content-Type" = "application/json"
}
$body = @'
{
"mode": "bulk",
"limit": 50,
"file": "#FILEID#"
}
'@
$response = Invoke-RestMethod -Method POST -Uri "https://app.icypeas.com/api/bulk-single-searchs/read" -Headers $headers -Body $body
$response | ConvertTo-Json -Depth 10
Paste this in the Body field of Make, Zapier, n8n or Postman.
{
"mode": "bulk",
"limit": 50,
"file": "#FILEID#"
}
200SuccessResponse when your input is good.
{
"success": true,
"items": [
{
"name": "My cool search",
"user": "#USERID#",
"file": "#FILEID#",
"results": {
"firstname": "Example",
"lastname": "Email",
"fullname": "Example Email",
"gender": "UNKNOWN",
"emails": [
{
"email": "example-email@icypeas.com",
"certainty": "ultra_sure",
"mxProvider": "google",
"mxRecords": [
"google.com"
]
}
],
"phones": []
},
"order": 0,
"status": "FOUND",
"system": {
"createdAt": "2023-01-01T13:49:49.630Z",
"modifiedAt": "2023-01-01T13:49:49.630Z"
},
"userData": {
"externalId": "my-custom-id",
"webhookUrl": "https://www.call-me-when-done.com/my-custom-id"
},
"_id": "oSmI5YYBMa6Snk9TvjDA"
}
],
"total": 2534,
"sorts": [
[
1679388635082,
"xxxx"
],
[
1679388543443,
"yyyy"
]
]
}
successbooleanThis field lets you know if your request was successful
itemsarray of objectsArray of results
Show item properties (9)
namestringName of the search ('__icypeas__individual' if it is a single search).
userstringUser ID of the user linked to this search.
filestringFile id when it is a bulk search
resultsobjectObject containing the results of your search.
Show properties (6)
firstnamestringFirst name found during the search, if any.
lastnamestringLast name found during the search, if any.
fullnamestringConcatenation of the user's first and last names, if any.
emailsarray of objectsArray of the found email addresses.
Show item properties (4)
emailstringEmail address found during the search.
certaintyenumHow sure Icypeas is that this address exists: ultra_sure, very_sure, probable, undeliverable or not_found. See the Email certainty page.
mxProviderenumWho hosts the mailbox (google, microsoft, ovh…). See the MX providers page.
mxRecordsarrayArray of MX records. Those are strings
phonesarrayCurrently empty.
saasServicesarrayCurrently empty.
ordernumberIf in bulk search mode, it is the row of the file it was in.
statusstringStatus of this search.
systemobjectInformation concerning the search.
Show properties (2)
createdAtstringISO String Date representing the creation date of the search.
modifiedAtstringISO String Date representing the last modification date of the search.
userDataobjectCustom data that were passed when running either the bulk search or the single search
Show properties (2)
webhookUrlstringCustom webhook URL that will be called for this search (the field is empty if no URL has been passed when running the single/bulk search)
externalIdstringCustom id provided by the user (the field is empty if not custom id was passed when running the single/bulk search)
_idstringID of the search.
totalnumberTotal number of results
sortsarray of objectsArray used to paginate your files, it is this item you need to pass to your requests to fetch the next page
Show item properties (1)
sort itemnumberTuples of (number, string)
200Validation errorResponse when there are validation errors.
The request reached Icypeas but some fields are wrong. The response lists every problem in validationErrors. See how to read and fix errors.
{
"validationErrors": [
{
"expected": "string",
"type": "required",
"field": "user",
"message": "validation_required"
}
],
"success": false
}
| Type | Fields | When it happens |
|---|---|---|
stringvalidation_string | modefile | Error sent when the field is not a string |
stringEmptyvalidation_string_empty | mode | Error sent when the field is an empty string |
stringEnumvalidation_string_enum | mode | Error sent when the field is a string that is not in the enum |
numbervalidation_number | limit | Error sent when the field is not a number |
booleanvalidation_boolean | next | Error sent when the field is not a boolean |
arrayvalidation_array | sorts | Error sent when the field is not a array |
FilePropertyErrorfile_property_error | file | Error sent when the file property is absent in bulk mode |
InvalidFileErrorinvalid_file_error | file | Error sent when the file could not be fetch |
SearchNotFoundErrorsearch_not_found_error | id | Error sent when the id does not correspond to a real search |
ModeOrIdShouldBeUsedErrormode_or_id_should_be_used_error | idmode | Error raised when neither mode nor id is used |
401UnauthorizedResponse when we could not authenticate you.
{
"message": "Unauthorized access.",
"error": "UnauthorizedAccessError",
"status": 401,
"code": "unauthorized_access_error"
}
messagestringHuman-readable message.
errorstringError name
statusnumberHTTP error code
codestringError code
429Too many requestsError received when rate limit is exceeded
{
"message": "You have exceeded the max number of requests per minute.",
"error": "RateLimitExceededError",
"status": 429,
"code": "rate_limit_exceeded_error"
}
messagestringHuman-readable message.
errorstringError name
statusnumberHTTP error code
codestringError code