Start a phone enrichment
Starts an asynchronous lookup of mobile and direct-dial phone numbers for one LinkedIn profile. The call returns at once with a request _id and status: "pending".
How the lookup works. If Salesfinity already holds a number for the profile that is not a landline and not graded P3, the request completes at once. Otherwise sources in Salesfinity’s data network are asked one at a time; every number found is validated, and the request completes on the first that is valid, not a landline and not P3. When no source is left to ask, it resolves not-found. A source that already searched the profile in the last two months is skipped, so repeating a not-found lookup soon after usually returns not-found again.
Getting the result. Poll Get a phone enrichment result with the _id, or pass a callback_url. The request moves from pending to completed or not-found; it never ends failed.
Credits. A completed lookup that returns numbers costs 1 enrichment credit, from the same team balance as email lookups; not-found is free. The team needs at least 1 credit when you call this, or the request is refused with 402. The credit is charged once, when the result arrives. See Get enrichment credit balance.
Retries. Not idempotent: each call creates a new request, and a profile whose numbers are already on file completes at once and is charged again. Store results instead of requesting the same profile twice.
Callback. Delivered as a JSON POST with up to 3 attempts, 2 seconds apart; each attempt waits 10 seconds for a response, and any 2xx counts as delivered. If every attempt fails, poll instead. The body carries request_id (this _id), status, enrichment_type (contact), contact (the profile, with its phone_numbers), linkedin_url and, if you sent one, external_id. Unlike the poll response, the numbers are nested under contact. On not-found, contact is null, or holds the numbers already on file when no source was asked.
_id and status: "pending". Collect the result by polling the _id, or by passing a callback_url that Salesfinity POSTs to when the lookup finishes. The request ends completed or not-found; a phone lookup never ends failed.
How the lookup works
- If Salesfinity already holds a number for the profile that is not a landline and not graded
P3, the request completes at once. - Otherwise sources in Salesfinity’s data network are asked one at a time. Every number a source returns is validated, and the request completes on the first number that is valid, not a landline and not graded
P3. - When no source is left to ask, the request resolves
not-found.
not-found lookup soon afterwards usually returns not-found again.
completed lookup that returns numbers costs 1 enrichment credit; not-found is free. Phone and email lookups draw on the same team balance, checked with Get enrichment credit balance. The team needs at least 1 credit when you call this, or the request is refused with 402. The credit is charged once, when the result arrives.Request body
Example request
Response (201)
_id. It is the handle for polling and comes back as request_id in the callback. external_id is not echoed here or in the poll response.
Callback payload
If you supplied acallback_url, Salesfinity POSTs a JSON body to it once the lookup resolves:
contact carries the profile Salesfinity holds, with other profile fields alongside phone_numbers. Each number has the same shape as in the poll response. Note the shape difference: the callback nests the numbers under contact, while the poll response returns phone_numbers at the top level.
phone_numbers lists every number held for the profile, including landlines and P3 numbers kept from earlier lookups, so filter on validation before dialing. status is completed or not-found. On not-found, contact is usually null; when no source was asked at all, it holds the numbers already on file.
Delivery makes up to 3 attempts, 2 seconds apart. Each attempt waits 10 seconds for your endpoint, and any 2xx response counts as delivered. If every attempt fails, poll instead.
Retries and repeat lookups
This call is not idempotent: every call creates a new request. A profile whose numbers are already on file completes at once and is charged again, so store the numbers you receive rather than requesting the same profile twice. A402, a 400 or a 502 charges nothing.
Errors
Authorizations
Team-scoped API key generated in the Salesfinity dashboard under Settings → Connections → API & Webhooks. A missing or invalid key returns HTTP 403.
Body
LinkedIn profile URL in the form https://www.linkedin.com/in/<username>. The http or https scheme is required, www. is optional and a trailing slash is allowed. Country subdomains such as uk.linkedin.com, query strings, fragments and extra path segments are rejected with 400.
"https://www.linkedin.com/in/janedoe"
Optional. A public http or https URL that receives the result as a JSON POST when the lookup finishes. localhost and private, loopback or link-local IP addresses are rejected with 400. Up to 3 delivery attempts, 2 seconds apart, each waiting 10 seconds; any 2xx response counts as delivered.
"https://example.com/webhooks/enrichment"
Optional. Your own reference, up to 256 characters, returned as external_id in the callback. It is not returned by this endpoint or by polling.
256"lead-42"
Response
The lookup was accepted. Poll the returned _id, or wait for the callback.
Enrichment request ID. Use this to poll GET /v1/api/enrichment/phone/{id}, and to match the request_id in the callback.
"507f1f77bcf86cd799439011"
pending until the lookup resolves, then completed (a dialable number was found) or not-found. processing is not currently returned, and a phone lookup never resolves to failed.
pending, processing, completed, not-found The LinkedIn profile URL as you sent it.
"https://www.linkedin.com/in/username"
The username extracted from the LinkedIn URL.
"username"
Always contact for phone enrichment.
contact Every number Salesfinity holds for the profile, not only the one this request found, including landlines and P3 numbers kept from earlier lookups. Populated only when status is completed; an empty array otherwise. Absent from the response to Start a phone enrichment.
"2026-08-27T10:15:04.221Z"
"2026-08-27T10:16:38.904Z"