curl --request POST \
--url https://api.datalayer.so/v1/people/lookup \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"person_id": "456"
}
'import requests
url = "https://api.datalayer.so/v1/people/lookup"
payload = { "person_id": "456" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({person_id: '456'})
};
fetch('https://api.datalayer.so/v1/people/lookup', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": {
"person_id": "456",
"name": "Example Person",
"profile_url": "https://www.linkedin.com/in/example-person/",
"headline": null,
"title": null,
"summary": null,
"location": {
"text": null,
"country": null
},
"company": null,
"skills": [],
"languages": [],
"experience": [],
"education": [],
"source_updated_at": null,
"work_email": {
"status": "not_requested",
"emails": []
}
},
"meta": {
"request_id": "example-request-001",
"retrieved_at": "2026-09-21T12:00:00Z",
"upstream_requests": 1,
"billing_status": "profile_deducted",
"profiles_used": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Get a person
Retrieve one person by exactly one returned person ID or public LinkedIn /in/ URL. Include work_email only when contact information is requested. Available employer-domain business addresses receive bounded verification. A valid person profile counts even if an email is absent, invalid or uncertain.
curl --request POST \
--url https://api.datalayer.so/v1/people/lookup \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"person_id": "456"
}
'import requests
url = "https://api.datalayer.so/v1/people/lookup"
payload = { "person_id": "456" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({person_id: '456'})
};
fetch('https://api.datalayer.so/v1/people/lookup', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": {
"person_id": "456",
"name": "Example Person",
"profile_url": "https://www.linkedin.com/in/example-person/",
"headline": null,
"title": null,
"summary": null,
"location": {
"text": null,
"country": null
},
"company": null,
"skills": [],
"languages": [],
"experience": [],
"education": [],
"source_updated_at": null,
"work_email": {
"status": "not_requested",
"emails": []
}
},
"meta": {
"request_id": "example-request-001",
"retrieved_at": "2026-09-21T12:00:00Z",
"upstream_requests": 1,
"billing_status": "profile_deducted",
"profiles_used": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}person_id or public HTTPS LinkedIn /in/ profile
URL. URLs must not include query parameters or fragments.
Set include to ["work_email"] only when contact information is needed. A valid
person lookup counts even if no email is available or verification is inconclusive.
Read work-email statuses and usage and retries.Authorizations
Send Authorization: Bearer dl_live_<64 lowercase hexadecimal characters>. Approved users can create account-scoped, revocable keys in the Datalayer dashboard. A key does not grant a profile allowance. Dashboard session cookies are not API credentials.
Headers
Recommended for lookup retries. A key is scoped to this account and bound to the normalized operation/input. Reuse it only for the same request within 24 hours; changed input, an expired key, or a different resolved profile returns 409. A replay refetches data but deducts no additional profile. If omitted, the server creates a request ID. A network failure after database commit starts can leave a completed deduction; a timeout alone does not imply zero usage.
1 - 128^[A-Za-z0-9_-]{1,128}$Body
- Option 1
- Option 2
^[1-9][0-9]{0,19}$Public LinkedIn profile URL under /in/, without credentials, a query, fragment, or non-default port.
Optional work_email requests return per-address verification status; no separate email price.
1"work_email"