<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.scripts.html">scripts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#run">run(scriptId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Runs a function in an Apps Script project. The script project must be</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="run">run(scriptId, body=None, x__xgafv=None)</code>
  <pre>Runs a function in an Apps Script project. The script project must be
deployed for use with the Apps Script API and the calling application must
share the same Cloud Platform project.

This method requires authorization with an OAuth 2.0 token that includes at
least one of the scopes listed in the
[Authorization](#authorization-scopes) section; script projects that do not
require authorization cannot be executed through this API. To find the
correct scopes to include in the authentication token, open the project in
the script editor, then select **File &gt; Project properties** and click the
**Scopes** tab.

The error `403, PERMISSION_DENIED: The caller does not have permission`
indicates that the Cloud Platform project used to authorize the request is
not the same as the one used by the script.

Args:
  scriptId: string, The script ID of the script to be executed. To find the script ID, open
the project in the script editor and select **File &gt; Project properties**. (required)
  body: object, The request body.
    The object takes the form of:

{ # A request to run the function in a script. The script is identified by the
      # specified `script_id`. Executing a function on a script returns results
      # based on the implementation of the script.
    &quot;function&quot;: &quot;A String&quot;, # The name of the function to execute in the given script. The name does not
        # include parentheses or parameters. It can reference a function in an
        # included library such as `Library.libFunction1`.
    &quot;sessionState&quot;: &quot;A String&quot;, # &lt;b&gt;Deprecated&lt;/b&gt;. For use with Android add-ons only. An ID that represents
        # the user&#x27;s current session in the Android app for Google Docs or Sheets,
        # included as extra data in the
        # [Intent](https://developer.android.com/guide/components/intents-filters.html)
        # that launches the add-on. When an Android add-on is run with a session
        # state, it gains the privileges of a
        # [bound](https://developers.google.com/apps-script/guides/bound)
        # script&amp;mdash;that is, it can access information like the user&#x27;s current
        # cursor position (in Docs) or selected cell (in Sheets). To retrieve the
        # state, call
        # `Intent.getStringExtra(&quot;com.google.android.apps.docs.addons.SessionState&quot;)`.
        # Optional.
    &quot;devMode&quot;: True or False, # If `true` and the user is an owner of the script, the script runs at the
        # most recently saved version rather than the version deployed for use with
        # the Apps Script API. Optional; default is `false`.
    &quot;parameters&quot;: [ # The parameters to be passed to the function being executed. The object type
        # for each parameter should match the expected type in Apps Script.
        # Parameters cannot be Apps Script-specific object types (such as a
        # `Document` or a `Calendar`); they can only be primitive types such as
        # `string`, `number`, `array`, `object`, or `boolean`. Optional.
      &quot;&quot;,
    ],
  }

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

Returns:
  An object of the form:

    { # A representation of an execution of an Apps Script function started with run. The execution response does not arrive until the function finishes executing. The maximum execution runtime is listed in the [Apps Script quotas guide](/apps-script/guides/services/quotas#current_limitations). &lt;p&gt;After execution has started, it can have one of four outcomes:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; If the script function returns successfully, the
      #   response field contains an
      #   ExecutionResponse object
      #   with the function&#x27;s return value in the object&#x27;s `result` field.&lt;/li&gt;
      # &lt;li&gt; If the script function (or Apps Script itself) throws an exception, the
      #   error field contains a
      #   Status object. The `Status` object&#x27;s `details`
      #   field contains an array with a single
      #   ExecutionError object that
      #   provides information about the nature of the error.&lt;/li&gt;
      # &lt;li&gt; If the execution has not yet completed,
      #   the done field is `false` and
      #   the neither the `response` nor `error` fields are present.&lt;/li&gt;
      # &lt;li&gt; If the `run` call itself fails (for example, because of a
      #   malformed request or an authorization error), the method returns an HTTP
      #   response code in the 4XX range with a different format for the response
      #   body. Client libraries automatically convert a 4XX response into an
      #   exception class.&lt;/li&gt;
      # &lt;/ul&gt;
    &quot;error&quot;: { # If a `run` call succeeds but the script function (or Apps Script itself) throws an exception, the response body&#x27;s error field contains this `Status` object. # If a `run` call succeeds but the script function (or Apps Script itself) throws an exception, this field contains a Status object. The `Status` object&#x27;s `details` field contains an array with a single ExecutionError object that provides information about the nature of the error.
      &quot;code&quot;: 42, # The status code. For this API, this value either: &lt;ul&gt; &lt;li&gt; 10, indicating a `SCRIPT_TIMEOUT` error,&lt;/li&gt; &lt;li&gt; 3, indicating an `INVALID_ARGUMENT` error, or&lt;/li&gt; &lt;li&gt; 1, indicating a `CANCELLED` execution.&lt;/li&gt; &lt;/ul&gt;
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which is in English. Any user-facing error message is localized and sent in the details field, or localized by the client.
      &quot;details&quot;: [ # An array that contains a single ExecutionError object that provides information about the nature of the error.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    &quot;done&quot;: True or False, # This field indicates whether the script execution has completed. A completed execution has a populated `response` field containing the ExecutionResponse from function that was executed.
    &quot;response&quot;: { # If the script function returns successfully, this field contains an ExecutionResponse object with the function&#x27;s return value.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
  }</pre>
</div>

</body></html>