<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.assets.html">assets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(name, format=None, pageToken=None, pageSize=None, visibility=None, orderBy=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists assets authored by the given user. 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, format=None, pageToken=None, pageSize=None, visibility=None, orderBy=None, x__xgafv=None)</code>
  <pre>Lists assets authored by the given user. Only the value &#x27;me&#x27;, representing
the currently-authenticated user, is supported. May include assets with an
access level of PRIVATE or
UNLISTED and assets which are
All Rights Reserved for the
currently-authenticated user.

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)
  format: string, Return only assets with the matching format. Acceptable values are:
`BLOCKS`, `FBX`, `GLTF`, `GLTF2`, `OBJ`, and `TILT`.
  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.
  pageSize: integer, The maximum number of assets to be returned. This value must be between `1`
and `100`. Defaults to `20`.
  visibility: string, The visibility of the assets to be returned.
Defaults to
VISIBILITY_UNSPECIFIED
which returns all assets.
  orderBy: string, Specifies an ordering for assets. Acceptable values are:
`BEST`, `NEWEST`, `OLDEST`. Defaults to `BEST`, which ranks assets
based on a combination of popularity and other features.
  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;userAssets&quot;: [ # A list of UserAssets matching the request.
      { # Data about the user&#x27;s asset.
        &quot;asset&quot;: { # Represents and describes an asset in the Poly library. An asset is a 3D model # An Asset.
            # 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;thumbnail&quot;: { # Represents a file in Poly, which can be a root, # The thumbnail image for the asset.
              # resource, or thumbnail file.
            &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;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
          },
          &quot;visibility&quot;: &quot;A String&quot;, # The visibility of the asset and who can access it.
          &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;description&quot;: &quot;A String&quot;, # The human-readable description, set by the asset&#x27;s author.
          &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;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;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;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;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;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
              },
              &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).
              },
              &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;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;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
                },
              ],
              &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;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;colorSpace&quot;: &quot;A String&quot;, # The materials&#x27; diffuse/albedo color. This does not apply to vertex colors
                # or texture maps.
            &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;w&quot;: 3.14, # The scalar component.
              &quot;y&quot;: 3.14, # The y component.
              &quot;z&quot;: 3.14, # The z 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;license&quot;: &quot;A String&quot;, # The license under which the author has made the asset available
              # for use, if any.
          &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;displayName&quot;: &quot;A String&quot;, # The human-readable name, 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;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.
  }</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>