We implemented the document version history feature using onRequestHistory + onRequestHistoryData + setHistoryData. When a document has 3 or more versions, switching to certain versions triggers the following error:
Received changes that are incompatible with the file version
What We Have Verified
File integrity: Each version’s .xlsx file has a unique MD5 hash — the file contents are correct.
changes.zip validity: The zip file exists and has a valid structure (contains changes0.json).
Key uniqueness: Each version uses a unique key (we previously fixed a key reuse issue).
Questions
How can we ensure that the changesUrl (changes.zip) returned by Callback status=2 is fully compatible with the corresponding document version? Even with correct file contents and unique keys, some versions’ changesUrl is still incompatible with the document.
Is there an event callback for changesUrl compatibility errors in setHistoryData? Currently the error is only logged in the browser console via app.js. Neither the onError nor onWarning events are triggered, making it impossible for the frontend to catch this error.
Is there a recommended way to validate whether a changesUrl is compatible with a document version before calling setHistoryData?
Thanks for the detailed report and for sharing all the verification steps — it’s very helpful!
A few quick notes first:
You’re currently on Document Server 9.2.0. The latest stable version is 9.3.1, and 9.4 is scheduled for the end of April. So we recommend updating first and re-testing.
Since this is an integration issue (involving onRequestHistory, onRequestHistoryData, setHistoryData, and changesUrl), it will take time to investigate.
To move forward faster, could you please provide:
Server logs (and extended logs if possible) from the moment the error occurs.
A short video showing the reproduction steps (loading version history → switching versions → error appearing).
Confirmation that you implemented version history exactly as described in the official docs: Document history | ONLYOFFICE
If this is time-critical for your project, I’d also recommend considering a paid license with dedicated professional support — they can dive into your specific integration much faster: