<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="script_v1.html">Apps Script API</a> . <a href="script_v1.projects.html">projects</a> . <a href="script_v1.projects.versions.html">versions</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="#create">create(scriptId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new immutable version using the current code, with a unique version number.</p>
<p class="toc_element">
  <code><a href="#get">get(scriptId, versionNumber, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a version of a script project.</p>
<p class="toc_element">
  <code><a href="#list">list(scriptId, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List the versions of a script project.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</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="create">create(scriptId, body=None, x__xgafv=None)</code>
  <pre>Creates a new immutable version using the current code, with a unique version number.

Args:
  scriptId: string, The script project&#x27;s Drive ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # A resource representing a script project version. A version is a &quot;snapshot&quot; of a script project and is similar to a read-only branched release. When creating deployments, the version to use must be specified.
  &quot;createTime&quot;: &quot;A String&quot;, # When the version was created.
  &quot;description&quot;: &quot;A String&quot;, # The description for this version.
  &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
  &quot;versionNumber&quot;: 42, # The incremental ID that is created by Apps Script when a version is created. This is system assigned number and is immutable once created.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A resource representing a script project version. A version is a &quot;snapshot&quot; of a script project and is similar to a read-only branched release. When creating deployments, the version to use must be specified.
  &quot;createTime&quot;: &quot;A String&quot;, # When the version was created.
  &quot;description&quot;: &quot;A String&quot;, # The description for this version.
  &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
  &quot;versionNumber&quot;: 42, # The incremental ID that is created by Apps Script when a version is created. This is system assigned number and is immutable once created.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(scriptId, versionNumber, x__xgafv=None)</code>
  <pre>Gets a version of a script project.

Args:
  scriptId: string, The script project&#x27;s Drive ID. (required)
  versionNumber: integer, The version number. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A resource representing a script project version. A version is a &quot;snapshot&quot; of a script project and is similar to a read-only branched release. When creating deployments, the version to use must be specified.
  &quot;createTime&quot;: &quot;A String&quot;, # When the version was created.
  &quot;description&quot;: &quot;A String&quot;, # The description for this version.
  &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
  &quot;versionNumber&quot;: 42, # The incremental ID that is created by Apps Script when a version is created. This is system assigned number and is immutable once created.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(scriptId, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List the versions of a script project.

Args:
  scriptId: string, The script project&#x27;s Drive ID. (required)
  pageSize: integer, The maximum number of versions on each returned page. Defaults to 50.
  pageToken: string, The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response with the list of the versions for the specified script project.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The token use to fetch the next page of records. if not exist in the response, that means no more versions to list.
  &quot;versions&quot;: [ # The list of versions.
    { # A resource representing a script project version. A version is a &quot;snapshot&quot; of a script project and is similar to a read-only branched release. When creating deployments, the version to use must be specified.
      &quot;createTime&quot;: &quot;A String&quot;, # When the version was created.
      &quot;description&quot;: &quot;A String&quot;, # The description for this version.
      &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
      &quot;versionNumber&quot;: 42, # The incremental ID that is created by Apps Script when a version is created. This is system assigned number and is immutable once created.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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>