В том виде как описали вы, хэширование не имеет смысла. Но как правило всегда используется 2 идентификатора, скажем тот же api key (открытый ключ) и секретный ключ (secret key). Назваие может меняться, например ID + token или client_id + client_secret
В запросе передаётся только api key, параметры например usrid и сигнатура (хэш). Причём для формирования хэша используется именно секретный ключ, который известен только отправителю и получателю.
Это позволяет предотвратить подмену запросов, так как принимающая сторона может сверить хэш, и в случае чего понять что данные запроса были изменены.
Такой подход часто используется при интеграции с платёжными системами, где после успешного совершения платежа, платёжная система посылает запрос (postback, webhook) на сайт магазина, уведомляя что такой-то платёж успешно завершён.
Например такое уведомление включает в себя параметры order_id, sum, status. Если злоумышленник узнает url на сайте, куда нужно передать параметры, то сможет подделать уведомление от платёжной системы. Тут и вступает в игру механизм для подсчёта контрольной суммы, например md5(order_id, sum, secret_key)
, и так как secret_key неизвестен злоумышленнику, то подделать такой запрос не удастся.