Skip to content
On this page

Asset bundle API

Asset API works with different versions of asset bundles. It recognises version from "assetVersion" parameter or "X-Asset-Version" header.

Currently API works with next asset versions:

1.0 - used by old client versions, deprecated

2.0 - used by client version 1.1.5+ and publisher version 2.0.0+

3.0 - reserved for Unity 2017.3

4.0 - reserved for Unity 2018.3 and higher

5.0 - version with skin support

6.0 - version with URP support

Commands that fetch assets also recognise "compatibleAssetVersions" parameter or "X-Compatible-Asset-Versions" header to fetch compatible asset version in case if main "assetVersion" not found.

EndpointMethodDescription
/api/v0/asset/listManagedNetworkswebRequestList asset managed networks
/api/v0/asset/prop/createwebRequestCreate prop asset
/api/v0/asset/style/createwebRequestCreate style asset
/api/v0/asset/environment/createwebRequestCreate environment asset
/api/v0/asset/prop/updatewebRequestUpdate prop asset
/api/v0/asset/style/updatewebRequestUpdate style asset
/api/v0/asset/environment/updatewebRequestUpdate environment asset
/api/v0/asset/updateStatuswebRequestUpdate asset status
/api/v0/asset/updateOwnershipwebRequestUpdate asset ownership
/api/v0/asset/prop/listwebRequestList prop assets
/api/v0/asset/style/listwebRequestList style assets
/api/v0/asset/environment/listwebRequestList environment assets
/api/v0/asset/prop/listOwnwebRequestList user own prop assets
/api/v0/asset/style/listOwnwebRequestList user own style assets
/api/v0/asset/environment/listOwnwebRequestList user own environment assets
/api/v0/asset/listPatchVersionswebRequestList patch versions for asset resources and their creation date.
/api/v0/asset/restorePatchVersionwebRequestRestore asset resources from the patch.
/api/v0/asset/setOriginalwebRequestSet asset original resource
/api/v0/asset/removewebRequestRemove asset
/api/v0/asset/metadata/{id}webRequestGet prop asset metadata
/api/v0/asset/{assetId}/platform/{platform}webRequestGet asset resource data
/{assetId}/platform/{platform}/patch/{patchVersion}webRequestGet asset resource data per patch version
/api/v0/asset/{assetId}webRequestGet asset resource data for default platform
/api/v0/asset/thumbnail/{id}webRequestGet asset thumbnail data
/api/v0/asset/original/{id}webRequestGet asset original data
/api/v0/asset/url/{assetId}/platform/{platform}webRequestGet asset resource url
/api/v0/asset/url/{assetId}/platform/{platform}/patch/{patchVersion}webRequestGet asset resource url per patch version
/api/v0/asset/url/{assetId}webRequestGet asset resource url for default platform
/api/v0/asset/thumbnail/url/{id}webRequestGet asset thumbnail url
/api/v0/asset/original/url/{id}webRequestGet asset original url
/api/v0/asset/listSkinPatchVersionswebRequestList patch versions for asset resources and their creation date.
/api/v0/asset/restoreSkinPatchVersionwebRequestRestore asset resources from the patch.
/api/v0/asset/upload/linkwebRequestDirect asset upload to Google bucket (get upload link)
/api/v0/asset/upload/link/completewebRequestDirect asset upload to Google bucket (complete upload link)
/api/v0/asset/upload/thumbnail/linkwebRequestDirect asset thumbnail upload to Google bucket (get upload link)
/api/v0/asset/upload/thumbnail/link/completewebRequestDirect asset thumbnail upload to Google bucket (complete upload link)
asset:updateAssetParamswebsocketUpdate asset params
asset:getPropAssetwebsocketGet prop asset
asset:getStyleAssetwebsocketGet style asset
asset:getEnvironmentAssetwebsocketGet environment asset
asset:searchPropwebsocketSearch prop assets
asset:searchStylewebsocketSearch style assets
asset:searchEnvironmentwebsocketSearch environment assets
asset:listPropswebsocketList prop assets (websocket)
asset:listStyleswebsocketList style assets (websocket)
asset:listEnvironmentswebsocketList environment assets (websocket)

