Запрос к API с использованием Python urllib

Думаю, тут проблема в том, что ты переводишь в urlencoded весь json {“auth_user”: user, “auth_pwd”: password, “json_data”: {…}}, а надо переводить только значение json_data. В твоем случае тело получается:

%7B%22auth_user%22%3A%22admin%22%2C%22auth_pwd%22%3A%22password%22%2C%22json_data%22%3A%7B%22param%22%3A%22val%22%7D%7D

А должно быть:

auth_user=admin&auth_pwd=password&json_data=%7B%22param%22%3A%22val%22%7D