The ability to snapshot object data before its state is changed via an update.

The list of objects that support snapshotting can be found using CORE_OBJECT_SEARCH with snapshotavailable='Y'.

i.e. go to and using browser console run:{object: 'core_object', fields: ['title', 'snapshotavailable'], filters: {snapshotavailable: 'Y'}, all: true})

You then set which of the objects you want snapshotting to occur on using SETUP_SNAPSHOT_MANAGE.

By default you wont see snapshot object data in _SEARCHs to include set custom option "includesnapshots = Y".

Snapshotting includes structural elements that have extended an objects attributes.

CORE Endpoint
SETUP Endpoint
SETUP_SNAPSHOT_MANAGE Enable snapshotting for an object
SETUP_SNAPSHOT_SEARCH Retrieve which objects have snapshotting available
  For an object that supports snapshotting there are some additional system attributes;     
SnapshotId This is the id of the record that this is a snapshot for.
SnapshotCreatedUserId, SnapshotModifiedUserId, SnapshotCreatedDate, SnapshotModifiedDate, SnapshotSessionId  Are who did the update.
 CreatedUserId, ModifiedUserId, CreatedDate, ModifiedDate, SessionId  Are the original values