ba6bcd19f4
A tenant URL that is not the API host answers 200 with the console's HTML shell, and the client turned that into "Expecting value: line 1 column 1 (char 0)" — a JSON parse error that names neither the URL nor the response. The shared client now reports the status, content type and first bytes of any non-JSON reply, and points at the API host the operator was meant to copy. Around it, the URL is reduced to scheme + host so a pasted /public_api/v1 or console path cannot double the API root, a missing key or key ID is refused before the request, and 401/403 recalls the three usual causes (auth mode, revoked key, clock skew). Nonce and timestamp now ride along in standard mode too, matching the reference client, and test_connection probes get_incidents — the read that ingestion actually depends on — instead of the distribution versions.