You need to log in to access your API credentials and start using our APIs. Start with our free trial!
Log In & Start Free TrialPerson Discover API
Discover people based on keywords and criteria. Find potential leads, professionals, and contacts matching your search terms.
API Endpoint
https://api.nyne.ai/person/discover
Try the API Playground
Test the API with our interactive playground to make real requests and see live responses.
Launch Person Discover PlaygroundOverview
The Person Discover API helps you find people matching specific keywords and location criteria. Provide keywords describing the type of people you're looking for (like "registered nurses" or "software engineers") and optionally specify a location to narrow your search. We'll return a list of matching profiles with contact information.
What You Get
- Profile Information: Names, bios, and profile details
- Social Profiles: Links to social media profiles
- Profile Photos: Profile pictures when available
- Contact Details: Email addresses, phone numbers, and professional information when available
Use Cases
- Lead Generation: Find potential customers matching your criteria
- Recruiting: Discover candidates in specific industries or roles
- Market Research: Identify professionals in target markets
- Networking: Find people with shared interests or expertise
Pricing
- Discovery: 1 credit per result
- Enrichment: 1 additional credit per successfully enriched result (only charged when contact details are found)
Authentication
All API requests require authentication using your API key and secret:
X-API-Key: your_api_key
X-API-Secret: your_api_secret
You can also use query parameters: ?api_key=xxx&api_secret=xxx
Rate Limits
The API enforces rate limits to ensure fair usage:
- Default: 60 requests per minute
- Burst: Up to 10 concurrent requests
If you exceed the rate limit, you'll receive a 429 Too Many Requests response.
POST /api/person/discover
Start a new person discovery request.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
keywords |
string | Yes | Keywords describing the people to find (3-500 characters). Example: "registered nurses", "software engineers", "real estate agents" |
location |
string | No | Geographic location to search within. Can be a state (e.g., "California", "CA"), city (e.g., "San Francisco"), or city/state (e.g., "Miami, FL"). If not specified, searches all of the US. |
max_results |
integer | No | Maximum number of results to return (1-100). Default: 50 |
callback_url |
string | No | URL to receive results when processing completes |
Example Request
cURL
curl -X POST "https://api.nyne.ai/api/person/discover" \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key_here" \
-H "X-API-Secret: your_api_secret_here" \
-d '{
"keywords": "registered nurses",
"location": "California"
}'
Python
import requests
url = "https://api.nyne.ai/api/person/discover"
headers = {
"Content-Type": "application/json",
"X-API-Key": "your_api_key_here",
"X-API-Secret": "your_api_secret_here"
}
data = {
"keywords": "registered nurses",
"location": "California"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
JavaScript
const response = await fetch("https://api.nyne.ai/api/person/discover", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "your_api_key_here",
"X-API-Secret": "your_api_secret_here"
},
body: JSON.stringify({
keywords: "registered nurses",
location: "California"
})
});
const data = await response.json();
console.log(data);
PHP
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.nyne.ai/api/person/discover");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"X-API-Key: your_api_key_here",
"X-API-Secret: your_api_secret_here"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"keywords" => "registered nurses",
"location" => "California"
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
Response (202 Accepted)
{
"request_id": "a1b2c3d4e5f6...",
"status": "queued",
"message": "Person discover request queued for processing."
}
GET /api/person/discover
Check the status of a discovery request and retrieve results.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
request_id |
string | Yes | The request_id returned from the POST request |
Example Request
curl "https://api.nyne.ai/api/person/discover?request_id=a1b2c3d4e5f6..." \
-H "X-API-Key: your_api_key_here" \
-H "X-API-Secret: your_api_secret_here"
Response Format
Processing Status
{
"request_id": "a1b2c3d4e5f6...",
"status": "discovering",
"keywords": "registered nurses",
"location": "California",
"created_on": "2024-01-15T10:30:00Z"
}
Status values: pending, searching, discovering, enriching, completed, failed
Completed Response
{
"request_id": "a1b2c3d4e5f6...",
"status": "completed",
"keywords": "registered nurses",
"location": "California",
"created_on": "2024-01-15T10:30:00Z",
"completed_on": "2024-01-15T10:31:45Z",
"results_count": 50,
"results": [
{
"displayname": "Sarah Johnson",
"bio": "Registered Nurse at Kaiser Permanente",
"location": "Los Angeles, CA",
"altemails": ["sarah.johnson@email.com"],
"fullphone": ["555-123-4567"],
"social_profiles": {
"facebook": {
"url": "https://facebook.com/sarah.johnson",
"photo_url": "https://..."
}
}
},
// ... more results
]
}
Response with Contact Details
Results are automatically enriched with contact details when available:
{
"request_id": "a1b2c3d4e5f6...",
"status": "completed",
"keywords": "registered nurses",
"location": "California",
"results_count": 50,
"results": [
{
"displayname": "Sarah Johnson",
"first_name": "Sarah",
"last_name": "Johnson",
"headline": "Registered Nurse at Kaiser Permanente",
"altemails": ["sarah.johnson@email.com"],
"fullphone": ["+1-555-0123"],
"location": "San Francisco, CA",
"social_profiles": {
"facebook": {
"url": "https://facebook.com/sarah.johnson",
"photo_url": "https://..."
},
"linkedin": {
"url": "https://linkedin.com/in/sarahjohnson"
}
},
"work_history": [
{
"title": "Registered Nurse",
"company": "Kaiser Permanente",
"start_date": "2020-01"
}
]
},
// ... more results
]
}
No Results Response
{
"request_id": "a1b2c3d4e5f6...",
"status": "completed",
"keywords": "rare specialty",
"location": "US",
"created_on": "2024-01-15T10:30:00Z",
"completed_on": "2024-01-15T10:31:00Z",
"results_count": 0,
"results": []
}
Error Codes
| HTTP Code | Error Code | Description |
|---|---|---|
| 400 | missing_parameters |
Required parameter is missing (e.g., keywords) |
| 400 | invalid_keywords |
Keywords must be a string (3-500 characters). Arrays or objects are not accepted. |
| 400 | invalid_location |
Location must be a string. Arrays or objects are not accepted. |
| 400 | invalid_callback_url |
Callback URL is not a valid HTTP/HTTPS URL |
| 401 | authentication_error |
Invalid or missing API credentials |
| 402 | insufficient_credits |
Not enough credits for the requested operation |
| 404 | not_found |
Request ID not found |
| 429 | rate_limit_exceeded |
Too many requests, please wait before retrying |
| 500 | internal_error |
Server error, please retry or contact support |
Error Response Format
{
"error": true,
"error_code": "missing_parameters",
"message": "keywords parameter is required"
}
Callbacks
When you provide a callback_url, we'll POST the results to your URL when processing completes:
Callback Payload
{
"request_id": "a1b2c3d4e5f6...",
"status": "completed",
"completed": true,
"results_count": 50,
"results": [ ... ]
}
Failed Callback Payload
{
"request_id": "a1b2c3d4e5f6...",
"status": "failed",
"completed": false,
"error": "Error message describing what went wrong"
}
Callbacks are retried up to 5 times with exponential backoff if your server doesn't respond with a 2xx status code.
Best Practices
- Use specific keywords: Focus keywords on the profession or role you're looking for. "registered nurses" or "licensed electricians" yields better results than generic terms.
- Use the location parameter: Specify a location to narrow results to a geographic area. You can use states ("California"), cities ("San Francisco"), or city/state combinations ("Miami, FL"). Leave blank to search all of the US.
- Use callbacks for production: Instead of polling, use callback URLs to receive results asynchronously.
- Handle no results gracefully: Not all keyword searches will return results. Check
results_countbefore processing. - Respect rate limits: Implement exponential backoff when you receive 429 errors.