<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="#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(maxComplexity=None, orderBy=None, curated=None, format=None, pageToken=None, category=None, pageSize=None, keywords=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="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;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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(maxComplexity=None, orderBy=None, curated=None, format=None, pageToken=None, category=None, pageSize=None, keywords=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:
  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.
  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.
  format: string, Return only assets with the matching format. Acceptable values are:
`BLOCKS`, `FBX`, `GLTF`, `GLTF2`, `OBJ`, `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.
  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`.
  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.
  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;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;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>