<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="displayvideo_v1.html">Display & Video 360 API</a> . <a href="displayvideo_v1.customBiddingAlgorithms.html">customBiddingAlgorithms</a> . <a href="displayvideo_v1.customBiddingAlgorithms.scripts.html">scripts</a></h1>
<h2>Instance Methods</h2>
<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(customBiddingAlgorithmId, advertiserId=None, body=None, partnerId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new custom bidding script. Returns the newly created script if successful.</p>
<p class="toc_element">
  <code><a href="#get">get(customBiddingAlgorithmId, customBiddingScriptId, advertiserId=None, partnerId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a custom bidding script.</p>
<p class="toc_element">
  <code><a href="#list">list(customBiddingAlgorithmId, advertiserId=None, orderBy=None, pageSize=None, pageToken=None, partnerId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists custom bidding scripts that belong to the given algorithm. The order is defined by the order_by parameter.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(customBiddingAlgorithmId, advertiserId=None, body=None, partnerId=None, x__xgafv=None)</code>
  <pre>Creates a new custom bidding script. Returns the newly created script if successful.

Args:
  customBiddingAlgorithmId: string, Required. The ID of the custom bidding algorithm that owns the script. (required)
  body: object, The request body.
    The object takes the form of:

{ # A single custom bidding script.
  &quot;active&quot;: True or False, # Output only. Whether the script is currently being used for scoring by the parent algorithm.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the script was created.
  &quot;customBiddingAlgorithmId&quot;: &quot;A String&quot;, # Output only. The unique ID of the custom bidding algorithm the script belongs to.
  &quot;customBiddingScriptId&quot;: &quot;A String&quot;, # Output only. The unique ID of the custom bidding script.
  &quot;errors&quot;: [ # Output only. Error details of a rejected custom bidding script. This field will only be populated when Script.state is REJECTED.
    { # An error message for a custom bidding script.
      &quot;column&quot;: &quot;A String&quot;, # The column number in the script where the error was thrown.
      &quot;errorCode&quot;: &quot;A String&quot;, # The type of error.
      &quot;errorMessage&quot;: &quot;A String&quot;, # The detailed error message.
      &quot;line&quot;: &quot;A String&quot;, # The line number in the script where the error was thrown.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the custom bidding script.
  &quot;script&quot;: { # The reference to the uploaded custom bidding script file. # The reference to the uploaded script file.
    &quot;resourceName&quot;: &quot;A String&quot;, # A resource name to be used in media.download to Download the script files. Or media.upload to Upload the script files. Resource names have the format `customBiddingAlgorithms/{custom_bidding_algorithm_id}/scriptRef/{ref_id}`.
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the custom bidding script.
}

  advertiserId: string, The ID of the advertiser that owns the parent custom bidding algorithm.
  partnerId: string, The ID of the partner that owns the parent custom bidding algorithm. Only this partner will have write access to this custom bidding script.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single custom bidding script.
  &quot;active&quot;: True or False, # Output only. Whether the script is currently being used for scoring by the parent algorithm.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the script was created.
  &quot;customBiddingAlgorithmId&quot;: &quot;A String&quot;, # Output only. The unique ID of the custom bidding algorithm the script belongs to.
  &quot;customBiddingScriptId&quot;: &quot;A String&quot;, # Output only. The unique ID of the custom bidding script.
  &quot;errors&quot;: [ # Output only. Error details of a rejected custom bidding script. This field will only be populated when Script.state is REJECTED.
    { # An error message for a custom bidding script.
      &quot;column&quot;: &quot;A String&quot;, # The column number in the script where the error was thrown.
      &quot;errorCode&quot;: &quot;A String&quot;, # The type of error.
      &quot;errorMessage&quot;: &quot;A String&quot;, # The detailed error message.
      &quot;line&quot;: &quot;A String&quot;, # The line number in the script where the error was thrown.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the custom bidding script.
  &quot;script&quot;: { # The reference to the uploaded custom bidding script file. # The reference to the uploaded script file.
    &quot;resourceName&quot;: &quot;A String&quot;, # A resource name to be used in media.download to Download the script files. Or media.upload to Upload the script files. Resource names have the format `customBiddingAlgorithms/{custom_bidding_algorithm_id}/scriptRef/{ref_id}`.
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the custom bidding script.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(customBiddingAlgorithmId, customBiddingScriptId, advertiserId=None, partnerId=None, x__xgafv=None)</code>
  <pre>Gets a custom bidding script.

Args:
  customBiddingAlgorithmId: string, Required. The ID of the custom bidding algorithm owns the script. (required)
  customBiddingScriptId: string, Required. The ID of the custom bidding script to fetch. (required)
  advertiserId: string, The ID of the advertiser that owns the parent custom bidding algorithm.
  partnerId: string, The ID of the partner that owns the parent custom bidding algorithm. Only this partner will have write access to this custom bidding script.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single custom bidding script.
  &quot;active&quot;: True or False, # Output only. Whether the script is currently being used for scoring by the parent algorithm.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the script was created.
  &quot;customBiddingAlgorithmId&quot;: &quot;A String&quot;, # Output only. The unique ID of the custom bidding algorithm the script belongs to.
  &quot;customBiddingScriptId&quot;: &quot;A String&quot;, # Output only. The unique ID of the custom bidding script.
  &quot;errors&quot;: [ # Output only. Error details of a rejected custom bidding script. This field will only be populated when Script.state is REJECTED.
    { # An error message for a custom bidding script.
      &quot;column&quot;: &quot;A String&quot;, # The column number in the script where the error was thrown.
      &quot;errorCode&quot;: &quot;A String&quot;, # The type of error.
      &quot;errorMessage&quot;: &quot;A String&quot;, # The detailed error message.
      &quot;line&quot;: &quot;A String&quot;, # The line number in the script where the error was thrown.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the custom bidding script.
  &quot;script&quot;: { # The reference to the uploaded custom bidding script file. # The reference to the uploaded script file.
    &quot;resourceName&quot;: &quot;A String&quot;, # A resource name to be used in media.download to Download the script files. Or media.upload to Upload the script files. Resource names have the format `customBiddingAlgorithms/{custom_bidding_algorithm_id}/scriptRef/{ref_id}`.
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the custom bidding script.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(customBiddingAlgorithmId, advertiserId=None, orderBy=None, pageSize=None, pageToken=None, partnerId=None, x__xgafv=None)</code>
  <pre>Lists custom bidding scripts that belong to the given algorithm. The order is defined by the order_by parameter.

Args:
  customBiddingAlgorithmId: string, Required. The ID of the custom bidding algorithm owns the script. (required)
  advertiserId: string, The ID of the advertiser that owns the parent custom bidding algorithm.
  orderBy: string, Field by which to sort the list. Acceptable values are: * `createTime desc` (default) The default sorting order is descending. To specify ascending order for a field, the suffix &quot;desc&quot; should be removed. Example: `createTime`.
  pageSize: integer, Requested page size. Must be between `1` and `100`. If unspecified will default to `100`. Returns error code `INVALID_ARGUMENT` if an invalid value is specified.
  pageToken: string, A token identifying a page of results the server should return. Typically, this is the value of next_page_token returned from the previous call to `ListCustomBiddingScripts` method. If not specified, the first page of results will be returned.
  partnerId: string, The ID of the partner that owns the parent custom bidding algorithm. Only this partner will have write access to this custom bidding script.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;customBiddingScripts&quot;: [ # The list of custom bidding scripts. This list will be absent if empty.
    { # A single custom bidding script.
      &quot;active&quot;: True or False, # Output only. Whether the script is currently being used for scoring by the parent algorithm.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the script was created.
      &quot;customBiddingAlgorithmId&quot;: &quot;A String&quot;, # Output only. The unique ID of the custom bidding algorithm the script belongs to.
      &quot;customBiddingScriptId&quot;: &quot;A String&quot;, # Output only. The unique ID of the custom bidding script.
      &quot;errors&quot;: [ # Output only. Error details of a rejected custom bidding script. This field will only be populated when Script.state is REJECTED.
        { # An error message for a custom bidding script.
          &quot;column&quot;: &quot;A String&quot;, # The column number in the script where the error was thrown.
          &quot;errorCode&quot;: &quot;A String&quot;, # The type of error.
          &quot;errorMessage&quot;: &quot;A String&quot;, # The detailed error message.
          &quot;line&quot;: &quot;A String&quot;, # The line number in the script where the error was thrown.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the custom bidding script.
      &quot;script&quot;: { # The reference to the uploaded custom bidding script file. # The reference to the uploaded script file.
        &quot;resourceName&quot;: &quot;A String&quot;, # A resource name to be used in media.download to Download the script files. Or media.upload to Upload the script files. Resource names have the format `customBiddingAlgorithms/{custom_bidding_algorithm_id}/scriptRef/{ref_id}`.
      },
      &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the custom bidding script.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Pass this value in the page_token field in the subsequent call to `ListCustomBiddingScriptsRequest` method to retrieve the next page of results. If this field is null, it means this is the last page.
}</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>