Skip to main content
POST
Search and Enrich Contacts
Use this endpoint to find contacts and reveal their full data in one request - it combines Search Contacts and Enrich Contacts into a single call. Provide identifiers the same way you would for Search Contacts, then use reveal to control what gets unlocked.
If you need to inspect what’s revealable and its credit cost before committing to a reveal, call Search Contacts first, then Enrich Contacts separately. Use this combined endpoint when you already know you want the full profile.

Endpoint

Authentication

string
required
Your Lusha API key.

Accepted identifiers

Each contact in the contacts array needs one of the following:
  • Lusha contact id
  • linkedinUrl
  • email
  • firstName and lastName and (companyName or companyDomain)

Request body

array
required
Up to 100 contacts to find and enrich.
string[]
What to unlock for each matched contact. Omit this field to get both by default.Allowed values: emails, phones
object

Response

string
Unique ID for this request, in UUID format.
object[]
One entry per contact you searched for. Each result has the same shape as an Enrich Contacts result, plus clientReferenceId.
object
string
Data Waterfall outcome for the request. Omitted when the waterfall didn’t run. One of completed, partial, halted, OUT_OF_CREDITS, PARTIAL_OUT_OF_CREDITS.
string
Human-readable text, present whenever status is set. Don’t parse it - branch on status and statusReason.
string
Why a requested field is empty when the waterfall didn’t run: WATERFALL_NOT_CONFIGURED, WATERFALL_NOT_IN_PLAN, or WATERFALL_DISABLED. When set, status is partial.
Search and Enrich Contacts never returns a job. Only Enrich Contacts can hand off to an async Data Waterfall job.
Billing: Two charges apply - one for the search (api_search) and one per revealed field.

Error codes

Example

Example response

Authorizations

api_key
string
header
required

Your Lusha API key. You can find this in your Lusha dashboard under API settings. Include this key in the api_key header for all requests.

Body

application/json
contacts
object[]
required
Required array length: 1 - 100 elements
reveal
enum<string>[]
Available options:
emails,
phones
Example:
options
object

Additional options for search requests

Response

Successful response

requestId
string<uuid>
results
object[]
billing
object

Credit usage summary for a V3 API request

status
enum<string>

Waterfall outcome for the request. Omitted when the waterfall did not run.

  • completed - every requested data point was resolved.
  • partial - at least one requested data point is still missing, or still in progress when job is present.
  • halted - the run stopped before it finished the provider list.
  • OUT_OF_CREDITS - the run stopped because the account could not pay.
  • PARTIAL_OUT_OF_CREDITS - some data was returned, then credits ran out.
Available options:
completed,
partial,
halted,
OUT_OF_CREDITS,
PARTIAL_OUT_OF_CREDITS
Example:

"partial"

statusDescription
string

Human-readable text, present whenever status is set. Do not parse it - branch on status and statusReason.

Example:

"Some requested data points are still being retrieved."

statusReason
enum<string>

Stable reason a requested field is empty because the waterfall did not run. When set, status is partial.

  • WATERFALL_NOT_CONFIGURED - Data Waterfall is on the plan, but no providers are connected.
  • WATERFALL_NOT_IN_PLAN - Data Waterfall is not on the account's plan.
  • WATERFALL_DISABLED - the request set waterfallEnabled to false, and Lusha did not have the field.
Available options:
WATERFALL_NOT_CONFIGURED,
WATERFALL_NOT_IN_PLAN,
WATERFALL_DISABLED