List asset managed networks

HTTP Method: POST

Path: /api/v0/asset/listManagedNetworks

Description: Api returns list of networks where user have permissions to manage assets.

Request:

{ empty }

Response:

{
    "networks": [{
        "id": string
        "fullName": string
    }]
}

Create prop asset

HTTP Method: POST

Path: /api/v0/asset/prop/create

Request:

{
    "data": { asset bundle prop structure }
}

Response:

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "placing": string
    "invokeType": string
    "minScale": float
    "maxScale": float
    "canStack": bool
    "pedestalInZoomView": bool
    "alternativeZoom": bool
    "size": { xyz structure }
    "contentType": [ string ]  // supported content types for asset template
    "assetBundleMeta": {
        "logoCount": int  // show amount of logos in content management system
        "thumbnailCount": int  // show amount of thumbnails in content management system
    }
}

Create style asset

HTTP Method: POST

Path: /api/v0/asset/style/create

Request:

{
    "data": { asset bundle style structure }
}

Response:

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "styleType": string  // Default/NoMirror
    "doorsType": string  // Glass/None
    "homePosition": { xyz structure }  // home position for camera
}

Create environment asset

HTTP Method: POST

Path: /api/v0/asset/environment/create

Request:

{
    "data": { asset bundle environment structure }
}

Response:

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
}

Update prop asset

HTTP Method: POST

Path: /api/v0/asset/prop/update

Request:

{
    "asset": string
    "data": { asset bundle prop structure }
}

Response:

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "placing": string
    "invokeType": string
    "minScale": float
    "maxScale": float
    "canStack": bool
    "pedestalInZoomView": bool
    "alternativeZoom": bool
    "size": { xyz structure }
    "contentType": [ string ]  // supported content types for asset template
    "assetBundleMeta": {
        "logoCount": int  // show amount of logos in content management system
        "thumbnailCount": int  // show amount of thumbnails in content management system
    }
}

Update style asset

HTTP Method: POST

Path: /api/v0/asset/style/update

Request:

{
    "asset": string
    "data": { asset bundle style structure }
}

Response:

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "styleType": string  // Default/NoMirror
    "doorsType": string  // Glass/None
    "homePosition": { xyz structure }  // home position for camera
}

Update environment asset

HTTP Method: POST

Path: /api/v0/asset/environment/update

Request:

{
    "asset": string
    "data": { asset bundle environment structure }
}

Response:

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
}

Update asset status

HTTP Method: POST

Path: /api/v0/asset/updateStatus

Request:

{
    "assetId": string
    "status": string
}

Response:

{ empty }

Update asset ownership

HTTP Method: POST

Path: /api/v0/asset/updateOwnership

Request:

{
    "assetId": string
    "networkId": string
}

Response:

{ empty }

List prop assets

HTTP Method: POST

Path: /api/v0/asset/prop/list

Request:

{
    "offset": int
    "size": int
    "forNetwork": string
    "id": string
    "title": string
    "tags": [ string ]
    "placing": string
    "contentType": [ string ]
}

Response:

[{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "placing": string
    "invokeType": string
    "minScale": float
    "maxScale": float
    "canStack": bool
    "pedestalInZoomView": bool
    "alternativeZoom": bool
    "size": { xyz structure }
    "contentType": [ string ]  // supported content types for asset template
    "assetBundleMeta": {
        "logoCount": int  // show amount of logos in content management system
        "thumbnailCount": int  // show amount of thumbnails in content management system
    }
}]

List style assets

HTTP Method: POST

Path: /api/v0/asset/style/list

Request:

{
    "offset": int
    "size": int
    "forNetwork": string
    "id": string
    "title": string
    "tags": [ string ]
}

Response:

[{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "styleType": string  // Default/NoMirror
    "doorsType": string  // Glass/None
    "homePosition": { xyz structure }  // home position for camera
}]

List environment assets

HTTP Method: POST

Path: /api/v0/asset/environment/list

