Skip to main content
POST
Contact Enrichment Launcher
This request starts an enrichment job. It returns a job_id, not the finished profile.Save that ID, then use Get signup results to check progress and retrieve the profile. Or add webhook_url and we’ll send the result to your endpoint when it’s ready.
Send a personal or work email to look up the person’s role, current company, location, and work history when available.

Send your signup context

Using a workflow tool? Add its webhook URL as webhook_url in this request. We’ll send the completed result there, so you don’t need to poll. See an example. Use custom_fields for your CRM ID, record ID, or plan tier. These values come back unchanged with the result, so you can connect it to the right record. They do not affect matching or score the signup.

Pick the identifier you have

Waterfall uses the highest-priority input you provide: email first, then LinkedIn, then name and domain. If that lookup fails, it does not fall back to the other inputs.

Receive the result in your backend

To retrieve the result yourself, call:
While the job is RUNNING, wait and check again with backoff. When it is SUCCEEDED, read output.person. Stop polling if it fails, times out, or is aborted. See Get signup results for the full request and polling or webhooks for delivery details. Run enrichment separately so signup doesn’t have to wait. Phone enrichment is optional and can add charges. Leave it off when your workflow only needs person and company context. Next: Enrich the account using the matched company domain, or follow the signup qualification guide.

Authorizations

x-api-key
string
header
required

To access the API, provide your API key in x-api-key.

Body

application/json

Contact enrichment payload: provide one identifier strategy (linkedin, email, full_name + domain, or first_name + last_name + domain) plus optional include_phones, webhook_url, and custom_fields.

Request payload to launch a contact enrichment job.

linkedin
string | null
required

Company LinkedIn URL or ID/handle (for example google from https://www.linkedin.com/company/google/). Recommended input to maximize coverage.

Required string length: 3 - 500
Example:

"waterfall-io"

full_name
string | null

Full name of the contact. Providing first_name and last_name is preferable when both are available.

Required string length: 4 - 250
Example:

"John Doe"

first_name
string | null

First name of the contact.

Required string length: 1 - 100
Example:

"John"

last_name
string | null

Last name of the contact.

Required string length: 1 - 100
Example:

"Doe"

domain
string

The domain where you want to find contacts. It can be a plain domain or a full URL; Waterfall automatically extracts the company domain.

Required string length: 4 - 500
Example:

"waterfall.io"

email
string<email>

Professional or personal email address.

Required string length: 6 - 254
Example:

"john.doe@example.com"

include_phones
boolean
default:false

Default false. If set to true, Waterfall runs advanced phone enrichment to maximize phone coverage and additional charges may apply when numbers are found.

webhook_url
string<uri>

Optional webhook callback URL. If supplied, Waterfall POSTs the same payload returned by the Finder endpoint when processing completes. If your webhook responds with 429, 500, 502, or 504, Waterfall retries delivery up to 5 times with exponential backoff. Waterfall includes X-Webhook-Signature containing a compact JWT when webhook signing configuration is available. The JWT protected header contains alg: "EdDSA", kid, and typ: "JWT". Its claims contain iat, exp, jti, job_id, body_hash, and body_hash_alg: "sha-256". body_hash is the unpadded base64url-encoded SHA-256 digest of the exact raw request body bytes. The JSON body is unchanged by signing. Signatures expire exactly 15 minutes after iat; receivers should reject expired signatures. If signing configuration is unavailable or invalid, Waterfall preserves backward compatibility by sending the callback unsigned without X-Webhook-Signature.

Maximum string length: 2083
Example:

"https://webhook.site/70dd34e3-564d-4339-81e3-ed97416140a1"

custom_fields
object | null

Optional custom key-value metadata echoed on job input and output (useful for correlating internal source metadata). On create requests, omit the field or send JSON null when no custom fields are needed; both are stored as {}. When present, the value must be a JSON object with keys matching ^[A-Za-z0-9_-]+$ and values that are a string (max 1000 characters), number, or boolean. Empty string, arrays, and other non-object types return HTTP 400. On job GET responses, input.task.custom_fields is always an object ({} or populated).

Example:

Response

Contact enrichment job successfully launched.

Response returned when a contact enrichment job is successfully launched.

job_id
string<uuid>
required

A UUID.

Example:

"7d44db58-5de3-4e92-a2fb-8325d12c2e8b"

start_date
string<date-time>
required

A date time in ISO 8601 format.

Example:

"2025-02-05T15:46:35.771751+00:00"