Skip to main content
POST
Start a phone enrichment
Starts an asynchronous lookup of mobile and direct-dial phone numbers for a LinkedIn profile. The call returns immediately with a request _id and a status of pending. Behind it runs a provider waterfall: each data provider in turn is asked for a number, every candidate is validated, and the request completes on the first number that clears validation. Collect the result either by polling the returned _id, or by providing a callback_url that we POST to when the lookup finishes.
Each completed lookup that returns at least one number costs 1 enrichment credit. A completed result with an empty phone_numbers list, and every not-found result, are free. Phone and email enrichment draw on the same credit pool — check the balance with Get Enrichment Credits. The request is rejected with 402 if the team has no remaining credits.

Request Body

Example Request

Response (201)

Persist the _id — it is the handle for polling and the identifier referenced in the callback as request_id.
external_id is held against your request and returned in the callback only. It is not echoed in this response, nor in the polling response.

Callback payload

If you supplied a callback_url, we POST a JSON body to it once the lookup resolves:
Note the shape difference from polling: the callback nests the numbers under contact, while the poll response returns phone_numbers at the top level. status is either completed or not-found — a phone enrichment never calls back with failed. On not-found, contact is usually null; when the profile is known but no provider was eligible to be queried, contact is present with the numbers already on file. Delivery is attempted up to 3 times with backoff; if every attempt fails, fall back to polling.

Errors

Authorizations

x-api-key
string
header
required

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

Body

application/json
linkedin_url
string
required

LinkedIn profile URL. Must be a linkedin.com/in/ URL.

Example:

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

callback_url
string<uri>

Optional. Webhook URL POSTed when the enrichment finishes. Retried up to 3 times.

Example:

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

external_id
string

Optional. Echoed back in the callback payload for client-side correlation. It is not returned by this endpoint or by the polling endpoint.

Maximum string length: 256
Example:

"lead-42"

Response

Enrichment request 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>

Current state of the request. completed means the waterfall finished; not-found means no number passed validation. Phone enrichment never resolves to failed.

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

The LinkedIn profile URL the request was created with.

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 held for the profile, not only the ones this request discovered. Populated only when status is completed; an empty array otherwise. Absent from the response to POST /v1/api/enrichment/phone.

createdAt
string<date-time>
Example:

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

updatedAt
string<date-time>
Example:

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