A reader who asked for a session and got nothing needs to know which of these happened — a mistyped id reads very differently from an archive that cannot be opened. Each case carries the words to show and the HTTP status a host answers with; the status is a plain number, so describing it costs the contract no server dependency.
Carries nothing on purpose. Why a read failed is the host's own business — a path it could not open, a device that went away — and none of that is the asker's to know. A host that wants the detail logs it where it has the effects to do so.