<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.</p>
<p class="toc_element">
  <code><a href="#list">list(keywords=None, pageToken=None, format=None, category=None, pageSize=None, maxComplexity=None, curated=None, orderBy=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all public, remixable assets. These are assets with an access level</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;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;z&quot;: 3.14, # The z component.
        &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;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;isCurated&quot;: True or False, # Whether this asset has been curated by the Poly team.
    &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;name&quot;: &quot;A String&quot;, # The unique identifier for the asset in the form:
        # `assets/{ASSET_ID}`.
    &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;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;license&quot;: &quot;A String&quot;, # The license under which the author has made the asset available
        # for use, if any.
    &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;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;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;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;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;visibility&quot;: &quot;A String&quot;, # The visibility of the asset and who can access it.
    &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;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;description&quot;: &quot;A String&quot;, # The human-readable description, set by the asset&#x27;s author.
    &quot;displayName&quot;: &quot;A String&quot;, # The human-readable name, set by the asset&#x27;s author.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(keywords=None, pageToken=None, format=None, category=None, pageSize=None, maxComplexity=None, curated=None, orderBy=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:
  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.
  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`.
  category: string, Filter assets based on the specified category. Supported values are:
`animals`, `architecture`, `art`, `food`, `nature`, `objects`, `people`,
`scenes`, `technology`, and `transport`.
  pageSize: integer, The maximum number of assets to be returned. This value must be between `1`
and `100`. Defaults to `20`.
  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.
  curated: boolean, Return only assets that have been curated by the Poly team.
  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;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;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;z&quot;: 3.14, # The z component.
            &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;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;isCurated&quot;: True or False, # Whether this asset has been curated by the Poly team.
        &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;name&quot;: &quot;A String&quot;, # The unique identifier for the asset in the form:
            # `assets/{ASSET_ID}`.
        &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;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;license&quot;: &quot;A String&quot;, # The license under which the author has made the asset available
            # for use, if any.
        &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;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;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;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;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;visibility&quot;: &quot;A String&quot;, # The visibility of the asset and who can access it.
        &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;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;description&quot;: &quot;A String&quot;, # The human-readable description, set by the asset&#x27;s author.
        &quot;displayName&quot;: &quot;A String&quot;, # The human-readable name, set by the asset&#x27;s author.
      },
    ],
    &quot;totalSize&quot;: 42, # The total number of assets in the list, without pagination.
  }</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>