Please Log In

You need to log in to access your API credentials and start using our APIs. Start with our free trial!

Log In & Start Free Trial

Person 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 Playground

Overview

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_count before processing.
  • Respect rate limits: Implement exponential backoff when you receive 429 errors.