Overview
SignalHire’s database contains detailed professional profiles for hundreds of millions of people worldwide. The Person API allows looking up individuals using known identifiers — a LinkedIn profile URL, email address, phone number, or SignalHire profile UID — and retrieving their full profile data including contact information. Up to 100 identifiers can be submitted in a single request, and identifier types can be mixed freely within the same batch.This endpoint consumes standard SignalHire credits for each successfully matched profile. Credits are shared across the website, browser extension, and API. See API Pricing for details.
- Async mode (default) — submit a request with a
callbackUrl, receive arequestIdimmediately, and get results POSTed to your URL once ready. Suitable when maximum contact coverage is needed. - Sync mode (Without Waterfall) — submit a request without a
callbackUrland receive results immediately in the response. Faster, but may return fewer or slightly older contacts. See Without Waterfall mode.
Before You Start
Make sure you have:- A valid API key — see Authentication
- A publicly accessible callback URL ready to receive POST requests (for async mode)
- Sufficient credits — see Get Remaining Credits
Endpoint:
POST https://www.signalhire.com/api/v1/candidate/search
Request Parameters
In Request Headersstring
required
Your secret API key. See Authentication.
array
required
Array of identifiers to look up. Each item can be a LinkedIn profile URL, email address, phone number, or 32-character SignalHire profile UID. Maximum 100 items per request. Types can be mixed freely within a single request.
string
URL on your server where results will be POSTed once processing is complete. Required unless using
withoutWaterfall. See Callback Delivery.boolean
If
true, returns results synchronously in the response body instead of via callback. Cannot be combined with callbackUrl. See Without Waterfall mode.boolean
If
true, returns profile data without contact details (emails, phones). Requires a separate credit type. See Without Contacts.How It Works (Async Mode)
- Submit a POST request with an
itemsarray and acallbackUrl - SignalHire immediately returns a
requestIdwith HTTP201 - The server queries internal and external sources for each item in parallel
- Once complete, results are POSTed to the
callbackUrl
For a simpler synchronous flow without setting up a callback server, use Without Waterfall mode.
Request Example
Initial Response (HTTP 201)
201 means the request was accepted and processing has started.
The requestId uniquely identifies this request — it will be included in the Request-Id header of the callback payload, allowing incoming results to be matched to the original request.
For other possible response codes — such as 401, 402, 429 — see Response Codes.
Callback Format
Once processing is complete, SignalHire POSTs an array to yourcallbackUrl. Each element corresponds to one item from the request and contains:
item— the original identifier submitted (LinkedIn URL, email, phone, or UID)status— result of processing for this item (see status values below)candidate— full profile object, present only whenstatusissuccess. See Candidate Object for a complete field reference.
Callback Status Values
Callback Delivery
Setting up a reliable callback endpoint is the responsibility of the API client. The endpoint must be publicly accessible, accept POST requests, and respond with HTTP200 within 10 seconds. SignalHire has no way to re-initiate processing — if a callback is lost, a new API request must be submitted.
Delivery flow:
- Delivery is considered successful when the callback endpoint responds with HTTP
200 - If the connection fails or times out (10 seconds), SignalHire retries 3 times sequentially
- If all retries fail, the callback is discarded and the results are lost
- The
Request-Idheader in the callback payload contains the original request ID for tracking