NEOLearn

AvatarService

Reading and saving the player's avatar.

Updated October 17, 2026

On this page

The platform avatar. Every method is a POST with a JSON body; see the overview for the protocol, authentication and errors.

Summary#

MethodAuthDescription
GetAvatarAccount or guest
SetAvatarAccount

Methods#

GetAvatar#

HTTP
POST /neo.platform.v1.AvatarService/GetAvatar
Content-Type: application/json

Auth: A signed-in account or a guest. Also callable with a scoped token: avatar.

Request: GetAvatarRequest. Response: Avatar.

SetAvatar#

HTTP
POST /neo.platform.v1.AvatarService/SetAvatar
Content-Type: application/json

Auth: A signed-in account. Guests are refused. Also callable with a scoped token: avatar.

Request: SetAvatarRequest. Response: Avatar.

Types#

Avatar#

FieldTypeDescription
userIdstring
specVersionnumber
bodystring
tintsobject (map of string to string)Per-part tints, "#rrggbb".
wornItemIdsarray of stringWorn item ids, in layer order.
emotesobject (map of number to string)Emote item ids by slot 1-8.
updatedAtstring
basestringThe 3D base body, for example "mannequin".
proportionsProportions

GetAvatarRequest#

FieldTypeDescription
userIdstring

Proportions#

Body proportions as factors on the base body (1.0 = the base). The ranges keep animations planted and collision-free on every body: height 0.8-1.2, head 0.8-1.3, torso/arms/legs 0.85-1.15, shoulders 0.8-1.25, hips 0.85-1.2. 0 (unset) means 1.0.

FieldTypeDescription
heightnumber
headnumber
torsonumber
armsnumber
legsnumber
shouldersnumber
hipsnumber

SetAvatarRequest#

FieldTypeDescription
bodystring
tintsobject (map of string to string)
wornItemIdsarray of string
emotesobject (map of number to string)
basestringEmpty keeps the current base; an absent proportions message keeps the current proportions, so the 2D web editor and the 3D editor can't clobber each other's fields.
proportionsProportions

See also#