<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="poly_v1.html">Poly API</a> . <a href="poly_v1.users.html">users</a> . <a href="poly_v1.users.likedassets.html">likedassets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(name, orderBy=None, pageSize=None, pageToken=None, format=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists assets that the user has liked. Only the value 'me', representing</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(name, orderBy=None, pageSize=None, pageToken=None, format=None, x__xgafv=None)</code>
  <pre>Lists assets that the user has liked. Only the value &#x27;me&#x27;, representing
the currently-authenticated user, is supported. May include assets with an
access level of UNLISTED.

Args:
  name: string, A valid user id. Currently, only the special value &#x27;me&#x27;, representing the
currently-authenticated user is supported. To use &#x27;me&#x27;, you must pass
an OAuth token with the request. (required)
  orderBy: string, Specifies an ordering for assets. Acceptable values are:
`BEST`, `NEWEST`, `OLDEST`, &#x27;LIKED_TIME&#x27;. Defaults to `LIKED_TIME`, which
ranks assets based on how recently they were liked.
  pageSize: integer, The maximum number of assets to be returned. This value must be between `1`
and `100`. Defaults to `20`.
  pageToken: string, Specifies a continuation token from a previous search whose results were
split into multiple pages. To get the next page, submit the same request
specifying the value from
next_page_token.
  format: string, Return only assets with the matching format. Acceptable values are:
`BLOCKS`, `FBX`, `GLTF`, `GLTF2`, `OBJ`, `TILT`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A response message from a request to list.
    &quot;totalSize&quot;: 42, # The total number of assets in the list, without pagination.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The continuation token for retrieving the next page. If empty,
        # indicates that there are no more pages. To get the next page, submit the
        # same request specifying this value as the
        # page_token.
    &quot;assets&quot;: [ # A list of assets that match the criteria specified in the request.
      { # Represents and describes an asset in the Poly library. An asset is a 3D model
          # or scene created using [Tilt Brush](//www.tiltbrush.com),
          # [Blocks](//vr.google.com/blocks/), or any 3D program that produces a file
          # that can be upload to Poly.
        &quot;remixInfo&quot;: { # Info about the sources of this asset (i.e. assets that were remixed to # The remix info for the asset.
            # create this asset).
          &quot;sourceAsset&quot;: [ # Resource ids for the sources of this remix, of the form:
              # `assets/{ASSET_ID}`
            &quot;A String&quot;,
          ],
        },
        &quot;license&quot;: &quot;A String&quot;, # The license under which the author has made the asset available
            # for use, if any.
        &quot;displayName&quot;: &quot;A String&quot;, # The human-readable name, set by the asset&#x27;s author.
        &quot;presentationParams&quot;: { # Hints for displaying the asset, based on information available when the asset # Hints for displaying the asset. Note that these parameters are not
            # immutable; the author of an asset may change them post-publication.
            # was uploaded.
          &quot;orientingRotation&quot;: { # A [Quaternion](//en.wikipedia.org/wiki/Quaternion). Please note: if in the # A rotation that should be applied to the object root to make it upright.
              # More precisely, this quaternion transforms from &quot;object space&quot; (the space
              # in which the object is defined) to &quot;presentation space&quot;, a coordinate
              # system where +Y is up, +X is right, -Z is forward. For example, if
              # the object is the Eiffel Tower, in its local coordinate system the
              # object might be laid out such that the base of the tower is on the
              # YZ plane and the tip of the tower is towards positive X. In this case
              # this quaternion would specify a rotation (of 90 degrees about the Z
              # axis) such that in the presentation space the base of the tower is
              # aligned with the XZ plane, and the tip of the tower lies towards +Y.
              #
              # This rotation is unrelated to the object&#x27;s pose in the web preview,
              # which is just a camera position setting and is *not* reflected in this
              # rotation.
              #
              # Please note: this is applicable only to the gLTF.
              # response you see &quot;w: 1&quot; and nothing else this is the default value of
              # [0, 0, 0, 1] where x,y, and z are 0.
            &quot;x&quot;: 3.14, # The x component.
            &quot;z&quot;: 3.14, # The z component.
            &quot;y&quot;: 3.14, # The y component.
            &quot;w&quot;: 3.14, # The scalar component.
          },
          &quot;backgroundColor&quot;: &quot;A String&quot;, # A background color which could be used for displaying the 3D asset in a
              # &#x27;thumbnail&#x27; or &#x27;palette&#x27; style view. Authors have the option to set this
              # background color when publishing or editing their asset.
              #
              # This is represented as a six-digit hexademical triplet specifying the
              # RGB components of the background color, e.g. #FF0000 for Red.
          &quot;colorSpace&quot;: &quot;A String&quot;, # The materials&#x27; diffuse/albedo color. This does not apply to vertex colors
              # or texture maps.
        },
        &quot;visibility&quot;: &quot;A String&quot;, # The visibility of the asset and who can access it.
        &quot;description&quot;: &quot;A String&quot;, # The human-readable description, set by the asset&#x27;s author.
        &quot;updateTime&quot;: &quot;A String&quot;, # The time when the asset was last modified. For published assets, whose
            # contents are immutable, the update time changes only when metadata
            # properties, such as visibility, are updated.
        &quot;metadata&quot;: &quot;A String&quot;, # Application-defined opaque metadata for this asset. This field is only
            # returned when querying for the signed-in user&#x27;s own assets, not for public
            # assets. This string is limited to 1K chars. It is up to the creator of
            # the asset to define the format for this string (for example, JSON).
        &quot;createTime&quot;: &quot;A String&quot;, # For published assets, the time when the asset was published.
            # For unpublished assets, the time when the asset was created.
        &quot;authorName&quot;: &quot;A String&quot;, # The author&#x27;s publicly visible name. Use this name when giving credit to the
            # author. For more information, see [Licensing](/poly/discover/licensing).
        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for the asset in the form:
            # `assets/{ASSET_ID}`.
        &quot;isCurated&quot;: True or False, # Whether this asset has been curated by the Poly team.
        &quot;thumbnail&quot;: { # Represents a file in Poly, which can be a root, # The thumbnail image for the asset.
            # resource, or thumbnail file.
          &quot;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
          &quot;relativePath&quot;: &quot;A String&quot;, # The path of the resource file relative to the
              # root file. For root or thumbnail files,
              # this is just the filename.
          &quot;contentType&quot;: &quot;A String&quot;, # The MIME content-type, such as `image/png`.
              # For more information, see
              # [MIME
              # types](//developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types).
        },
        &quot;formats&quot;: [ # A list of Formats where each
            # format describes one representation of the asset.
          { # The same asset can be represented in different formats, for example,
              # a [WaveFront .obj](//en.wikipedia.org/wiki/Wavefront_.obj_file) file with its
              # corresponding .mtl file or a [Khronos glTF](//www.khronos.org/gltf) file
              # with its corresponding .glb binary data. A format refers to a specific
              # representation of an asset and contains all information needed to
              # retrieve and describe this representation.
            &quot;formatType&quot;: &quot;A String&quot;, # A short string that identifies the format type of this representation.
                # Possible values are: `FBX`, `GLTF`, `GLTF2`, `OBJ`, and `TILT`.
            &quot;resources&quot;: [ # A list of dependencies of the root element. May include, but is not
                # limited to, materials, textures, and shader programs.
              { # Represents a file in Poly, which can be a root,
                  # resource, or thumbnail file.
                &quot;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
                &quot;relativePath&quot;: &quot;A String&quot;, # The path of the resource file relative to the
                    # root file. For root or thumbnail files,
                    # this is just the filename.
                &quot;contentType&quot;: &quot;A String&quot;, # The MIME content-type, such as `image/png`.
                    # For more information, see
                    # [MIME
                    # types](//developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types).
              },
            ],
            &quot;root&quot;: { # Represents a file in Poly, which can be a root, # The root of the file hierarchy. This will always be populated.
                # For some format_types - such as `TILT`, which are
                # self-contained - this is all of the data.
                #
                # Other types - such as `OBJ` - often reference other data elements.
                # These are contained in the resources field.
                # resource, or thumbnail file.
              &quot;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
              &quot;relativePath&quot;: &quot;A String&quot;, # The path of the resource file relative to the
                  # root file. For root or thumbnail files,
                  # this is just the filename.
              &quot;contentType&quot;: &quot;A String&quot;, # The MIME content-type, such as `image/png`.
                  # For more information, see
                  # [MIME
                  # types](//developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types).
            },
            &quot;formatComplexity&quot;: { # Information on the complexity of this Format. # Complexity stats about this representation of the asset.
              &quot;triangleCount&quot;: &quot;A String&quot;, # The estimated number of triangles.
              &quot;lodHint&quot;: 42, # A non-negative integer that represents the level of detail (LOD) of this
                  # format relative to other formats of the same asset with the same
                  # format_type.
                  # This hint allows you to sort formats from the most-detailed (0) to
                  # least-detailed (integers greater than 0).
            },
          },
        ],
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>