<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;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;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;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;,
    ],
    &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`.
  }

  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;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;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;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;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;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>