Я думаю, это связано с настройкой сайта «discourse connect overrides avatar».
Переопределяет аватар пользователя значением из полезной нагрузки DiscourseConnect. Если эта опция включена, пользователям не будет разрешено загружать аватары в Discourse.
На моей локальной машине, когда эта настройка снята, я получаю HTTP-ответ 200 при обновлении аватара через API:
curl -i -sS -X PUT "http://localhost:4200/u/10614bb2d4eacd328c45/preferences/avatar/pick.json" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: 6cea489d21282803c446fd2e9d236901c3d186f36079911833db4b57c43c01d5" \
-H "Api-Username: blake.erickson" \
-F "upload_id=57" \
-F "type=uploaded"
HTTP/1.1 200 OK
А когда эта настройка включена, я получаю ответ 422:
curl -i -sS -X PUT "http://localhost:4200/u/021ca796a01ad178bc52/preferences/avatar/pick.json" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: 6cea489d21282803c446fd2e9d236901c3d186f36079911833db4b57c43c01d5" \
-H "Api-Username: blake.erickson" \
-F "upload_id=57" \
-F "type=uploaded"
HTTP/1.1 422 Unprocessable Entity
