Skip to main content
This event fires once per field, not once per save. A form that writes six fields to one record produces six deliveries, each naming a different propertyId. Debounce on recordId if you only care that the record moved.

Payload

string
required
The record that changed.
string
The object it belongs to.
string
The prop_… id of the one property this delivery is about. Resolve it against the object’s schema to get its key and name.
any
The value before the change, in stored shape. null means the field was genuinely empty. The key being absent means no prior value could be read, which is a different thing.
any
The value after the change. null means the field was cleared.
object
The whole record after the change, keyed by property key, plus an id key holding the record id.

Why record is there as well

Because it saves you a round trip in the common case. The changed field is named by propertyId, and record gives you the state the record is now in, so a handler that needs three fields to make a decision has them without calling back.
record here carries an id key, which record.created does not. That asymmetry comes from the emitters and is faithful to what is actually sent.

Naming the property

propertyId is an id, not something to show a person. Read the object’s schema once and cache the map:

Worth knowing

  • Order is not guaranteed. Two changes to the same record can arrive out of order, so record is the more trustworthy view of current state than replaying current values in arrival order. If it matters, read the record back.
  • Bulk edits are suppressed, along with imports and AI property fills.
  • Computed properties. A formula or rollup recalculating is not itself a field write and does not reliably produce this event. Treat computed values in record as a snapshot rather than a trigger.

Example