Introduction
The Find Email endpoint discovers professional email addresses for a person. You can identify the person with a LinkedIn profile URL, or with their full name and company domain. Processing is asynchronous: the API acknowledges the request with a webhookId, then you retrieve the result by polling (recommended, no public endpoint required) or through a webhook callback (advanced, push delivery).
Use this endpoint when you need an email address for outreach or CRM enrichment. For push delivery, configure a workspace webhook URL in Settings > Webhooks, or provide webhookUrl in the request.
Note
Async, not real-time. We aim to deliver each result in under 15 seconds, but it can take tens of minutes depending on conditions. Built to update databases and feed async pipelines, not to back a synchronous request a user is waiting on. See Polling for delivery details.
Note
Every email we return is verified. Each candidate address goes through our own validation process, then through a waterfall of professional verification providers chosen among the best on the market: we only return addresses that clear both. We monitor these providers regularly to select the best one when needed, and because the market evolves quickly, we continuously evaluate new vendors to reinforce this waterfall.
Authorization
apikey
string
required
Authorization: Bearer YOUR_API_KEY header.Request body
Choose one lookup strategy. Use either a LinkedIn profile URL, or a full name with a company domain. The split firstName + lastName form is also accepted.
url
string
conditional
https://www.linkedin.com/in/janedoe. Use this for the URL strategy.fullName
string
conditional
Jane Doe. Use this with companyDomain.firstName
string
conditional
lastName and companyDomain instead of fullName.lastName
string
conditional
firstName and companyDomain instead of fullName.companyDomain
string
conditional
acme.com. Required for the name-based strategies.webhookUrl
string
Note
The request must contain url, or fullName + companyDomain, or firstName + lastName + companyDomain.
Response structure
This endpoint replies immediately with a webhookId. You then have two ways to retrieve the actual result:
- Polling (recommended). Call
GET /v2/webhooks/:webhookIduntil the status issucceeded. No webhook URL needed. See the Polling guide. - Webhook callback (advanced). If you provided a
webhookUrl(or a workspace default is configured), the gateway POSTs the emails to that URL once the lookup completes. See Webhook callback payload (advanced) below.
success
boolean
true if the job was created successfullyerror
null
null on successWebhook callback payload (advanced)
When the lookup succeeds, ReverseContact sends a JSON POST request to your webhookUrl. The callback is not wrapped in the V2 response envelope. It always includes the webhookId from the initial acknowledgement and a data value.
{
"webhookId": "b8c9d0e1-f2a3-4b4c-5d6e-7f8091a2b3c4",
"data": [
{
"value": "[email protected]",
"type": "professional"
}
]
}
Webhook callback errors (advanced)
When the lookup cannot return an email, data is not an array. Instead, it contains an errorCode identifying the failure reason:
{
"webhookId": "b8c9d0e1-f2a3-4b4c-5d6e-7f8091a2b3c4",
"data": {
"errorCode": "email-not-found"
}
}
data.errorCode will be one of the following values:
| Code | Billed | Description |
|---|---|---|
email-not-found |
No | No email address was discovered for the person |
person-not-found |
No | No matching person was found for the supplied identifiers |
invalid-request |
No | The lookup input is malformed or does not match an accepted form |
fetch-data-error |
No | The lookup failed while fetching data; safe to retry |
webhook-url-invalid |
Yes | The callback URL returned a 4xx response |
webhook-url-errored |
Yes | The callback URL returned a 5xx response or a network error |
webhook-url-timeout |
Yes | The callback URL did not respond in time |
webhook-url-unreachable |
Yes | The callback URL could not be reached |
Note
The lookup costs 3 credits only when an email is found. A lookup that returns email-not-found, person-not-found, invalid-request, or fetch-data-error costs 0 credits. A delivery failure remains billed when the email was successfully found.