Typed API failures.
The variants exist so the shell can map them to distinct exit codes and to actionable messages; a single opaque “request failed” would make both impossible.