Request:

{
    "offset": int
    "size": int
    "forNetwork": string
    "id": string
    "title": string
    "tags": [ string ]
}

Response:

[{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
}]

List user own prop assets

HTTP Method: POST

Path: /api/v0/asset/prop/listOwn

Request:

{
    "offset": int
    "size": int
    "forNetwork": string
    "id": string
    "title": string
    "tags": [ string ]
    "placing": string
    "contentType": [ string ]
}

Response:

[{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "placing": string
    "invokeType": string
    "minScale": float
    "maxScale": float
    "canStack": bool
    "pedestalInZoomView": bool
    "alternativeZoom": bool
    "size": { xyz structure }
    "contentType": [ string ]  // supported content types for asset template
    "assetBundleMeta": {
        "logoCount": int  // show amount of logos in content management system
        "thumbnailCount": int  // show amount of thumbnails in content management system
    }
}]

List user own style assets

HTTP Method: POST

Path: /api/v0/asset/style/listOwn

Request:

{
    "offset": int
    "size": int
    "forNetwork": string
    "id": string
    "title": string
    "tags": [ string ]
}

Response:

[{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "styleType": string  // Default/NoMirror
    "doorsType": string  // Glass/None
    "homePosition": { xyz structure }  // home position for camera
}]

List user own environment assets

HTTP Method: POST

Path: /api/v0/asset/environment/listOwn

Request:

{
    "offset": int
    "size": int
    "forNetwork": string
    "id": string
    "title": string
    "tags": [ string ]
}

Response:

[{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
}]

List patch versions for asset resources and their creation date.

HTTP Method: POST

Path: /api/v0/asset/listPatchVersions

Request:

{
    "assetId": string
}

Response:

[{
    "patchVersion": int
    "created": timestamp
}]

Restore asset resources from the patch.

HTTP Method: POST

Path: /api/v0/asset/restorePatchVersion

Request:

{
    "assetId": string
    "patchVersion": int
}

Response:

{ empty }

Set asset original resource

HTTP Method: POST

Path: /api/v0/asset/setOriginal

Description: API sets resource of original textures for asset.

Request:

{
    "assetId": string
    "resourceId": string
}

Response:

{ empty }

Remove asset

HTTP Method: POST

Path: /api/v0/asset/remove

Request:

{
    "asset": string
}

Response:

{ empty }

Get prop asset metadata

HTTP Method: POST

Path: /api/v0/asset/metadata/

Request:

{ empty }

Response:

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "placing": string
    "invokeType": string
    "minScale": float
    "maxScale": float
    "canStack": bool
    "pedestalInZoomView": bool
    "alternativeZoom": bool
    "size": { xyz structure }
    "contentType": [ string ]  // supported content types for asset template
    "assetBundleMeta": {
        "logoCount": int  // show amount of logos in content management system
        "thumbnailCount": int  // show amount of thumbnails in content management system
    }
}

Get asset resource data

HTTP Method: GET

Path: /api/v0/asset/{assetId}/platform/

Request:

{ empty }

Response:

{ empty }

Get asset resource data per patch version

HTTP Method: GET

Path: /{assetId}/platform/{platform}/patch/

Request:

{ empty }

Response:

{ empty }

Get asset resource data for default platform

HTTP Method: GET

Path: /api/v0/asset/

Request:

{ empty }

Response:

{ empty }

Get asset thumbnail data

HTTP Method: GET

Path: /api/v0/asset/thumbnail/

Request:

{ empty }

Response:

{ empty }

Get asset original data

HTTP Method: GET

Path: /api/v0/asset/original/

Request:

{ empty }

Response:

{ empty }

Get asset resource url

HTTP Method: GET

Path: /api/v0/asset/url/{assetId}/platform/

Request:

{ empty }

Response:

{ empty }

Get asset resource url per patch version

HTTP Method: GET

Path: /api/v0/asset/url/{assetId}/platform/{platform}/patch/

Request:

{ empty }

Response:

{ empty }

Get asset resource url for default platform

HTTP Method: GET

