<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, metricsGranularity=None, metricsFilter_deploymentId=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;title&quot;: &quot;A String&quot;, # The title for the 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.
  }

  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;title&quot;: &quot;A String&quot;, # The title for the project.
    &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;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
      &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
      &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;createTime&quot;: &quot;A String&quot;, # When the script was created.
    &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;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
      &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
    },
    &quot;updateTime&quot;: &quot;A String&quot;, # When the script was last updated.
    &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.
  }</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;title&quot;: &quot;A String&quot;, # The title for the project.
    &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;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
      &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
      &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;createTime&quot;: &quot;A String&quot;, # When the script was created.
    &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;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
      &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
    },
    &quot;updateTime&quot;: &quot;A String&quot;, # When the script was last updated.
    &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.
  }</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;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;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.
          &quot;type&quot;: &quot;A String&quot;, # The type of the file.
          &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;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
            &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
            &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
          },
        },
      ],
    }</pre>
</div>

<div class="method">
    <code class="details" id="getMetrics">getMetrics(scriptId, metricsGranularity=None, metricsFilter_deploymentId=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)
  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.
  metricsFilter_deploymentId: string, Optional field indicating a specific deployment to retrieve metrics from.
  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;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.
      },
    ],
    &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.
      },
    ],
  }</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;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;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.
        &quot;type&quot;: &quot;A String&quot;, # The type of the file.
        &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;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
          &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
          &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
        },
      },
    ],
  }

  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;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;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.
          &quot;type&quot;: &quot;A String&quot;, # The type of the file.
          &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;name&quot;: &quot;A String&quot;, # The user&#x27;s display name.
            &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s identifying email address.
            &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo.
          },
        },
      ],
    }</pre>
</div>

</body></html>