Поле reason, появившееся 17 октября, теперь есть на каждой поверхности, принимающей ключ аккаунта. Маршруты участника (правила оповещений, списки наблюдения, адреса Hyperliquid), /api/v1/usage, /api/v1/me/watchlist и рукопожатие stream отвечают на заголовок ключа, который есть, но не несёт пригодный ключ, статусом 401 с теми же значениями reason (empty_authorization, empty_x_api_key, malformed_authorization, malformed_x_api_key, non_bearer_scheme), а заголовок Bearer со значением, которое не является ключом, больше не считается неизвестным ключом. Размещённый MCP называет то, что увидел, вместо «ничего не прислано»: пустой или неверно сформированный заголовок учётных данных либо предоплаченный ключ bk_live, который платит за вызов и не открывает MCP. На /api/x402/ условия оплаты 402 для вызова без заголовка ключа не изменились; если заголовок ключа был, но непригоден, тело 402 дополнительно несёт credential_reason и credential_hint (например, предоплаченный ключ в Authorization вместо x-api-key), а неверно сформированное значение ключа получает 401 key_required с reason. Запрос вовсе без заголовка ключа получает на каждом маршруте тот же статус, что и раньше (на /api/x402/ те же условия оплаты); новые поля только дополняют ответ. Проверка 19 октября уточнила граничные случаи: рукопожатие stream читает билет только когда учётных данных нет вовсе (заголовок с непригодным значением отклоняется с его reason), маршрут баланса предоплаты читает x-api-key так же, как платные маршруты, размещённый MCP называет OAuth-токен неверной формы токеном, который нужно выдать заново, openapi.json описывает 401 на каждом маршруте с ключом, а таблицы ошибок stream и x402 на странице разработчиков содержат новые поля.