Path: /api/v0/asset/url/

Request:

{ empty }

Response:

{ empty }

Get asset thumbnail url

HTTP Method: GET

Path: /api/v0/asset/thumbnail/url/

Request:

{ empty }

Response:

{ empty }

Get asset original url

HTTP Method: GET

Path: /api/v0/asset/original/url/

Request:

{ empty }

Response:

{ empty }

List patch versions for asset resources and their creation date.

HTTP Method: POST

Path: /api/v0/asset/listSkinPatchVersions

Request:

{
    "assetId": string
    "skinId": string
}

Response:

[{
    "patchVersion": int
    "created": timestamp
}]

Restore asset resources from the patch.

HTTP Method: POST

Path: /api/v0/asset/restoreSkinPatchVersion

Request:

{
    "assetId": string
    "skinId": string
    "patchVersion": int
}

Response:

{ empty }

HTTP Method: POST

Path: /api/v0/asset/upload/link

Description: Direct upload gives possibility to upload files directly from a client to a storage bucket. It consist of next steps:

  1. Client asks the server for upload link. The server initializes an upload session and returns a link which could be used for upload.

  2. Client uploads a file to Google bucket.

  3. Client sends upload complete acknowledgment to the server.

Request:

{
    "asset": string
    "platform": string
    "fileName": string
    "contentType": string
}

Response:

Google bucket upload link

HTTP Method: POST

Path: /api/v0/asset/upload/link/complete

Description: See direct upload to Google bucket.

Request:

{
    "asset": string
    "platform": string
    "fileName": string
    "contentType": string
}

Response:

{ empty }

HTTP Method: POST

Path: /api/v0/asset/upload/thumbnail/link

Description: The process is the same as direct upload to Google bucket. Complete with thumbnail uploaded acknowledgment.

Request:

{
    "asset": string
    "platform": string
    "fileName": string
    "contentType": string
}

Response:

Google bucket upload link

HTTP Method: POST

Path: /api/v0/asset/upload/thumbnail/link/complete

Description: See direct thumbnail upload to Google bucket.

Request:

{
    "asset": string
    "platform": string
    "fileName": string
    "contentType": string
}

Response:

{ empty }

Update asset params

Method: websocket

Endpoint: asset:updateAssetParams

Request:

