curl --request POST \
--url https://findly.icu/api/v1/search/phonebook \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "email",
"query": "@example.com"
}
'import requests
url = "https://findly.icu/api/v1/search/phonebook"
payload = {
"type": "email",
"query": "@example.com"
}
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({type: 'email', query: '@example.com'})
};
fetch('https://findly.icu/api/v1/search/phonebook', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"module": "phonebook",
"query": "@example.com",
"type": "email",
"total": 2,
"returned": 2,
"truncated": false,
"results": [
{
"selector": "john.doe@example.com",
"date": "2023-11-02T00:00:00.000Z",
"date_raw": "2023-11-02"
},
{
"selector": "jane@example.com",
"date": null,
"date_raw": null
}
],
"billed": true,
"usage": {
"plan": "Professional",
"plan_expires_at": "2026-10-16T12:00:00.000Z",
"daily_quota": 500,
"used": 13,
"remaining": 487,
"resets_at": "2026-09-17T00:00:00.000Z"
}
}Phonebook
Lists every known selector for a domain: email addresses (type: email), subdomains (type: domain) or URLs (type: url). Up to 5,000 selectors per response, or a plain text list with ?format=txt.
curl --request POST \
--url https://findly.icu/api/v1/search/phonebook \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "email",
"query": "@example.com"
}
'import requests
url = "https://findly.icu/api/v1/search/phonebook"
payload = {
"type": "email",
"query": "@example.com"
}
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({type: 'email', query: '@example.com'})
};
fetch('https://findly.icu/api/v1/search/phonebook', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"module": "phonebook",
"query": "@example.com",
"type": "email",
"total": 2,
"returned": 2,
"truncated": false,
"results": [
{
"selector": "john.doe@example.com",
"date": "2023-11-02T00:00:00.000Z",
"date_raw": "2023-11-02"
},
{
"selector": "jane@example.com",
"date": null,
"date_raw": null
}
],
"billed": true,
"usage": {
"plan": "Professional",
"plan_expires_at": "2026-10-16T12:00:00.000Z",
"daily_quota": 500,
"used": 13,
"remaining": 487,
"resets_at": "2026-09-17T00:00:00.000Z"
}
}Authorizations
Authorization: Bearer fly_live_…. Takes precedence when both headers are sent.
Query Parameters
json (default) or txt. Same search, same price, different output.
json, txt Body
What you want back: email addresses, domains (subdomains) or URLs. Case-insensitive.
email, domain, url Its shape depends on type: @example.com for email, example.com for domain, https://example.com for url (http or https, a real domain name, no credentials). Sent lowercased.
200"@example.com"
Response
Search served (billed). JSON by default; with ?format=txt, a text/plain attachment named phonebook-{type}-{query}.txt, one selector per line, with X-Results-Total and X-Results-Truncated.
Results found.
Results in results (5,000 max).
true if total is greater than returned.
Quota of the account, after the call.
Show child attributes
Show child attributes
"phonebook"The query as searched (trimmed, lowercased).
email, domain, url Show child attributes
Show child attributes