<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(orderBy=None, pageSize=None, maxComplexity=None, keywords=None, x__xgafv=None, category=None, pageToken=None, format=None, curated=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'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.
    "updateTime": "A String", # 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.
    "displayName": "A String", # The human-readable name, set by the asset's author.
    "description": "A String", # The human-readable description, set by the asset's author.
    "license": "A String", # The license under which the author has made the asset available
        # for use, if any.
    "visibility": "A String", # The visibility of the asset and who can access it.
    "thumbnail": { # Represents a file in Poly, which can be a root, # The thumbnail image for the asset.
        # resource, or thumbnail file.
      "url": "A String", # The URL where the file data can be retrieved.
      "relativePath": "A String", # The path of the resource file relative to the
          # root file. For root or thumbnail files,
          # this is just the filename.
      "contentType": "A String", # 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).
    },
    "presentationParams": { # 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.
      "orientingRotation": { # 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 "object space" (the space
          # in which the object is defined) to "presentation space", 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'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 "w: 1" and nothing else this is the default value of
          # [0, 0, 0, 1] where x,y, and z are 0.
        "y": 3.14, # The y component.
        "x": 3.14, # The x component.
        "z": 3.14, # The z component.
        "w": 3.14, # The scalar component.
      },
      "colorSpace": "A String", # The materials' diffuse/albedo color. This does not apply to vertex colors
          # or texture maps.
      "backgroundColor": "A String", # A background color which could be used for displaying the 3D asset in a
          # 'thumbnail' or 'palette' 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.
    },
    "authorName": "A String", # The author's publicly visible name. Use this name when giving credit to the
        # author. For more information, see [Licensing](/poly/discover/licensing).
    "isCurated": True or False, # Whether this asset has been curated by the Poly team.
    "formats": [ # 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.
        "formatType": "A String", # A short string that identifies the format type of this representation.
            # Possible values are: `FBX`, `GLTF`, `GLTF2`, `OBJ`, and `TILT`.
        "root": { # 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.
          "url": "A String", # The URL where the file data can be retrieved.
          "relativePath": "A String", # The path of the resource file relative to the
              # root file. For root or thumbnail files,
              # this is just the filename.
          "contentType": "A String", # 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).
        },
        "formatComplexity": { # Information on the complexity of this Format. # Complexity stats about this representation of the asset.
          "triangleCount": "A String", # The estimated number of triangles.
          "lodHint": 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).
        },
        "resources": [ # 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.
            "url": "A String", # The URL where the file data can be retrieved.
            "relativePath": "A String", # The path of the resource file relative to the
                # root file. For root or thumbnail files,
                # this is just the filename.
            "contentType": "A String", # 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).
          },
        ],
      },
    ],
    "metadata": "A String", # Application-defined opaque metadata for this asset. This field is only
        # returned when querying for the signed-in user'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).
    "createTime": "A String", # For published assets, the time when the asset was published.
        # For unpublished assets, the time when the asset was created.
    "remixInfo": { # Info about the sources of this asset (i.e. assets that were remixed to # The remix info for the asset.
        # create this asset).
      "sourceAsset": [ # Resource ids for the sources of this remix, of the form:
          # `assets/{ASSET_ID}`
        "A String",
      ],
    },
    "name": "A String", # The unique identifier for the asset in the form:
        # `assets/{ASSET_ID}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(orderBy=None, pageSize=None, maxComplexity=None, keywords=None, x__xgafv=None, category=None, pageToken=None, format=None, curated=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:
  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.
  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.
  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
  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`.
  curated: boolean, Return only assets that have been curated by the Poly team.

Returns:
  An object of the form:

    { # A response message from a request to list.
    "nextPageToken": "A String", # 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.
    "totalSize": 42, # The total number of assets in the list, without pagination.
    "assets": [ # 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.
        "updateTime": "A String", # 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.
        "displayName": "A String", # The human-readable name, set by the asset's author.
        "description": "A String", # The human-readable description, set by the asset's author.
        "license": "A String", # The license under which the author has made the asset available
            # for use, if any.
        "visibility": "A String", # The visibility of the asset and who can access it.
        "thumbnail": { # Represents a file in Poly, which can be a root, # The thumbnail image for the asset.
            # resource, or thumbnail file.
          "url": "A String", # The URL where the file data can be retrieved.
          "relativePath": "A String", # The path of the resource file relative to the
              # root file. For root or thumbnail files,
              # this is just the filename.
          "contentType": "A String", # 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).
        },
        "presentationParams": { # 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.
          "orientingRotation": { # 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 "object space" (the space
              # in which the object is defined) to "presentation space", 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'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 "w: 1" and nothing else this is the default value of
              # [0, 0, 0, 1] where x,y, and z are 0.
            "y": 3.14, # The y component.
            "x": 3.14, # The x component.
            "z": 3.14, # The z component.
            "w": 3.14, # The scalar component.
          },
          "colorSpace": "A String", # The materials' diffuse/albedo color. This does not apply to vertex colors
              # or texture maps.
          "backgroundColor": "A String", # A background color which could be used for displaying the 3D asset in a
              # 'thumbnail' or 'palette' 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.
        },
        "authorName": "A String", # The author's publicly visible name. Use this name when giving credit to the
            # author. For more information, see [Licensing](/poly/discover/licensing).
        "isCurated": True or False, # Whether this asset has been curated by the Poly team.
        "formats": [ # 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.
            "formatType": "A String", # A short string that identifies the format type of this representation.
                # Possible values are: `FBX`, `GLTF`, `GLTF2`, `OBJ`, and `TILT`.
            "root": { # 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.
              "url": "A String", # The URL where the file data can be retrieved.
              "relativePath": "A String", # The path of the resource file relative to the
                  # root file. For root or thumbnail files,
                  # this is just the filename.
              "contentType": "A String", # 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).
            },
            "formatComplexity": { # Information on the complexity of this Format. # Complexity stats about this representation of the asset.
              "triangleCount": "A String", # The estimated number of triangles.
              "lodHint": 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).
            },
            "resources": [ # 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.
                "url": "A String", # The URL where the file data can be retrieved.
                "relativePath": "A String", # The path of the resource file relative to the
                    # root file. For root or thumbnail files,
                    # this is just the filename.
                "contentType": "A String", # 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).
              },
            ],
          },
        ],
        "metadata": "A String", # Application-defined opaque metadata for this asset. This field is only
            # returned when querying for the signed-in user'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).
        "createTime": "A String", # For published assets, the time when the asset was published.
            # For unpublished assets, the time when the asset was created.
        "remixInfo": { # Info about the sources of this asset (i.e. assets that were remixed to # The remix info for the asset.
            # create this asset).
          "sourceAsset": [ # Resource ids for the sources of this remix, of the form:
              # `assets/{ASSET_ID}`
            "A String",
          ],
        },
        "name": "A String", # The unique identifier for the asset in the form:
            # `assets/{ASSET_ID}`.
      },
    ],
  }</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 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>