Skip to main content
POST
Job Change Detection OverviewYou input: Previous company identifier (domain or LinkedIn) + contact identifier (LinkedIn, email, or name)You get: Job change status — moved, left, no_change, or unknown — and a profile snapshot when available
Job Change returns results synchronously — status and output are included directly in the response.

Supported input combinations

Provide as many fields as you have — more signals increase match accuracy.
company_domain + contact_linkedin yields the highest coverage. When possible, include both.

Business notes

Add your internal notes here — pricing, use cases, etc.

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: