NEOLearn

CatalogService

Games: creating, publishing versions, discovery, ratings, content uploads and testers.

Updated October 17, 2026

On this page

Games (experiences), places, versions and discovery. Every method is a POST with a JSON body; see the overview for the protocol, authentication and errors.

Summary#

MethodAuthDescription
CreateExperienceAccount
UpdateExperienceAccount
PublishVersionAccountPublishes a new, immutable version of the start place; it goes live at once.
ListVersionsAccountThe start place's versions, newest first, and which one is live (the creator only).
SetLiveVersionAccountMakes an existing version of the start place the live one: a rollback to an older version or a roll-forward to a newer one (the creator only). Players who join from then on get it; sessions already running keep the version they started with.
GetExperienceOptional
ListExperiencesOptional
ListMyExperiencesAccount
FavoriteAccount or guest
VoteAccountThumbs up or down; vote 1, -1, or 0 to clear.
UploadContentAccountUploads one content blob (a scene, a texture, a thumbnail) to the content store; returns its content-addressed URL for PublishVersion / UpdateExperience. Up to 8 MiB per blob.
AddTesterAccountBeta testers: private experiences are visible and joinable by their testers (ListExperiences sort "testing" lists the ones the caller tests).
RemoveTesterAccount
ListTestersAccount

Methods#

CreateExperience#

HTTP
POST /neo.platform.v1.CatalogService/CreateExperience
Content-Type: application/json

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

Request: CreateExperienceRequest. Response: Experience.

UpdateExperience#

HTTP
POST /neo.platform.v1.CatalogService/UpdateExperience
Content-Type: application/json

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

Request: UpdateExperienceRequest. Response: Experience.

PublishVersion#

Publishes a new, immutable version of the start place; it goes live at once.

HTTP
POST /neo.platform.v1.CatalogService/PublishVersion
Content-Type: application/json

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

Request: PublishVersionRequest. Response: PlaceVersion.

ListVersions#

The start place's versions, newest first, and which one is live (the creator only).

HTTP
POST /neo.platform.v1.CatalogService/ListVersions
Content-Type: application/json

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

Request: ListVersionsRequest. Response: ListVersionsResponse.

SetLiveVersion#

Makes an existing version of the start place the live one: a rollback to an older version or a roll-forward to a newer one (the creator only). Players who join from then on get it; sessions already running keep the version they started with.

HTTP
POST /neo.platform.v1.CatalogService/SetLiveVersion
Content-Type: application/json

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

Request: SetLiveVersionRequest. Response: Experience.

GetExperience#

HTTP
POST /neo.platform.v1.CatalogService/GetExperience
Content-Type: application/json

Auth: Optional. Signed-in callers get personalised fields. Also callable with a scoped token: studio.

Request: ExperienceRef. Response: Experience.

ListExperiences#

HTTP
POST /neo.platform.v1.CatalogService/ListExperiences
Content-Type: application/json

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

Request: ListExperiencesRequest. Response: ListExperiencesResponse.

ListMyExperiences#

HTTP
POST /neo.platform.v1.CatalogService/ListMyExperiences
Content-Type: application/json

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

Request: ListMyExperiencesRequest. Response: ListExperiencesResponse.

Favorite#

HTTP
POST /neo.platform.v1.CatalogService/Favorite
Content-Type: application/json

Auth: A signed-in account or a guest.

Request: FavoriteRequest. Response: FavoriteResponse.

Vote#

Thumbs up or down; vote 1, -1, or 0 to clear.

HTTP
POST /neo.platform.v1.CatalogService/Vote
Content-Type: application/json

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

Request: VoteRequest. Response: VoteResponse.

UploadContent#

Uploads one content blob (a scene, a texture, a thumbnail) to the content store; returns its content-addressed URL for PublishVersion / UpdateExperience. Up to 8 MiB per blob.

HTTP
POST /neo.platform.v1.CatalogService/UploadContent
Content-Type: application/json

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

Request: UploadContentRequest. Response: UploadContentResponse.

AddTester#

Beta testers: private experiences are visible and joinable by their testers (ListExperiences sort "testing" lists the ones the caller tests).

HTTP
POST /neo.platform.v1.CatalogService/AddTester
Content-Type: application/json

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

Request: TesterRequest. Response: ListTestersResponse.

RemoveTester#

HTTP
POST /neo.platform.v1.CatalogService/RemoveTester
Content-Type: application/json

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

Request: TesterRequest. Response: ListTestersResponse.

ListTesters#

HTTP
POST /neo.platform.v1.CatalogService/ListTesters
Content-Type: application/json

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

Request: ExperienceRef. Response: ListTestersResponse.

Types#

CreateExperienceRequest#

FieldTypeDescription
titlestring
descriptionstring
genrestring
hostingTierstring
maxPlayersnumber

Experience#

FieldTypeDescription
idstring
titlestring
descriptionstring
creatorUserSummary
genrestring
thumbnailUrlstring
visibilitystringdraft, public, private
playingNowstring (int64)
visitsstring (int64)
favoritesstring (int64)
createdAtstring
updatedAtstring
liveVersionPlaceVersionThe live version of the start place, if published.
startPlaceIdstring
hostingTierstringHosting tier of the start place: solo, peer, edge or dedicated.
maxPlayersnumber
favoritedboolean
upVotesstring (int64)
downVotesstring (int64)
myVotenumberThe caller's vote: 1, -1 or 0.

ExperienceRef#

FieldTypeDescription
experienceIdstring

FavoriteRequest#

FieldTypeDescription
experienceIdstring
favoriteboolean

FavoriteResponse#

FieldTypeDescription
favoritedboolean
favoritesstring (int64)

ListExperiencesRequest#

FieldTypeDescription
sortstringpopular, new, top_rated (by thumbs up), friends, search, recent (the caller's recently played), up_and_coming (new games gaining players), trending (most joins in the last day)
querystring
genrestring
limitnumber
creatorIdstringOnly this creator's public experiences (all of them when it's the caller).

ListExperiencesResponse#

FieldTypeDescription
experiencesarray of Experience

ListMyExperiencesRequest#

No fields: send {}.

ListTestersResponse#

FieldTypeDescription
testersarray of UserSummary

ListVersionsRequest#

FieldTypeDescription
experienceIdstring
limitnumberUp to this many (default 50, at most 200).
beforeNumberstring (int64)Only versions numbered below this one (paging: the last number of the previous page).

ListVersionsResponse#

FieldTypeDescription
versionsarray of PlaceVersion
liveVersionIdstringThe live version's id (empty before the first publish).

PlaceVersion#

FieldTypeDescription
idstring
placeIdstring
numberstring (int64)
contentUrlsobject (map of string to string)Content manifest URL per cook target, for example web, desktop, mobile_high or mobile_low.
engineMinobject (map of string to string)Minimum engine version per platform.
statusstringpending, live (passed its checks: it may be the live version), rejected. Which version players get is the experience's live_version (SetLiveVersion changes it).
createdAtstring
notesstring

PublishVersionRequest#

FieldTypeDescription
experienceIdstring
contentUrlsobject (map of string to string)
engineMinobject (map of string to string)
notesstring
budgetReportJsonstringBudget report from the Studio: JSON, checked again in the cloud.

SetLiveVersionRequest#

FieldTypeDescription
experienceIdstring
versionIdstring

TesterRequest#

FieldTypeDescription
experienceIdstring
userIdstringEither the user id or the username.
usernamestring

UpdateExperienceRequest#

FieldTypeDescription
experienceIdstring
titlestring
descriptionstring
visibilitystring
thumbnailUrlstring

UploadContentRequest#

FieldTypeDescription
datastring (base64)
contentTypestring
namestringA hint for logs only; the URL is the content's hash.

UploadContentResponse#

FieldTypeDescription
urlstring
sha256string
sizestring (int64)

VoteRequest#

FieldTypeDescription
experienceIdstring
votenumber

VoteResponse#

FieldTypeDescription
upVotesstring (int64)
downVotesstring (int64)
myVotenumber

See also#