Strongly-typed view of the API’s stable error-code taxonomy
(internal/server/errors.go on the backend). Use this instead
of substring-matching ApiError::message — the message text is
human-readable and may change between releases; the code is
part of the wire contract and never gets repurposed.