<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.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="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns detailed information about an asset given its name. PRIVATE assets are returned only if the currently authenticated user (via OAuth token) is the author of the asset.</p>
<p class="toc_element">
  <code><a href="#list">list(category=None, pageToken=None, format=None, keywords=None, pageSize=None, orderBy=None, curated=None, maxComplexity=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all public, remixable assets. These are assets with an access level of PUBLIC and published under the CC-By license.</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="get">get(name, x__xgafv=None)</code>
  <pre>Returns detailed information about an asset given its name. PRIVATE assets are returned only if the currently authenticated user (via OAuth token) is the author of the asset.

Args:
  name: string, Required. An asset&#x27;s name in the form `assets/{ASSET_ID}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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;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;displayName&quot;: &quot;A String&quot;, # The human-readable name, set by the asset&#x27;s author.
    &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;thumbnail&quot;: { # Represents a file in Poly, which can be a root, resource, or thumbnail file. # The thumbnail image for the asset.
      &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;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;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;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;license&quot;: &quot;A String&quot;, # The license under which the author has made the asset available for use, if any.
    &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;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;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;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;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;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;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;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;y&quot;: 3.14, # The y component.
        &quot;w&quot;: 3.14, # The scalar component.
        &quot;x&quot;: 3.14, # The x component.
        &quot;z&quot;: 3.14, # The z component.
      },
    },
    &quot;isCurated&quot;: True or False, # Whether this asset has been curated by the Poly team.
    &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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(category=None, pageToken=None, format=None, keywords=None, pageSize=None, orderBy=None, curated=None, maxComplexity=None, x__xgafv=None)</code>
  <pre>Lists all public, remixable assets. These are assets with an access level of PUBLIC and published under the CC-By license.

Args:
  category: string, Filter assets based on the specified category. Supported values are: `animals`, `architecture`, `art`, `food`, `nature`, `objects`, `people`, `scenes`, `technology`, and `transport`.
  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`.
  keywords: string, One or more search terms to be matched against all text that Poly has indexed for assets, which includes display_name, description, and tags. Multiple keywords should be separated by spaces.
  pageSize: integer, The maximum number of assets to be returned. This value must be between `1` and `100`. Defaults to `20`.
  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.
  curated: boolean, Return only assets that have been curated by the Poly team.
  maxComplexity: string, Returns assets that are of the specified complexity or less. Defaults to COMPLEX. For example, a request for MEDIUM assets also includes SIMPLE assets.
    Allowed values
      COMPLEXITY_UNSPECIFIED - No complexity specified. This is equivalent to omitting the filter.
      COMPLEX - Highly-complex.
      MEDIUM - Averagely-complex.
      SIMPLE - Simple.
  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;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;displayName&quot;: &quot;A String&quot;, # The human-readable name, set by the asset&#x27;s author.
        &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;thumbnail&quot;: { # Represents a file in Poly, which can be a root, resource, or thumbnail file. # The thumbnail image for the asset.
          &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;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;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;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;license&quot;: &quot;A String&quot;, # The license under which the author has made the asset available for use, if any.
        &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;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;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;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;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;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;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;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;y&quot;: 3.14, # The y component.
            &quot;w&quot;: 3.14, # The scalar component.
            &quot;x&quot;: 3.14, # The x component.
            &quot;z&quot;: 3.14, # The z component.
          },
        },
        &quot;isCurated&quot;: True or False, # Whether this asset has been curated by the Poly team.
        &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.
      },
    ],
  }</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>