NEOLearn

SessionService

Joining games: sessions, heartbeats, presence in a session and invites.

Updated October 17, 2026

On this page

Joining games. Every method is a POST with a JSON body; see the overview for the protocol, authentication and errors.

Summary#

MethodAuthDescription
JoinAccount or guest
LeaveAccount or guest
HeartbeatAccount or guest
ListSessionsOptional
GetSessionAccount or guestThe live roster of one session. Changes also arrive over realtime as {"type":"session_members","sessionId","members":[...]} to everyone in the session.
InviteToSessionAccountInvites a friend into the caller's session: they get a realtime {"type":"game_invite","from","experienceId","sessionId","title"} and may join it directly.

Methods#

Join#

HTTP
POST /neo.platform.v1.SessionService/Join
Content-Type: application/json

Auth: A signed-in account or a guest.

Request: JoinRequest. Response: JoinResponse.

Leave#

HTTP
POST /neo.platform.v1.SessionService/Leave
Content-Type: application/json

Auth: A signed-in account or a guest.

Request: LeaveRequest. Response: LeaveResponse.

Heartbeat#

HTTP
POST /neo.platform.v1.SessionService/Heartbeat
Content-Type: application/json

Auth: A signed-in account or a guest.

Request: HeartbeatRequest. Response: HeartbeatResponse.

ListSessions#

HTTP
POST /neo.platform.v1.SessionService/ListSessions
Content-Type: application/json

Auth: Optional. Signed-in callers get personalised fields.

Request: ListSessionsRequest. Response: ListSessionsResponse.

GetSession#

The live roster of one session. Changes also arrive over realtime as {"type":"session_members","sessionId","members":[...]} to everyone in the session.

HTTP
POST /neo.platform.v1.SessionService/GetSession
Content-Type: application/json

Auth: A signed-in account or a guest.

Request: GetSessionRequest. Response: SessionDetail.

InviteToSession#

Invites a friend into the caller's session: they get a realtime {"type":"game_invite","from","experienceId","sessionId","title"} and may join it directly.

HTTP
POST /neo.platform.v1.SessionService/InviteToSession
Content-Type: application/json

Auth: A signed-in account. Guests are refused.

Request: InviteToSessionRequest. Response: InviteToSessionResponse.

Types#

GetSessionRequest#

FieldTypeDescription
sessionIdstring

HeartbeatRequest#

FieldTypeDescription
sessionIdstring

HeartbeatResponse#

FieldTypeDescription
memberCountstring (int64)

InviteToSessionRequest#

FieldTypeDescription
sessionIdstring
userIdstring

InviteToSessionResponse#

No fields: send {}.

JoinRequest#

FieldTypeDescription
experienceIdstring
sessionIdstringJoin a specific session (a friend's); empty = matchmake.
platformstringPlatform of the client, for example web, macos, windows, linux, ios or android.
engineVersionstring

JoinResponse#

FieldTypeDescription
sessionIdstring
gameTokenstringEd25519 JWT scoped to this session.
hostingTierstringsolo, peer, edge, dedicated
hostUserIdstringFor peer sessions: the host's user id (the caller when it is the host).
connectUrlstringSignalling / server address, depending on the tier.
contentUrlstringContent manifest for the caller's cook target.
placeVersionIdstring
membersarray of UserSummary

LeaveRequest#

FieldTypeDescription
sessionIdstring

LeaveResponse#

No fields: send {}.

ListSessionsRequest#

FieldTypeDescription
experienceIdstring

ListSessionsResponse#

FieldTypeDescription
sessionsarray of SessionInfo

SessionDetail#

FieldTypeDescription
idstring
experienceIdstring
hostingTierstring
maxPlayersnumber
membersarray of SessionMember

SessionInfo#

FieldTypeDescription
idstring
memberCountstring (int64)
maxPlayersnumber
friendsarray of UserSummary

SessionMember#

FieldTypeDescription
userUserSummary
joinedAtstring
isHostboolean
isFriendboolean
guestboolean

See also#