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'.

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

By default your want 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