Creo que esto se debe a la configuración del sitio discourse connect overrides avatar.
Anula el avatar del usuario con el valor de la carga útil de DiscourseConnect. Si está habilitado, no se permitirá a los usuarios subir avatares en Discourse.
En mi entorno local, con esa opción desmarcada, obtengo una respuesta http 200 al actualizar el avatar a través de la 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
Y obtengo un 422 con esa configuración 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
