Beta: This webhook may not be available for all organizations.
Triggered when a candidate's recent email messages may have changed. Treat this webhook as a signal to perform a complete refresh, not as a per-message change or delta. The payload does not include a message body or email ID.
When refreshing, you must pass data.watermark to candidate.getRecentEmailMessages. Only a request with that watermark is guaranteed to include the up-to-date email change that triggered this webhook. Start a new request for data.candidate.id with the watermark exactly as received and omit cursor.
The watermark is opaque, applies only to the candidate in this payload, and is valid for starting the first page for one hour from the delivery attempt. If the cursorless first-page request is made after that hour, the request fails with watermark_expired. If the first page is accepted within the hour, you can complete the remaining pages after the watermark expires.
On every continuation request, pass the exact same watermark, the returned nextCursor as cursor, and unchanged filters. Continue until the refresh is complete. API keys used for these requests require the emails:read scope.
Deliveries may be duplicated or arrive out of order, so make refresh handling idempotent. webhookActionId is stable across retries of the same webhook event and can be used for deduplication. A delayed delivery retry receives a new watermark. If an earlier refresh did not complete, process the retry with its new watermark. observedAt is informational.
200Return a 200 status to indicate that the data was received successfully

