content_hash is SHA-256 over the exact bytes received; event_hash is SHA-256 over a documented header that binds event identity, sequence, time, content hash and the previous event. Together they make every correspondence independently recomputable.
The content hash is SHA-256 over the exact bytes IBQMI received; the event hash is SHA-256 over a documented header string that binds the event identifier, type, sequence, time, content hash and the previous event hash. Together with the chain rule they make every correspondence independently recomputable.
Evidence must be verifiable by the correspondent from what it sent, not from what IBQMI stored. Hashing the exact request bytes, rather than a parsed representation, is what makes that possible.
For inbound events the content hash covers the raw request body. For IBQMI responses it covers the UTF-8 text of the response. Internal events hash defined strings: a retrieval event hashes the retrieved event identifiers joined by a single newline; a redaction event hashes its stored text. The event hash is SHA-256 over the header "ibqmi-mcr-event-v1", the event identifier, the event type, the sequence, the timestamp in RFC 3339 UTC with microseconds, the content hash and the previous event hash, each followed by a newline. The previous hash of an event equals the event hash of its predecessor; it is null for the first event.
A server-generated hash is evidence about stored content. It is not an authentication mechanism and says nothing about who sent the content. Hashes remain valid after a redaction: the content disappears, the hash stays.