<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></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="script_v1.projects.deployments.html">deployments()</a></code>
</p>
<p class="firstline">Returns the deployments Resource.</p>

<p class="toc_element">
  <code><a href="script_v1.projects.versions.html">versions()</a></code>
</p>
<p class="firstline">Returns the versions Resource.</p>

<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(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new, empty script project with no script files and a base manifest file.</p>
<p class="toc_element">
  <code><a href="#get">get(scriptId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a script project's metadata.</p>
<p class="toc_element">
  <code><a href="#getContent">getContent(scriptId, versionNumber=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the content of the script project, including the code source and metadata for each script file.</p>
<p class="toc_element">
  <code><a href="#getMetrics">getMetrics(scriptId, metricsFilter_deploymentId=None, metricsGranularity=None, x__xgafv=None)</a></code></p>
<p class="firstline">Get metrics data for scripts, such as number of executions and active users.</p>
<p class="toc_element">
  <code><a href="#updateContent">updateContent(scriptId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the content of the specified script project. This content is stored as the HEAD version, and is used when the script is executed as a trigger, in the script editor, in add-on preview mode, or as a web app or Apps Script API in development mode. This clears all the existing files in the project.</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(body=None, x__xgafv=None)</code>
  <pre>Creates a new, empty script project with no script files and a base manifest file.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to create a script project.
    &quot;parentId&quot;: &quot;A String&quot;, # The Drive ID of a parent file that the created script project is bound to. This is usually the ID of a Google Doc, Google Sheet, Google Form, or Google Slides file. If not set, a standalone script project is created.
    &quot;title&quot;: &quot;A String&quot;, # The title for the project.
  }

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

Returns:
  An object of the form:

    { # The script project resource.
    &quot;creator&quot;: { # A simple user profile resource. # User who originally created the script.
      &quot;domain&quot;: &quot;A String&quot;, # The user&#x27;s domain.
      &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
      &quot;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
    },
    &quot;parentId&quot;: &quot;A String&quot;, # The parent&#x27;s Drive ID that the script will be attached to. This is usually the ID of a Google Document or Google Sheet. This filed is optional, and if not set, a stand-alone script will be created.
    &quot;createTime&quot;: &quot;A String&quot;, # When the script was created.
    &quot;updateTime&quot;: &quot;A String&quot;, # When the script was last updated.
    &quot;lastModifyUser&quot;: { # A simple user profile resource. # User who last modified the script.
      &quot;domain&quot;: &quot;A String&quot;, # The user&#x27;s domain.
      &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
      &quot;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
    },
    &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
    &quot;title&quot;: &quot;A String&quot;, # The title for the project.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(scriptId, x__xgafv=None)</code>
  <pre>Gets a script project&#x27;s metadata.

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

Returns:
  An object of the form:

    { # The script project resource.
    &quot;creator&quot;: { # A simple user profile resource. # User who originally created the script.
      &quot;domain&quot;: &quot;A String&quot;, # The user&#x27;s domain.
      &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
      &quot;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
    },
    &quot;parentId&quot;: &quot;A String&quot;, # The parent&#x27;s Drive ID that the script will be attached to. This is usually the ID of a Google Document or Google Sheet. This filed is optional, and if not set, a stand-alone script will be created.
    &quot;createTime&quot;: &quot;A String&quot;, # When the script was created.
    &quot;updateTime&quot;: &quot;A String&quot;, # When the script was last updated.
    &quot;lastModifyUser&quot;: { # A simple user profile resource. # User who last modified the script.
      &quot;domain&quot;: &quot;A String&quot;, # The user&#x27;s domain.
      &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
      &quot;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
    },
    &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
    &quot;title&quot;: &quot;A String&quot;, # The title for the project.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getContent">getContent(scriptId, versionNumber=None, x__xgafv=None)</code>
  <pre>Gets the content of the script project, including the code source and metadata for each script file.

Args:
  scriptId: string, The script project&#x27;s Drive ID. (required)
  versionNumber: integer, The version number of the project to retrieve. If not provided, the project&#x27;s HEAD version is returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The Content resource.
    &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
    &quot;files&quot;: [ # The list of script project files. One of the files is a script manifest; it must be named &quot;appsscript&quot;, must have type of JSON, and include the manifest configurations for the project.
      { # An individual file within a script project. A file is a third-party source code created by one or more developers. It can be a server-side JS code, HTML, or a configuration file. Each script project can contain multiple files.
        &quot;source&quot;: &quot;A String&quot;, # The file content.
        &quot;functionSet&quot;: { # A set of functions. No duplicates are permitted. # The defined set of functions in the script file, if any.
          &quot;values&quot;: [ # A list of functions composing the set.
            { # Represents a function in a script project.
              &quot;name&quot;: &quot;A String&quot;, # The function name in the script project.
            },
          ],
        },
        &quot;name&quot;: &quot;A String&quot;, # The name of the file. The file extension is not part of the file name, which can be identified from the type field.
        &quot;lastModifyUser&quot;: { # A simple user profile resource. # The user who modified the file most recently. This read-only field is only visible to users who have WRITER permission for the script project.
          &quot;domain&quot;: &quot;A String&quot;, # The user&#x27;s domain.
          &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
          &quot;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
          &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
        },
        &quot;updateTime&quot;: &quot;A String&quot;, # Last modified date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.
        &quot;type&quot;: &quot;A String&quot;, # The type of the file.
        &quot;createTime&quot;: &quot;A String&quot;, # Creation date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="getMetrics">getMetrics(scriptId, metricsFilter_deploymentId=None, metricsGranularity=None, x__xgafv=None)</code>
  <pre>Get metrics data for scripts, such as number of executions and active users.

Args:
  scriptId: string, Required field indicating the script to get metrics for. (required)
  metricsFilter_deploymentId: string, Optional field indicating a specific deployment to retrieve metrics from.
  metricsGranularity: string, Required field indicating what granularity of metrics are returned.
    Allowed values
      UNSPECIFIED_GRANULARITY - Default metric granularity used to query no metrics.
      WEEKLY - Represents weekly metrics.
      DAILY - Represents daily metrics over a period of 7 days.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Resource containing usage stats for a given script, based on the supplied filter and mask present in the request.
    &quot;totalExecutions&quot;: [ # Number of total executions.
      { # Metrics value that holds number of executions counted.
        &quot;startTime&quot;: &quot;A String&quot;, # Required field indicating the start time of the interval.
        &quot;value&quot;: &quot;A String&quot;, # Indicates the number of executions counted.
        &quot;endTime&quot;: &quot;A String&quot;, # Required field indicating the end time of the interval.
      },
    ],
    &quot;failedExecutions&quot;: [ # Number of failed executions.
      { # Metrics value that holds number of executions counted.
        &quot;startTime&quot;: &quot;A String&quot;, # Required field indicating the start time of the interval.
        &quot;value&quot;: &quot;A String&quot;, # Indicates the number of executions counted.
        &quot;endTime&quot;: &quot;A String&quot;, # Required field indicating the end time of the interval.
      },
    ],
    &quot;activeUsers&quot;: [ # Number of active users.
      { # Metrics value that holds number of executions counted.
        &quot;startTime&quot;: &quot;A String&quot;, # Required field indicating the start time of the interval.
        &quot;value&quot;: &quot;A String&quot;, # Indicates the number of executions counted.
        &quot;endTime&quot;: &quot;A String&quot;, # Required field indicating the end time of the interval.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateContent">updateContent(scriptId, body=None, x__xgafv=None)</code>
  <pre>Updates the content of the specified script project. This content is stored as the HEAD version, and is used when the script is executed as a trigger, in the script editor, in add-on preview mode, or as a web app or Apps Script API in development mode. This clears all the existing files in the project.

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

{ # The Content resource.
  &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
  &quot;files&quot;: [ # The list of script project files. One of the files is a script manifest; it must be named &quot;appsscript&quot;, must have type of JSON, and include the manifest configurations for the project.
    { # An individual file within a script project. A file is a third-party source code created by one or more developers. It can be a server-side JS code, HTML, or a configuration file. Each script project can contain multiple files.
      &quot;source&quot;: &quot;A String&quot;, # The file content.
      &quot;functionSet&quot;: { # A set of functions. No duplicates are permitted. # The defined set of functions in the script file, if any.
        &quot;values&quot;: [ # A list of functions composing the set.
          { # Represents a function in a script project.
            &quot;name&quot;: &quot;A String&quot;, # The function name in the script project.
          },
        ],
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the file. The file extension is not part of the file name, which can be identified from the type field.
      &quot;lastModifyUser&quot;: { # A simple user profile resource. # The user who modified the file most recently. This read-only field is only visible to users who have WRITER permission for the script project.
        &quot;domain&quot;: &quot;A String&quot;, # The user&#x27;s domain.
        &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
        &quot;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
        &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
      },
      &quot;updateTime&quot;: &quot;A String&quot;, # Last modified date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.
      &quot;type&quot;: &quot;A String&quot;, # The type of the file.
      &quot;createTime&quot;: &quot;A String&quot;, # Creation date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.
    },
  ],
}

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

Returns:
  An object of the form:

    { # The Content resource.
    &quot;scriptId&quot;: &quot;A String&quot;, # The script project&#x27;s Drive ID.
    &quot;files&quot;: [ # The list of script project files. One of the files is a script manifest; it must be named &quot;appsscript&quot;, must have type of JSON, and include the manifest configurations for the project.
      { # An individual file within a script project. A file is a third-party source code created by one or more developers. It can be a server-side JS code, HTML, or a configuration file. Each script project can contain multiple files.
        &quot;source&quot;: &quot;A String&quot;, # The file content.
        &quot;functionSet&quot;: { # A set of functions. No duplicates are permitted. # The defined set of functions in the script file, if any.
          &quot;values&quot;: [ # A list of functions composing the set.
            { # Represents a function in a script project.
              &quot;name&quot;: &quot;A String&quot;, # The function name in the script project.
            },
          ],
        },
        &quot;name&quot;: &quot;A String&quot;, # The name of the file. The file extension is not part of the file name, which can be identified from the type field.
        &quot;lastModifyUser&quot;: { # A simple user profile resource. # The user who modified the file most recently. This read-only field is only visible to users who have WRITER permission for the script project.
          &quot;domain&quot;: &quot;A String&quot;, # The user&#x27;s domain.
          &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
          &quot;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
          &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
        },
        &quot;updateTime&quot;: &quot;A String&quot;, # Last modified date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.
        &quot;type&quot;: &quot;A String&quot;, # The type of the file.
        &quot;createTime&quot;: &quot;A String&quot;, # Creation date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.
      },
    ],
  }</pre>
</div>

</body></html>