Keywords: Signals, API.
Q:
When I go to Experiment -> Properties -> Modified, I see one date, but when I use API call GET/entities/{eid} for same experiment, I see that editedAt attribute value has another different date.
Why is there a difference?
A:
Each entity (where an entity is a Notebook, Experiment, MS Word document etc.) has its own editedAt timestamp which reflects the last edited event for that entity.
For example, a user could modify a MS Word document in an experiment and the editedAt for the MS Word Document is updated, while the editedAt for the Experiment is not. Similarly, when an Experiment inherits access via Sharing from a Notebook, changing the Notebook Sharing settings will modify the editedAt for the Notebook but not the Experiment.
The Last Modified "field" in the UI is a logical construction of multiple possible events. In the case of an Experiment it takes the latest time from the editedAt for the Experiment, the various editedAt for the contained entity children (e.g. MS Word) and any Sharing changes on a parent Notebook. It also excludes any printing events.
There is not an expectation of an absolute 1:1 relationship between the displayed audited events shown in History, which include the printing events but exclude the Sharing events made on the Notebook, and the Last Modified "field".
Presumably any auditing activities involve queries against the ExternalAPI rather than via the UI itself. The entities APIs only include the editedAt property for the given entity, edits to the parent notebook or the descendent children entities are reflected in those individual entity responses. Our search APIs, which return index data rather than entity data itself, are further supplemented with an equivalent of the Last Modified "field" similar to that available in the UI.
Signals Notebook is working as designed and this behavior is not considered a bug.
Recommended approach is to use our search APIs to identify experiments of interest, then use the GET/entity endpoints and the GET/entities/{eid}/children, then compare and take the most recent editedAt from any child object.