<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="#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</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, pageToken=None, pageSize=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(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="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;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.
  &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.
}

  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;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.
    &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.
  }</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;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.
    &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.
  }</pre>
</div>

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

Args:
  scriptId: string, The script project&#x27;s Drive ID. (required)
  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.
  pageSize: integer, The maximum number of versions on each returned page. Defaults to 50.
  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;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;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.
        &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;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.
  }</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>