Skip to main content
GET
Returns a newest-first, cursor-paginated stream of profile diffs for the authenticated organization. Without list, visibility is evaluated when the request runs and includes current watching members on the organization’s Targets, shared default-orbit watches, and current members of the organization’s Lists. With list, only members of that organization-owned List are considered. This is the membership-scoped Monitoring stream, not the graph-wide email or Slack notification fan-out. Each response row is one stored profile diff. The API does not publish a retention SLA or delivery guarantee. The same person can appear more than once, and membership changes can change which events are visible on later requests.

Query parameters

string
Optional lower bound. Use an ISO-8601 date/time or a relative window written as digits plus one unit: m (minutes), h (hours), d (days), or w (weeks), for example 24h or 2w. Events satisfy seen_at >= since. There is no default when omitted. For pagination, compute an absolute timestamp at the start of a pass and reuse it for every page. Repeating since=24h recalculates the lower bound on each request.
string
Optional exact field filter: open_to_work, between_roles, exploring, left_company, joined_company, removed_position, headline, about, or role_description.
string
Optional List selector, at least one character: a List UUID or a case-insensitive List name. A missing List returns 404.
string
Optional opaque value copied from the previous page’s meta.next. It pages toward older events in the same pass. It is not a future-event polling cursor and must not replace a new since value on the next scheduled poll.
integer
default:"25"
Number of rows, from 1 through 100 inclusive.
Only the documented query parameters are supported. The current framework strips unknown query fields rather than returning a validation error; do not rely on this behavior to detect typos. since, type, list, and cursor must be non-empty when supplied.

Response

200 returns data plus meta. before, after, and every field in person except linkedin_url are nullable. meta.next is null when there is no next page.
200
severity is hot or quiet. source is ingest, snapshot_diff, or demo. meta.since is the normalized ISO-8601 lower bound, or null when no since was supplied.

Ordering, cursors, and polling

Events are ordered by seen_at DESC, id DESC. The cursor uses that pair to select strictly older rows; equal timestamps are ordered by UUID. Keep since, type, and list fixed throughout a pass. meta.count is the number of rows on this page, not a total. A 200 with data: [] is valid. Checkpoint the pass start time only after all pages and downstream writes succeed. Use an idempotent destination or transactional outbox to handle a crash between the external write and checkpoint. There is no snapshot isolation across pages; changed membership or late-arriving diffs can affect a later pass. Use a fixed lower bound for a complete pass, follow meta.next until has_more is false, and persist event.id as the event deduplication key. Start the next scheduled pass with a new lower bound based on the last successful checkpoint and a small overlap, such as five minutes. The overlap protects against boundary and clock differences; UUID deduplication makes the replay safe. Never carry the final page cursor into the next pass. This read is safe to retry on a transient network failure, 429, or 5xx with bounded exponential backoff and jitter. Honor Retry-After. Recheck the request and fix the cause for 400, 401, 402, or 404 instead of retrying unchanged.

Errors

The Gateway’s default rate limit is 300 requests per minute per client IP, not per API key. Framework errors can use a different envelope; branch on HTTP status first.