<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="adexchangebuyer_v1_4.html">Ad Exchange Buyer API</a> . <a href="adexchangebuyer_v1_4.accounts.html">accounts</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="#get">get(id)</a></code></p>
<p class="firstline">Gets one account by ID.</p>
<p class="toc_element">
  <code><a href="#list">list()</a></code></p>
<p class="firstline">Retrieves the authenticated user's list of accounts.</p>
<p class="toc_element">
  <code><a href="#patch">patch(id, body=None, confirmUnsafeAccountChange=None)</a></code></p>
<p class="firstline">Updates an existing account. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(id, body=None, confirmUnsafeAccountChange=None)</a></code></p>
<p class="firstline">Updates an existing account.</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="get">get(id)</code>
  <pre>Gets one account by ID.

Args:
  id: integer, The account id (required)

Returns:
  An object of the form:

    { # Configuration data for an Ad Exchange buyer account.
  &quot;applyPretargetingToNonGuaranteedDeals&quot;: True or False, # When this is false, bid requests that include a deal ID for a private auction or preferred deal are always sent to your bidder. When true, all active pretargeting configs will be applied to private auctions and preferred deals. Programmatic Guaranteed deals (when enabled) are always sent to your bidder.
  &quot;bidderLocation&quot;: [ # Your bidder locations that have distinct URLs.
    {
      &quot;bidProtocol&quot;: &quot;A String&quot;, # The protocol that the bidder endpoint is using. OpenRTB protocols with prefix PROTOCOL_OPENRTB_PROTOBUF use proto buffer, otherwise use JSON.  Allowed values:
          # - PROTOCOL_ADX
          # - PROTOCOL_OPENRTB_2_2
          # - PROTOCOL_OPENRTB_2_3
          # - PROTOCOL_OPENRTB_2_4
          # - PROTOCOL_OPENRTB_2_5
          # - PROTOCOL_OPENRTB_PROTOBUF_2_3
          # - PROTOCOL_OPENRTB_PROTOBUF_2_4
          # - PROTOCOL_OPENRTB_PROTOBUF_2_5
      &quot;maximumQps&quot;: 42, # The maximum queries per second the Ad Exchange will send.
      &quot;region&quot;: &quot;A String&quot;, # The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values:
          # - ASIA
          # - EUROPE
          # - US_EAST
          # - US_WEST
      &quot;url&quot;: &quot;A String&quot;, # The URL to which the Ad Exchange will send bid requests.
    },
  ],
  &quot;cookieMatchingNid&quot;: &quot;A String&quot;, # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
  &quot;cookieMatchingUrl&quot;: &quot;A String&quot;, # The base URL used in cookie match requests.
  &quot;id&quot;: 42, # Account id.
  &quot;kind&quot;: &quot;adexchangebuyer#account&quot;, # Resource type.
  &quot;maximumActiveCreatives&quot;: 42, # The maximum number of active creatives that an account can have, where a creative is active if it was inserted or bid with in the last 30 days. Please contact your technical account manager if you need to change this.
  &quot;maximumTotalQps&quot;: 42, # The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.
  &quot;numberActiveCreatives&quot;: 42, # The number of creatives that this account inserted or bid with in the last 30 days.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list()</code>
  <pre>Retrieves the authenticated user&#x27;s list of accounts.

Args:

Returns:
  An object of the form:

    { # An account feed lists Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single buyer account.
  &quot;items&quot;: [ # A list of accounts.
    { # Configuration data for an Ad Exchange buyer account.
      &quot;applyPretargetingToNonGuaranteedDeals&quot;: True or False, # When this is false, bid requests that include a deal ID for a private auction or preferred deal are always sent to your bidder. When true, all active pretargeting configs will be applied to private auctions and preferred deals. Programmatic Guaranteed deals (when enabled) are always sent to your bidder.
      &quot;bidderLocation&quot;: [ # Your bidder locations that have distinct URLs.
        {
          &quot;bidProtocol&quot;: &quot;A String&quot;, # The protocol that the bidder endpoint is using. OpenRTB protocols with prefix PROTOCOL_OPENRTB_PROTOBUF use proto buffer, otherwise use JSON.  Allowed values:
              # - PROTOCOL_ADX
              # - PROTOCOL_OPENRTB_2_2
              # - PROTOCOL_OPENRTB_2_3
              # - PROTOCOL_OPENRTB_2_4
              # - PROTOCOL_OPENRTB_2_5
              # - PROTOCOL_OPENRTB_PROTOBUF_2_3
              # - PROTOCOL_OPENRTB_PROTOBUF_2_4
              # - PROTOCOL_OPENRTB_PROTOBUF_2_5
          &quot;maximumQps&quot;: 42, # The maximum queries per second the Ad Exchange will send.
          &quot;region&quot;: &quot;A String&quot;, # The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values:
              # - ASIA
              # - EUROPE
              # - US_EAST
              # - US_WEST
          &quot;url&quot;: &quot;A String&quot;, # The URL to which the Ad Exchange will send bid requests.
        },
      ],
      &quot;cookieMatchingNid&quot;: &quot;A String&quot;, # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
      &quot;cookieMatchingUrl&quot;: &quot;A String&quot;, # The base URL used in cookie match requests.
      &quot;id&quot;: 42, # Account id.
      &quot;kind&quot;: &quot;adexchangebuyer#account&quot;, # Resource type.
      &quot;maximumActiveCreatives&quot;: 42, # The maximum number of active creatives that an account can have, where a creative is active if it was inserted or bid with in the last 30 days. Please contact your technical account manager if you need to change this.
      &quot;maximumTotalQps&quot;: 42, # The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.
      &quot;numberActiveCreatives&quot;: 42, # The number of creatives that this account inserted or bid with in the last 30 days.
    },
  ],
  &quot;kind&quot;: &quot;adexchangebuyer#accountsList&quot;, # Resource type.
}</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(id, body=None, confirmUnsafeAccountChange=None)</code>
  <pre>Updates an existing account. This method supports patch semantics.

Args:
  id: integer, The account id (required)
  body: object, The request body.
    The object takes the form of:

{ # Configuration data for an Ad Exchange buyer account.
  &quot;applyPretargetingToNonGuaranteedDeals&quot;: True or False, # When this is false, bid requests that include a deal ID for a private auction or preferred deal are always sent to your bidder. When true, all active pretargeting configs will be applied to private auctions and preferred deals. Programmatic Guaranteed deals (when enabled) are always sent to your bidder.
  &quot;bidderLocation&quot;: [ # Your bidder locations that have distinct URLs.
    {
      &quot;bidProtocol&quot;: &quot;A String&quot;, # The protocol that the bidder endpoint is using. OpenRTB protocols with prefix PROTOCOL_OPENRTB_PROTOBUF use proto buffer, otherwise use JSON.  Allowed values:
          # - PROTOCOL_ADX
          # - PROTOCOL_OPENRTB_2_2
          # - PROTOCOL_OPENRTB_2_3
          # - PROTOCOL_OPENRTB_2_4
          # - PROTOCOL_OPENRTB_2_5
          # - PROTOCOL_OPENRTB_PROTOBUF_2_3
          # - PROTOCOL_OPENRTB_PROTOBUF_2_4
          # - PROTOCOL_OPENRTB_PROTOBUF_2_5
      &quot;maximumQps&quot;: 42, # The maximum queries per second the Ad Exchange will send.
      &quot;region&quot;: &quot;A String&quot;, # The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values:
          # - ASIA
          # - EUROPE
          # - US_EAST
          # - US_WEST
      &quot;url&quot;: &quot;A String&quot;, # The URL to which the Ad Exchange will send bid requests.
    },
  ],
  &quot;cookieMatchingNid&quot;: &quot;A String&quot;, # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
  &quot;cookieMatchingUrl&quot;: &quot;A String&quot;, # The base URL used in cookie match requests.
  &quot;id&quot;: 42, # Account id.
  &quot;kind&quot;: &quot;adexchangebuyer#account&quot;, # Resource type.
  &quot;maximumActiveCreatives&quot;: 42, # The maximum number of active creatives that an account can have, where a creative is active if it was inserted or bid with in the last 30 days. Please contact your technical account manager if you need to change this.
  &quot;maximumTotalQps&quot;: 42, # The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.
  &quot;numberActiveCreatives&quot;: 42, # The number of creatives that this account inserted or bid with in the last 30 days.
}

  confirmUnsafeAccountChange: boolean, Confirmation for erasing bidder and cookie matching urls.

Returns:
  An object of the form:

    { # Configuration data for an Ad Exchange buyer account.
  &quot;applyPretargetingToNonGuaranteedDeals&quot;: True or False, # When this is false, bid requests that include a deal ID for a private auction or preferred deal are always sent to your bidder. When true, all active pretargeting configs will be applied to private auctions and preferred deals. Programmatic Guaranteed deals (when enabled) are always sent to your bidder.
  &quot;bidderLocation&quot;: [ # Your bidder locations that have distinct URLs.
    {
      &quot;bidProtocol&quot;: &quot;A String&quot;, # The protocol that the bidder endpoint is using. OpenRTB protocols with prefix PROTOCOL_OPENRTB_PROTOBUF use proto buffer, otherwise use JSON.  Allowed values:
          # - PROTOCOL_ADX
          # - PROTOCOL_OPENRTB_2_2
          # - PROTOCOL_OPENRTB_2_3
          # - PROTOCOL_OPENRTB_2_4
          # - PROTOCOL_OPENRTB_2_5
          # - PROTOCOL_OPENRTB_PROTOBUF_2_3
          # - PROTOCOL_OPENRTB_PROTOBUF_2_4
          # - PROTOCOL_OPENRTB_PROTOBUF_2_5
      &quot;maximumQps&quot;: 42, # The maximum queries per second the Ad Exchange will send.
      &quot;region&quot;: &quot;A String&quot;, # The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values:
          # - ASIA
          # - EUROPE
          # - US_EAST
          # - US_WEST
      &quot;url&quot;: &quot;A String&quot;, # The URL to which the Ad Exchange will send bid requests.
    },
  ],
  &quot;cookieMatchingNid&quot;: &quot;A String&quot;, # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
  &quot;cookieMatchingUrl&quot;: &quot;A String&quot;, # The base URL used in cookie match requests.
  &quot;id&quot;: 42, # Account id.
  &quot;kind&quot;: &quot;adexchangebuyer#account&quot;, # Resource type.
  &quot;maximumActiveCreatives&quot;: 42, # The maximum number of active creatives that an account can have, where a creative is active if it was inserted or bid with in the last 30 days. Please contact your technical account manager if you need to change this.
  &quot;maximumTotalQps&quot;: 42, # The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.
  &quot;numberActiveCreatives&quot;: 42, # The number of creatives that this account inserted or bid with in the last 30 days.
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(id, body=None, confirmUnsafeAccountChange=None)</code>
  <pre>Updates an existing account.

Args:
  id: integer, The account id (required)
  body: object, The request body.
    The object takes the form of:

{ # Configuration data for an Ad Exchange buyer account.
  &quot;applyPretargetingToNonGuaranteedDeals&quot;: True or False, # When this is false, bid requests that include a deal ID for a private auction or preferred deal are always sent to your bidder. When true, all active pretargeting configs will be applied to private auctions and preferred deals. Programmatic Guaranteed deals (when enabled) are always sent to your bidder.
  &quot;bidderLocation&quot;: [ # Your bidder locations that have distinct URLs.
    {
      &quot;bidProtocol&quot;: &quot;A String&quot;, # The protocol that the bidder endpoint is using. OpenRTB protocols with prefix PROTOCOL_OPENRTB_PROTOBUF use proto buffer, otherwise use JSON.  Allowed values:
          # - PROTOCOL_ADX
          # - PROTOCOL_OPENRTB_2_2
          # - PROTOCOL_OPENRTB_2_3
          # - PROTOCOL_OPENRTB_2_4
          # - PROTOCOL_OPENRTB_2_5
          # - PROTOCOL_OPENRTB_PROTOBUF_2_3
          # - PROTOCOL_OPENRTB_PROTOBUF_2_4
          # - PROTOCOL_OPENRTB_PROTOBUF_2_5
      &quot;maximumQps&quot;: 42, # The maximum queries per second the Ad Exchange will send.
      &quot;region&quot;: &quot;A String&quot;, # The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values:
          # - ASIA
          # - EUROPE
          # - US_EAST
          # - US_WEST
      &quot;url&quot;: &quot;A String&quot;, # The URL to which the Ad Exchange will send bid requests.
    },
  ],
  &quot;cookieMatchingNid&quot;: &quot;A String&quot;, # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
  &quot;cookieMatchingUrl&quot;: &quot;A String&quot;, # The base URL used in cookie match requests.
  &quot;id&quot;: 42, # Account id.
  &quot;kind&quot;: &quot;adexchangebuyer#account&quot;, # Resource type.
  &quot;maximumActiveCreatives&quot;: 42, # The maximum number of active creatives that an account can have, where a creative is active if it was inserted or bid with in the last 30 days. Please contact your technical account manager if you need to change this.
  &quot;maximumTotalQps&quot;: 42, # The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.
  &quot;numberActiveCreatives&quot;: 42, # The number of creatives that this account inserted or bid with in the last 30 days.
}

  confirmUnsafeAccountChange: boolean, Confirmation for erasing bidder and cookie matching urls.

Returns:
  An object of the form:

    { # Configuration data for an Ad Exchange buyer account.
  &quot;applyPretargetingToNonGuaranteedDeals&quot;: True or False, # When this is false, bid requests that include a deal ID for a private auction or preferred deal are always sent to your bidder. When true, all active pretargeting configs will be applied to private auctions and preferred deals. Programmatic Guaranteed deals (when enabled) are always sent to your bidder.
  &quot;bidderLocation&quot;: [ # Your bidder locations that have distinct URLs.
    {
      &quot;bidProtocol&quot;: &quot;A String&quot;, # The protocol that the bidder endpoint is using. OpenRTB protocols with prefix PROTOCOL_OPENRTB_PROTOBUF use proto buffer, otherwise use JSON.  Allowed values:
          # - PROTOCOL_ADX
          # - PROTOCOL_OPENRTB_2_2
          # - PROTOCOL_OPENRTB_2_3
          # - PROTOCOL_OPENRTB_2_4
          # - PROTOCOL_OPENRTB_2_5
          # - PROTOCOL_OPENRTB_PROTOBUF_2_3
          # - PROTOCOL_OPENRTB_PROTOBUF_2_4
          # - PROTOCOL_OPENRTB_PROTOBUF_2_5
      &quot;maximumQps&quot;: 42, # The maximum queries per second the Ad Exchange will send.
      &quot;region&quot;: &quot;A String&quot;, # The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values:
          # - ASIA
          # - EUROPE
          # - US_EAST
          # - US_WEST
      &quot;url&quot;: &quot;A String&quot;, # The URL to which the Ad Exchange will send bid requests.
    },
  ],
  &quot;cookieMatchingNid&quot;: &quot;A String&quot;, # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
  &quot;cookieMatchingUrl&quot;: &quot;A String&quot;, # The base URL used in cookie match requests.
  &quot;id&quot;: 42, # Account id.
  &quot;kind&quot;: &quot;adexchangebuyer#account&quot;, # Resource type.
  &quot;maximumActiveCreatives&quot;: 42, # The maximum number of active creatives that an account can have, where a creative is active if it was inserted or bid with in the last 30 days. Please contact your technical account manager if you need to change this.
  &quot;maximumTotalQps&quot;: 42, # The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.
  &quot;numberActiveCreatives&quot;: 42, # The number of creatives that this account inserted or bid with in the last 30 days.
}</pre>
</div>

</body></html>