これは、discourse connect overrides avatar というサイト設定が原因だと思われます。
DiscourseConnect のペイロードの値でユーザーのアバターを上書きします。有効にすると、ユーザーは Discourse でアバターをアップロードできなくなります。
ローカル環境でこの設定をオフにした場合、API経由でアバターを更新すると 200 HTTP レスポンスが返ってきます。
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
