The API documentation states that the API always returns a compressed response:
...we guarantee that all responses are compressed, either with GZIP or DEFLATE.
GZIP is the default.
This means that you must send the results from wget to gunzip. Like so:
wget -O- <URL> | gunzip > results.json
Or, in your specific example:
wget -O- "http://api....
You're treating the response as a UTF-8 encoded string. That's bound to fail with binary data like GZip. A quick fix is to use Encoding.GetEncoding("iso-8859-1") instead of UTF8 in StringToByteArray, and also pass this encoding to the StreamReader constructor in FetchURL.
That encoding maps bytes to codepoints one-to-one; see this answer on Stack Overflow.