/v2/enrich/personWebhook result: Documentation
| Endpoint | POST /v2/enrich/person |
| Credit cost | 0.1 credits / result |
| Response | Synchronous — email/phone reveal is async via webhook |
| When to use | Look up a single person and optionally reveal their email/phone in one call |
curl -X POST "https://api.ocean.io/v2/enrich/person" \
-H "X-Api-Token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"person": {
"linkedin": "linkedin.com/in/jane-doe-123"
}
}'import requests
response = requests.post(
'https://api.ocean.io/v2/enrich/person',
headers={'X-Api-Token': 'YOUR_API_TOKEN'},
json={'person': {'linkedin': 'linkedin.com/in/jane-doe-123'}},
)
data = response.json()const response = await fetch('https://api.ocean.io/v2/enrich/person', {
method: 'POST',
headers: { 'X-Api-Token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({ person: { linkedin: 'linkedin.com/in/jane-doe-123' } }),
});
const data = await response.json();To also reveal the email in the same request:
{
"person": { "linkedin": "linkedin.com/in/jane-doe-123" },
"revealEmails": {
"includeEmails": true,
"webhookUrl": "https://yourapp.com/webhooks/ocean"
}
}The base match response is returned synchronously. Email/phone results arrive at your webhook asynchronously.
Example response:
{
"id": "abc123",
"name": "Jane Doe",
"jobTitle": "Head of Product",
"seniorities": ["Head"],
"departments": ["Product"],
"domain": "example.com",
"country": "de",
"email": { "address": null, "status": "notFound" }
}apiToken string x-api-token string id string name string firstName string lastName string jobTitle string email string phone string facebook string twitter string linkedin string country string name string registrationNumber string email string phone string countryCode string state string city string streetAddress string postalCode string address string facebook string twitter string linkedin string instagram string xing string domain string youtube string includeEmails boolean webhookUrl string includePhones boolean webhookUrl string 200 Successful Responseid string Required domain string Required name string firstName string lastName string country string state string location string linkedinUrl string "Owner""Founder""Board Member""C-Level""Partner""VP""Head""Director""Manager""Other""Accounting and Finance""Board""Business Support""Customer Relations""Design""Editorial Personnel""Engineering""Founder/Owner""Healthcare""HR""Legal""Management""Manufacturing""Marketing and Advertising""Operations""PR and Communications""Procurement""Product""Quality Control""R&D""Sales""Security""Supply Chain""Other"photo string jobTitle string jobTitleEnglish string currentJobDescription string domain string jobTitle string dateFrom string dateTo string description string linkedinCompanyHandle string summary string status enum Required "verified""notFound""inProgress"address string Required status enum Required "verified""guessed""catchAll""notFound"updatedAt string connectionsCount integer followersCount integer headline string creditsUsed number Required 201 Createddetail enum Required "Data gathering process has started. Please try again later."400 Bad Requestdetail enum Required "Conflicting API tokens provided in query parameters and headers""Empty `person` body"402 Payment Requireddetail enum Required "Insufficient credits"403 Forbiddendetail enum Required "API token should be provided in headers or query parameters""Current API token is not registered in our database"404 Not Founddetail enum Required "No matching record found"422 Validation Errormsg string Required type string Required input any What's the strongest identifier for matching?
person.id (from a previous search) › person.linkedin › person.email › name + company.domain
What does email.status: "notFound" mean?
The email wasn't pre-indexed. Use revealEmails in this request or call Reveal Emails with the returned id to trigger live verification.
Can I bulk-enrich people?
Yes — use Enrich People (Batch) for up to 10,000 people per request.