Something changed in a workspace you subscribed to

Delivered at least once, so deduplicate on the payload's id, which is the mutation id and is stable across retries. Verify x-indraft-signature before trusting the body: it is t=<unix seconds>,v1=<hex> where the hex is an HMAC-SHA256 of <t>.<raw body> under your endpoint's signing secret, which is shown once when the endpoint is registered. The timestamp is inside the signed material, so a captured delivery cannot be replayed later with a fresh one. Compare in constant time, and reject a timestamp far from your own clock. Respond 2xx to acknowledge; anything else is retried with backoff.

postWebhookmutation

Payload

idstring required
operation'advance_opportunity' | 'configure_watch' | 'advance_custom_record' | 'archive' | 'restore' | 'archive_custom_record' | 'cancel_task' | 'update_task' | 'complete_task' | 'configure_custom_field' | 'configure_exchange_rate' | 'configure_object_type' | 'configure_pipeline' | 'configure_workspace' | 'set_standing_override_policy' | 'confirm' | 'create_opportunity' | 'create_task' | 'erase_subject' | 'link_contact_company' | 'merge_companies' | 'merge_contacts' | 'merge_object_records' | 'record_interaction' | 'revert_change' | 'unmerge' | 'update_opportunity' | 'upsert_company' | 'upsert_contact' | 'upsert_custom_record' required
outcome'created' | 'updated' | 'matched' | 'archived' | 'merged' | 'reverted' | 'noop' required

What the write did. noop means it was accepted and changed nothing, because every value it carried already matched what was stored. IT IS NOT METERED: a noop does not count against your monthly change allowance, so a nightly sync that finds nothing new costs nothing. Neither does a write that only REDUCES what a workspace holds. matched means an upsert found an existing record on real identity evidence rather than creating a second one; reverted and merged are the undo and duplicate paths, and both are ordinary writes that count.

targetTypestring required
targetIdstring required
actorIdstring required
accessPath'rest' | 'mcp' | 'app' | 'system' required
attributionLabelstring required
assertionKind'observed' | 'inferred' | 'imported' | 'user_supplied' required
occurredAtstring required

Response

Acknowledged. Anything outside 2xx is retried.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.