{
    "data": {
        "assetId": string
        "params": map[string]{ custom structure }
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "error": { "status": bool, "code": int, "message": string }
}

Get prop asset

Method: websocket

Endpoint: asset:getPropAsset

Request:

{
    "data": {
        "assetId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "asset": { asset bundle prop structure }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get style asset

Method: websocket

Endpoint: asset:getStyleAsset

Request:

{
    "data": {
        "assetId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "asset": { asset bundle style structure }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Get environment asset

Method: websocket

Endpoint: asset:getEnvironmentAsset

Request:

{
    "data": {
        "assetId": string
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "asset": { asset bundle environment structure }
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search prop assets

Method: websocket

Endpoint: asset:searchProp

Request:

{
    "data": {
        "offset": int
        "size": int
        "onlyAssetsOfCurrentUser": bool
        "forNetwork": string
        "title": string
        "tags": [ string ]
        "placing": string
        "contentType": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "assets": [{ asset bundle prop structure }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search style assets

Method: websocket

Endpoint: asset:searchStyle

Request:

{
    "data": {
        "offset": int
        "size": int
        "onlyAssetsOfCurrentUser": bool
        "forNetwork": string
        "title": string
        "tags": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "assets": [{ asset bundle style structure }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Search environment assets

Method: websocket

Endpoint: asset:searchEnvironment

Request:

{
    "data": {
        "offset": int
        "size": int
        "onlyAssetsOfCurrentUser": bool
        "forNetwork": string
        "title": string
        "tags": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "assets": [{ asset bundle environment structure }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

List prop assets (websocket)

Method: websocket

Endpoint: asset:listProps

Request:

{
    "data": {
        "placing": string
        "contentType": [ string ]
        "offset": int
        "size": int
        "onlyAssetsOfCurrentUser": bool
        "forNetwork": string
        "id": string
        "title": string
        "tags": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "assets": [{ asset bundle prop structure }]
        "propSkins": [{ asset bundle skin structure }]  // default (or displayed) skins for assets
    }
    "error": { "status": bool, "code": int, "message": string }
}

List style assets (websocket)

Method: websocket

Endpoint: asset:listStyles

Request:

{
    "data": {
        "offset": int
        "size": int
        "onlyAssetsOfCurrentUser": bool
        "forNetwork": string
        "id": string
        "title": string
        "tags": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "assets": [{ asset bundle style structure }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

List environment assets (websocket)

Method: websocket

Endpoint: asset:listEnvironments

Request:

{
    "data": {
        "offset": int
        "size": int
        "onlyAssetsOfCurrentUser": bool
        "forNetwork": string
        "id": string
        "title": string
        "tags": [ string ]
    }
    "event": { "id": string, "date": timestamp }
}

Response:

{
    "data": {
        "assets": [{ asset bundle environment structure }]
    }
    "error": { "status": bool, "code": int, "message": string }
}

Models


Asset Bundle Prop

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "placing": string
    "invokeType": string
    "minScale": float
    "maxScale": float
    "canStack": bool
    "pedestalInZoomView": bool
    "alternativeZoom": bool
    "size": { xyz structure }
    "contentType": [ string ]  // supported content types for asset template
    "assetBundleMeta": {
        "logoCount": int  // show amount of logos in content management system
        "thumbnailCount": int  // show amount of thumbnails in content management system
    }
}

Resource

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "title": string
    "description": string
    "location": string
    "date": string
    "category": string
    "linkId": string  // id of resource link is pointing to
    "linkType": string  // global/local
    "encryptionVersion": string  // encryption version, like 'verus.v1'
    "encryptionEpoch": int  // epoch defines key bundle that was used for encryption
    "encryptionEpk": string  // ephemeral public key that should be used to decrypt cypher data
    "belonging": string  // determines resource location in the system in a way 'belongingType:belongingPath(networkId)'
    "status": string  // pending/processing/ready/failed
    "metadata": {
        "fileName": string
        "fileSize": int
        "fileDate": timestamp
        "behaviourType": string
        "contentType": string
        "convertedFrom": string
        "link": string
        "origin": { resource origin structure }
        "geolocation": { geolocation structure }
        "dimensions": { dimensions structure }
    }
    "thumbnail": string
    "fromTemplate": bool
    "totalReactions": int  // amount of users who reacted to the resource
    "data": {
        "audio": { resource data audio structure }
        "video": { resource data video structure }
        "amazon": { resource data amazon structure }
        "imdb": { resource data imdb structure }
        "youtube": { resource data youtube structure }
        "pinterest": { resource data pinterest structure }
        "pixabay": { resource data pixabay structure }
        "facebook": { resource data facebook structure }
        "remoteUrl": { resource data remote url structure }
        "liveStream": { live stream data structure }
        "aiGeneration": { ai generation data structure }
        "thumbnailUrl": string
        "downloadUrl": string
        "directory": { resource data directory structure }
        "channel": { channel data structure }
        "googleDrive": { google drive structure }
    }
    "customParams": map[string]{ custom structure }  // client defined parameters
    "actions": [{ programmatic action with children structure }]  // custom programmatic actions from users
}

Resource Origin

{
    "type": string
    "device": string
    "deviceName": string
    "path": string
}

Geolocation

{
    "latitude": float
    "longitude": float
}

Dimensions

{
    "width": int
    "height": int
    "orientation": int
}

Resource Data Audio

{
    "title": string
    "artist": string
    "album": string
    "genre": string
    "duration": int
    "durationFloat": float
}

Resource Data Video

{
    "duration": int
    "durationFloat": float
    "hasAlphaChannel": bool  // true, if video generated from gif with transparent pixels
    "alphaChannel": string  // alpha channel video resource (if generated from gif)
}

Resource Data Amazon

{
    "asin": string
    "summary": string
    "author": [ string ]
    "manufacturer": string
    "title": string
    "publicationDate": string
    "url": string
}

Resource Data Imdb

{
    "Actors": string
    "Genre": string
    "Ratings": [{
        "Source": string
        "Value": string
    }]
    "Released": string
    "Runtime": string
    "Website": string
    "Year": string
    "Trailers": [ string ]
    "imdbID": string
}

Resource Data Youtube

{
    "videoId": string
    "formatId": string
}

Resource Data Pinterest

{
    "pin": string
    "url": string
}

Resource Data Pixabay

{
    "id": string
    "pageUrl": string
}

Resource Data Facebook

{
    "id": string
}

Resource Data Remote Url

{
    "url": string
    "urlType": string
    "favicon": string
    "title": string
}

Live Stream Data

{
    "streamId": string
    "assetId": string
    "playbackUrl": string
    "masterUrl": string
}

AI Generation Data

{
    "generationModel": string  // the model used for image generation [dall-e-3]
    "prompt": string  // a text description of the desired image
    "revisedPrompt": string  // the prompt that was used to generate the image, if there was any revision to the prompt
    "url": string  // the URL of the generated image
}

Resource Data Directory

{
    "innerContentType": string
    "innerContentCount": int
}

Channel Data

{
    "communityId": string
    "channelId": string
    "subChannelId": string
    "messageId": string
}

Google Drive

{
    "fileId": string
    "name": string
    "mimeType": string
}

Programmatic Action with children

{
    "localId": string  // local action id, operated by client side only
    "eventName": string
    "actionName": string
    "actionData": {
        "usedPropId": string
        "usedRoomId": string
        "usedNetworkId": string
        "usedStorylineId": string
        "usedQuestionId": int
        "usedQuestionnaireId": int
        "usedSegmentId": string
        "usedPlacementAreaId": string
        "usedRoomPoint": string
        "animationData": map[string]{ custom structure }
    }
    "childActions": [{ programmatic action structure }]
}

Programmatic Action

{
    "localId": string  // local action id, operated by client side only
    "eventName": string
    "actionName": string
    "actionData": {
        "usedPropId": string
        "usedRoomId": string
        "usedNetworkId": string
        "usedStorylineId": string
        "usedQuestionId": int
        "usedQuestionnaireId": int
        "usedSegmentId": string
        "usedPlacementAreaId": string
        "usedRoomPoint": string
        "animationData": map[string]{ custom structure }
    }
}

XYZ

{
    "x": float
    "y": float
    "z": float
}

Asset Bundle Style

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
    "styleType": string  // Default/NoMirror
    "doorsType": string  // Glass/None
    "homePosition": { xyz structure }  // home position for camera
}

Asset Bundle Environment

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "status": string  // workInProgress/published
    "ownership": string  // empty - public asset; network:{networkId} - belongs to network
    "hasVariants": bool  // asset has skin variants
    "title": string
    "tags": [ string ]
    "price": float  // price per month (when creating room with the asset)
    "score": int  // featuring score for ordering assets
    "displaySkins": bool  // display all skins in sorting table
    "params": map[string]{ custom structure }  // client defined custom data
    "editorParams": map[string]{ custom structure }  // editor defined custom data / not used in runtime
    "urls": map[string]string  // asset data urls per platform
    "thumbnail": { resource structure }
}

Asset Bundle Skin

{
    "id": string
    "created": timestamp
    "updated": timestamp
    "assetId": string
    "variantId": string
    "name": string
    "isDefault": bool  // is default among other variant skins
    "overrideColor": { rgba structure }  // override default color
    "colorOnly": bool  // doesn't have textures, only color'
    "simplifiedSkin": bool  // applying the skins does not require prop hierarchy rebuild
    "sortOrder": int
    "isHidden": bool  // hides skin from client
    "thumbnail": { resource structure }
    "urls": map[string]string  // asset skin data urls per platform
    "defaultColor": { rgba structure }  // applied by parent variant model
}

RGBA

{
    "r": float
    "g": float
    "b": float
    "a": float
}