<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="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#list">list(name, format=None, orderBy=None, pageToken=None, pageSize=None, visibility=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists assets authored by the given user. Only the value 'me', 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.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="list">list(name, format=None, orderBy=None, pageToken=None, pageSize=None, visibility=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`.
  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.
  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.
    Allowed values
      VISIBILITY_UNSPECIFIED - No visibility specified. Returns all assets.
      PUBLISHED - Returns only published assets.
      PRIVATE - Returns only private assets.
  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;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 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. # An Asset.
          &quot;thumbnail&quot;: { # Represents a file in Poly, which can be a root, resource, or thumbnail file. # The thumbnail image for the asset.
            &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;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;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
          },
          &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;presentationParams&quot;: { # Hints for displaying the asset, based on information available when the asset was uploaded. # Hints for displaying the asset. Note that these parameters are not immutable; the author of an asset may change them post-publication.
            &quot;orientingRotation&quot;: { # A [Quaternion](//en.wikipedia.org/wiki/Quaternion). Please note: if in the 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. # 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.
              &quot;z&quot;: 3.14, # The z component.
              &quot;x&quot;: 3.14, # The x 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;name&quot;: &quot;A String&quot;, # The unique identifier for the asset in the form: `assets/{ASSET_ID}`.
          &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;formatComplexity&quot;: { # Information on the complexity of this Format. # Complexity stats about this representation of the asset.
                &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;triangleCount&quot;: &quot;A String&quot;, # The estimated number of triangles.
              },
              &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;root&quot;: { # Represents a file in Poly, which can be a root, resource, or thumbnail file. # 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.
                &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;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;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
              },
              &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;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;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;url&quot;: &quot;A String&quot;, # The URL where the file data can be retrieved.
                },
              ],
            },
          ],
          &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;license&quot;: &quot;A String&quot;, # The license under which the author has made the asset available for use, if any.
          &quot;isCurated&quot;: True or False, # Whether this asset has been curated by the Poly team.
          &quot;remixInfo&quot;: { # Info about the sources of this asset (i.e. assets that were remixed to create this asset). # The remix info for the asset.
            &quot;sourceAsset&quot;: [ # Resource ids for the sources of this remix, of the form: `assets/{ASSET_ID}`
              &quot;A String&quot;,
            ],
          },
          &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;visibility&quot;: &quot;A String&quot;, # The visibility of the asset and who can access it.
          &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).
        },
      },
    ],
  }</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>