Skip to main content
POST
Check whether a customer still works at the company you have on file. If they’ve moved, you can review their new company and decide whether to reconnect.
Only pay when a job change is found. You aren’t charged for unchanged or inconclusive results. Company enrichment after the check is billed separately.
This endpoint performs one check and returns the result synchronously. Schedule repeat checks in your own workflow; calling it does not create an ongoing monitor.
For best results, send the company domain and the contact’s LinkedIn profile. The endpoint also supports email and other identifier combinations shown in the schema below.

Decide what to do with the result

Read output.job_change_status: output.person contains a profile snapshot when available and can be empty. Contact channels are redacted. Check the returned fields before updating your CRM. Next: Follow a customer to a new company. For a prior result, use the job retrieval reference.

Authorizations

x-api-key
string
header
required

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

Body

application/json

Job Change request payload with company/person identifiers and optional custom_fields.

Request payload for Job Change. Valid input sets include: 1) company_domain + (contact_linkedin, professional_email, personal_email, or contact_full_name) 2) company_linkedin + (contact_linkedin, professional_email, or personal_email) 3) professional_email (optionally with contact_full_name)

company_domain
string
required

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"

contact_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"

company_linkedin
string | null

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"

professional_email
string<email> | null

Professional or personal email address.

Required string length: 6 - 254
Example:

"john.doe@waterfall.io"

personal_email
string<email> | null

Professional or personal email address.

Required string length: 6 - 254
Example:

"john.doe@gmail.com"

contact_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"

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

Job Change result returned successfully.

Job Change response with job state, input, and optional output.

status
enum<string>
required

The status of the job.

Available options:
RUNNING,
SUCCEEDED,
FAILED,
TIMED_OUT,
ABORTED
Example:

"RUNNING"

start_date
string<date-time>
required

A date time in ISO 8601 format.

Example:

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

input
object | null
required
Example:
stop_date
string<date-time>

A date time in ISO 8601 format.

Example:

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

output
object

Job Change output payload.

Example: