Eu acho que isso se deve à configuração do site discourse connect overrides avatar.
Substitui o avatar do usuário pelo valor da carga útil do DiscourseConnect. Se ativado, os usuários não poderão fazer upload de avatares no Discourse.
Na minha máquina local, com essa opção desmarcada, recebo uma resposta http 200 ao atualizar o avatar pela 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
E recebo um 422 com essa configuração marcada:
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
