Skip to main content
POST
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". 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

  1. If Salesfinity already holds a number for the profile that is not a landline and not graded P3, the request completes at once.
  2. 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.
  3. When no source is left to ask, the request resolves not-found.
A source that already searched the profile in the last two months is skipped, so repeating a not-found lookup soon afterwards usually returns not-found again.
A 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)

Persist the _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 a callback_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. A 402, a 400 or a 502 charges nothing.

Errors

Authorizations

x-api-key
string
header
required

Team-scoped API key generated in the Salesfinity dashboard under Settings → Connections → API & Webhooks. A missing or invalid key returns HTTP 403.

Body

application/json
linkedin_url
string
required

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.

Example:

"https://www.linkedin.com/in/janedoe"

callback_url
string<uri>

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.

Example:

"https://example.com/webhooks/enrichment"

external_id
string

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.

Maximum string length: 256
Example:

"lead-42"

Response

The lookup was accepted. Poll the returned _id, or wait for the callback.

_id
string

Enrichment request ID. Use this to poll GET /v1/api/enrichment/phone/{id}, and to match the request_id in the callback.

Example:

"507f1f77bcf86cd799439011"

status
enum<string>

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.

Available options:
pending,
processing,
completed,
not-found
linkedin
string

The LinkedIn profile URL as you sent it.

Example:

"https://www.linkedin.com/in/username"

linkedin_username
string

The username extracted from the LinkedIn URL.

Example:

"username"

enrichment_type
enum<string>

Always contact for phone enrichment.

Available options:
contact
phone_numbers
object[]

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.

createdAt
string<date-time>
Example:

"2026-08-27T10:15:04.221Z"

updatedAt
string<date-time>
Example:

"2026-08-27T10:16:38.904Z"