<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="partners_v2.html">Google Partners API</a> . <a href="partners_v2.v2.html">v2</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#getPartnersstatus">getPartnersstatus(requestMetadata_userOverrides_ipAddress=None, requestMetadata_trafficSource_trafficSubId=None, requestMetadata_userOverrides_userId=None, x__xgafv=None, requestMetadata_locale=None, requestMetadata_experimentIds=None, requestMetadata_trafficSource_trafficSourceId=None, requestMetadata_partnersSessionId=None)</a></code></p>
<p class="firstline">Gets Partners Status of the logged in user's agency.</p>
<p class="toc_element">
  <code><a href="#updateCompanies">updateCompanies(body, requestMetadata_userOverrides_ipAddress=None, requestMetadata_trafficSource_trafficSubId=None, requestMetadata_userOverrides_userId=None, x__xgafv=None, requestMetadata_locale=None, requestMetadata_experimentIds=None, requestMetadata_trafficSource_trafficSourceId=None, updateMask=None, requestMetadata_partnersSessionId=None)</a></code></p>
<p class="firstline">Update company.</p>
<p class="toc_element">
  <code><a href="#updateLeads">updateLeads(body, requestMetadata_userOverrides_ipAddress=None, requestMetadata_trafficSource_trafficSubId=None, requestMetadata_userOverrides_userId=None, x__xgafv=None, requestMetadata_locale=None, requestMetadata_experimentIds=None, requestMetadata_trafficSource_trafficSourceId=None, updateMask=None, requestMetadata_partnersSessionId=None)</a></code></p>
<p class="firstline">Updates the specified lead.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="getPartnersstatus">getPartnersstatus(requestMetadata_userOverrides_ipAddress=None, requestMetadata_trafficSource_trafficSubId=None, requestMetadata_userOverrides_userId=None, x__xgafv=None, requestMetadata_locale=None, requestMetadata_experimentIds=None, requestMetadata_trafficSource_trafficSourceId=None, requestMetadata_partnersSessionId=None)</code>
  <pre>Gets Partners Status of the logged in user's agency.
Should only be called if the logged in user is the admin of the agency.

Args:
  requestMetadata_userOverrides_ipAddress: string, IP address to use instead of the user's geo-located IP address.
  requestMetadata_trafficSource_trafficSubId: string, Second level identifier to indicate where the traffic comes from.
An identifier has multiple letters created by a team which redirected the
traffic to us.
  requestMetadata_userOverrides_userId: string, Logged-in user ID to impersonate instead of the user's ID.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  requestMetadata_locale: string, Locale to use for the current request.
  requestMetadata_experimentIds: string, Experiment IDs the current request belongs to. (repeated)
  requestMetadata_trafficSource_trafficSourceId: string, Identifier to indicate where the traffic comes from.
An identifier has multiple letters created by a team which redirected the
traffic to us.
  requestMetadata_partnersSessionId: string, Google Partners session ID.

Returns:
  An object of the form:

    { # Response message for
      # GetPartnersStatus.
    "responseMetadata": { # Common data that is in each API response. # Current response metadata.
      "debugInfo": { # Debug information about this request. # Debug information about this request.
        "serverTraceInfo": "A String", # Server-side debug stack trace.
        "serviceUrl": "A String", # URL of the service that handled this request.
        "serverInfo": "A String", # Info about the server that serviced this request.
      },
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateCompanies">updateCompanies(body, requestMetadata_userOverrides_ipAddress=None, requestMetadata_trafficSource_trafficSubId=None, requestMetadata_userOverrides_userId=None, x__xgafv=None, requestMetadata_locale=None, requestMetadata_experimentIds=None, requestMetadata_trafficSource_trafficSourceId=None, updateMask=None, requestMetadata_partnersSessionId=None)</code>
  <pre>Update company.
Should only be called within the context of an authorized logged in user.

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

{ # A company resource in the Google Partners API. Once certified, it qualifies
    # for being searched by advertisers.
  "companyTypes": [ # Company type labels listed on the company's profile.
    "A String",
  ],
  "originalMinMonthlyBudget": { # Represents an amount of money with its currency type. # The unconverted minimum monthly budget that the company accepts for partner
      # business.
    "nanos": 42, # Number of nano (10^-9) units of the amount.
        # The value must be between -999,999,999 and +999,999,999 inclusive.
        # If `units` is positive, `nanos` must be positive or zero.
        # If `units` is zero, `nanos` can be positive, zero, or negative.
        # If `units` is negative, `nanos` must be negative or zero.
        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
    "units": "A String", # The whole units of the amount.
        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
  },
  "autoApprovalEmailDomains": [ # Email domains that allow users with a matching email address to get
      # auto-approved for associating with this company.
    "A String",
  ],
  "specializationStatus": [ # The list of Google Partners specialization statuses for the company.
    { # Agency specialization status
      "badgeSpecialization": "A String", # The specialization this status is for.
      "badgeSpecializationState": "A String", # State of agency specialization.
    },
  ],
  "ranks": [ # Information related to the ranking of the company within the list of
      # companies.
    { # Information related to ranking of results.
      "type": "A String", # The type of rank.
      "value": 3.14, # The numerical value of the rank.
    },
  ],
  "primaryAdwordsManagerAccountId": "A String", # The Primary AdWords Manager Account id.
  "locations": [ # The list of all company locations.
      # If set, must include the
      # primary_location
      # in the list.
    { # A location with address and geographic coordinates. May optionally contain a
        # detailed (multi-field) version of the address.
      "languageCode": "A String", # Language code of the address. Should be in BCP 47 format.
      "addressLine": [ # The following address lines represent the most specific part of any
          # address.
        "A String",
      ],
      "dependentLocality": "A String", # Dependent locality or sublocality. Used for UK dependent localities, or
          # neighborhoods or boroughs in other locations.
      "sortingCode": "A String", # Use of this code is very country-specific, but will refer to a secondary
          # classification code for sorting mail.
      "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # The latitude and longitude of the location, in degrees.
          # of doubles representing degrees latitude and degrees longitude. Unless
          # specified otherwise, this must conform to the
          # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
          # standard</a>. Values must be within normalized ranges.
          #
          # Example of normalization code in Python:
          #
          #     def NormalizeLongitude(longitude):
          #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
          #       q, r = divmod(longitude, 360.0)
          #       if r > 180.0 or (r == 180.0 and q <= -1.0):
          #         return r - 360.0
          #       return r
          #
          #     def NormalizeLatLng(latitude, longitude):
          #       """Wraps decimal degrees latitude and longitude to
          #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
          #       r = latitude % 360.0
          #       if r <= 90.0:
          #         return r, NormalizeLongitude(longitude)
          #       elif r >= 270.0:
          #         return r - 360, NormalizeLongitude(longitude)
          #       else:
          #         return 180 - r, NormalizeLongitude(longitude + 180.0)
          #
          #     assert 180.0 == NormalizeLongitude(180.0)
          #     assert -180.0 == NormalizeLongitude(-180.0)
          #     assert -179.0 == NormalizeLongitude(181.0)
          #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
          #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
          #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
          #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
          #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
          #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
          #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
          #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
          #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
          #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
        "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
      "locality": "A String", # Generally refers to the city/town portion of an address.
      "regionCode": "A String", # CLDR (Common Locale Data Repository) region code .
      "administrativeArea": "A String", # Top-level administrative subdivision of this country.
      "address": "A String", # The single string version of the address.
      "postalCode": "A String", # Values are frequently alphanumeric.
    },
  ],
  "id": "A String", # The ID of the company.
  "badgeTier": "A String", # Partner badge tier
  "services": [ # Services the company can help with.
    "A String",
  ],
  "additionalWebsites": [ # URL of the company's additional websites used to verify the dynamic badges.
      # These are stored as full URLs as entered by the user, but only the TLD will
      # be used for the actual verification.
    "A String",
  ],
  "profileStatus": "A String", # The public viewability status of the company's profile.
  "industries": [ # Industries the company can help with.
    "A String",
  ],
  "primaryLocation": { # A location with address and geographic coordinates. May optionally contain a # The primary location of the company.
      # detailed (multi-field) version of the address.
    "languageCode": "A String", # Language code of the address. Should be in BCP 47 format.
    "addressLine": [ # The following address lines represent the most specific part of any
        # address.
      "A String",
    ],
    "dependentLocality": "A String", # Dependent locality or sublocality. Used for UK dependent localities, or
        # neighborhoods or boroughs in other locations.
    "sortingCode": "A String", # Use of this code is very country-specific, but will refer to a secondary
        # classification code for sorting mail.
    "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # The latitude and longitude of the location, in degrees.
        # of doubles representing degrees latitude and degrees longitude. Unless
        # specified otherwise, this must conform to the
        # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
        # standard</a>. Values must be within normalized ranges.
        #
        # Example of normalization code in Python:
        #
        #     def NormalizeLongitude(longitude):
        #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
        #       q, r = divmod(longitude, 360.0)
        #       if r > 180.0 or (r == 180.0 and q <= -1.0):
        #         return r - 360.0
        #       return r
        #
        #     def NormalizeLatLng(latitude, longitude):
        #       """Wraps decimal degrees latitude and longitude to
        #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
        #       r = latitude % 360.0
        #       if r <= 90.0:
        #         return r, NormalizeLongitude(longitude)
        #       elif r >= 270.0:
        #         return r - 360, NormalizeLongitude(longitude)
        #       else:
        #         return 180 - r, NormalizeLongitude(longitude + 180.0)
        #
        #     assert 180.0 == NormalizeLongitude(180.0)
        #     assert -180.0 == NormalizeLongitude(-180.0)
        #     assert -179.0 == NormalizeLongitude(181.0)
        #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
        #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
        #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
        #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
        #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
        #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
        #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
        #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
        #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
        #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
      "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
      "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
    },
    "locality": "A String", # Generally refers to the city/town portion of an address.
    "regionCode": "A String", # CLDR (Common Locale Data Repository) region code .
    "administrativeArea": "A String", # Top-level administrative subdivision of this country.
    "address": "A String", # The single string version of the address.
    "postalCode": "A String", # Values are frequently alphanumeric.
  },
  "websiteUrl": "A String", # URL of the company's website.
  "certificationStatuses": [ # The list of Google Partners certification statuses for the company.
    { # Google Partners certification status.
      "isCertified": True or False, # Whether certification is passing.
      "userCount": 42, # Number of people who are certified,
      "type": "A String", # The type of the certification.
      "examStatuses": [ # List of certification exam statuses.
        { # Status for a Google Partners certification exam.
          "numberUsersPass": 42, # The number of people who have passed the certification exam.
          "type": "A String", # The type of certification exam.
        },
      ],
    },
  ],
  "publicProfile": { # Basic information from a public profile. # Basic information from the company's public profile.
    "url": "A String", # The URL of the public profile.
    "profileImage": "A String", # The URL to the main profile image of the public profile.
    "displayImageUrl": "A String", # The URL to the main display image of the public profile. Being deprecated.
    "displayName": "A String", # The display name of the public profile.
    "id": "A String", # The ID which can be used to retrieve more details about the public profile.
  },
  "localizedInfos": [ # The list of localized info for the company.
    { # The localized company information.
      "countryCodes": [ # List of country codes for the localized company info.
        "A String",
      ],
      "languageCode": "A String", # Language code of the localized company info, as defined by
          # <a href="https://tools.ietf.org/html/bcp47">BCP 47</a>
          # (IETF BCP 47, "Tags for Identifying Languages").
      "displayName": "A String", # Localized display name.
      "overview": "A String", # Localized brief description that the company uses to advertise themselves.
    },
  ],
  "convertedMinMonthlyBudget": { # Represents an amount of money with its currency type. # The minimum monthly budget that the company accepts for partner business,
      # converted to the requested currency code.
    "nanos": 42, # Number of nano (10^-9) units of the amount.
        # The value must be between -999,999,999 and +999,999,999 inclusive.
        # If `units` is positive, `nanos` must be positive or zero.
        # If `units` is zero, `nanos` can be positive, zero, or negative.
        # If `units` is negative, `nanos` must be negative or zero.
        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
    "units": "A String", # The whole units of the amount.
        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
  },
  "primaryLanguageCode": "A String", # The primary language code of the company, as defined by
      # <a href="https://tools.ietf.org/html/bcp47">BCP 47</a>
      # (IETF BCP 47, "Tags for Identifying Languages").
  "name": "A String", # The name of the company.
}

  requestMetadata_userOverrides_ipAddress: string, IP address to use instead of the user's geo-located IP address.
  requestMetadata_trafficSource_trafficSubId: string, Second level identifier to indicate where the traffic comes from.
An identifier has multiple letters created by a team which redirected the
traffic to us.
  requestMetadata_userOverrides_userId: string, Logged-in user ID to impersonate instead of the user's ID.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  requestMetadata_locale: string, Locale to use for the current request.
  requestMetadata_experimentIds: string, Experiment IDs the current request belongs to. (repeated)
  requestMetadata_trafficSource_trafficSourceId: string, Identifier to indicate where the traffic comes from.
An identifier has multiple letters created by a team which redirected the
traffic to us.
  updateMask: string, Standard field mask for the set of fields to be updated.
Required with at least 1 value in FieldMask's paths.
  requestMetadata_partnersSessionId: string, Google Partners session ID.

Returns:
  An object of the form:

    { # A company resource in the Google Partners API. Once certified, it qualifies
      # for being searched by advertisers.
    "companyTypes": [ # Company type labels listed on the company's profile.
      "A String",
    ],
    "originalMinMonthlyBudget": { # Represents an amount of money with its currency type. # The unconverted minimum monthly budget that the company accepts for partner
        # business.
      "nanos": 42, # Number of nano (10^-9) units of the amount.
          # The value must be between -999,999,999 and +999,999,999 inclusive.
          # If `units` is positive, `nanos` must be positive or zero.
          # If `units` is zero, `nanos` can be positive, zero, or negative.
          # If `units` is negative, `nanos` must be negative or zero.
          # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
      "units": "A String", # The whole units of the amount.
          # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
      "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
    },
    "autoApprovalEmailDomains": [ # Email domains that allow users with a matching email address to get
        # auto-approved for associating with this company.
      "A String",
    ],
    "specializationStatus": [ # The list of Google Partners specialization statuses for the company.
      { # Agency specialization status
        "badgeSpecialization": "A String", # The specialization this status is for.
        "badgeSpecializationState": "A String", # State of agency specialization.
      },
    ],
    "ranks": [ # Information related to the ranking of the company within the list of
        # companies.
      { # Information related to ranking of results.
        "type": "A String", # The type of rank.
        "value": 3.14, # The numerical value of the rank.
      },
    ],
    "primaryAdwordsManagerAccountId": "A String", # The Primary AdWords Manager Account id.
    "locations": [ # The list of all company locations.
        # If set, must include the
        # primary_location
        # in the list.
      { # A location with address and geographic coordinates. May optionally contain a
          # detailed (multi-field) version of the address.
        "languageCode": "A String", # Language code of the address. Should be in BCP 47 format.
        "addressLine": [ # The following address lines represent the most specific part of any
            # address.
          "A String",
        ],
        "dependentLocality": "A String", # Dependent locality or sublocality. Used for UK dependent localities, or
            # neighborhoods or boroughs in other locations.
        "sortingCode": "A String", # Use of this code is very country-specific, but will refer to a secondary
            # classification code for sorting mail.
        "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # The latitude and longitude of the location, in degrees.
            # of doubles representing degrees latitude and degrees longitude. Unless
            # specified otherwise, this must conform to the
            # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
            # standard</a>. Values must be within normalized ranges.
            #
            # Example of normalization code in Python:
            #
            #     def NormalizeLongitude(longitude):
            #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
            #       q, r = divmod(longitude, 360.0)
            #       if r > 180.0 or (r == 180.0 and q <= -1.0):
            #         return r - 360.0
            #       return r
            #
            #     def NormalizeLatLng(latitude, longitude):
            #       """Wraps decimal degrees latitude and longitude to
            #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
            #       r = latitude % 360.0
            #       if r <= 90.0:
            #         return r, NormalizeLongitude(longitude)
            #       elif r >= 270.0:
            #         return r - 360, NormalizeLongitude(longitude)
            #       else:
            #         return 180 - r, NormalizeLongitude(longitude + 180.0)
            #
            #     assert 180.0 == NormalizeLongitude(180.0)
            #     assert -180.0 == NormalizeLongitude(-180.0)
            #     assert -179.0 == NormalizeLongitude(181.0)
            #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
            #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
            #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
            #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
            #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
            #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
            #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
            #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
            #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
            #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
          "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
        "locality": "A String", # Generally refers to the city/town portion of an address.
        "regionCode": "A String", # CLDR (Common Locale Data Repository) region code .
        "administrativeArea": "A String", # Top-level administrative subdivision of this country.
        "address": "A String", # The single string version of the address.
        "postalCode": "A String", # Values are frequently alphanumeric.
      },
    ],
    "id": "A String", # The ID of the company.
    "badgeTier": "A String", # Partner badge tier
    "services": [ # Services the company can help with.
      "A String",
    ],
    "additionalWebsites": [ # URL of the company's additional websites used to verify the dynamic badges.
        # These are stored as full URLs as entered by the user, but only the TLD will
        # be used for the actual verification.
      "A String",
    ],
    "profileStatus": "A String", # The public viewability status of the company's profile.
    "industries": [ # Industries the company can help with.
      "A String",
    ],
    "primaryLocation": { # A location with address and geographic coordinates. May optionally contain a # The primary location of the company.
        # detailed (multi-field) version of the address.
      "languageCode": "A String", # Language code of the address. Should be in BCP 47 format.
      "addressLine": [ # The following address lines represent the most specific part of any
          # address.
        "A String",
      ],
      "dependentLocality": "A String", # Dependent locality or sublocality. Used for UK dependent localities, or
          # neighborhoods or boroughs in other locations.
      "sortingCode": "A String", # Use of this code is very country-specific, but will refer to a secondary
          # classification code for sorting mail.
      "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # The latitude and longitude of the location, in degrees.
          # of doubles representing degrees latitude and degrees longitude. Unless
          # specified otherwise, this must conform to the
          # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
          # standard</a>. Values must be within normalized ranges.
          #
          # Example of normalization code in Python:
          #
          #     def NormalizeLongitude(longitude):
          #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
          #       q, r = divmod(longitude, 360.0)
          #       if r > 180.0 or (r == 180.0 and q <= -1.0):
          #         return r - 360.0
          #       return r
          #
          #     def NormalizeLatLng(latitude, longitude):
          #       """Wraps decimal degrees latitude and longitude to
          #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
          #       r = latitude % 360.0
          #       if r <= 90.0:
          #         return r, NormalizeLongitude(longitude)
          #       elif r >= 270.0:
          #         return r - 360, NormalizeLongitude(longitude)
          #       else:
          #         return 180 - r, NormalizeLongitude(longitude + 180.0)
          #
          #     assert 180.0 == NormalizeLongitude(180.0)
          #     assert -180.0 == NormalizeLongitude(-180.0)
          #     assert -179.0 == NormalizeLongitude(181.0)
          #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
          #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
          #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
          #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
          #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
          #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
          #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
          #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
          #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
          #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
        "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
      "locality": "A String", # Generally refers to the city/town portion of an address.
      "regionCode": "A String", # CLDR (Common Locale Data Repository) region code .
      "administrativeArea": "A String", # Top-level administrative subdivision of this country.
      "address": "A String", # The single string version of the address.
      "postalCode": "A String", # Values are frequently alphanumeric.
    },
    "websiteUrl": "A String", # URL of the company's website.
    "certificationStatuses": [ # The list of Google Partners certification statuses for the company.
      { # Google Partners certification status.
        "isCertified": True or False, # Whether certification is passing.
        "userCount": 42, # Number of people who are certified,
        "type": "A String", # The type of the certification.
        "examStatuses": [ # List of certification exam statuses.
          { # Status for a Google Partners certification exam.
            "numberUsersPass": 42, # The number of people who have passed the certification exam.
            "type": "A String", # The type of certification exam.
          },
        ],
      },
    ],
    "publicProfile": { # Basic information from a public profile. # Basic information from the company's public profile.
      "url": "A String", # The URL of the public profile.
      "profileImage": "A String", # The URL to the main profile image of the public profile.
      "displayImageUrl": "A String", # The URL to the main display image of the public profile. Being deprecated.
      "displayName": "A String", # The display name of the public profile.
      "id": "A String", # The ID which can be used to retrieve more details about the public profile.
    },
    "localizedInfos": [ # The list of localized info for the company.
      { # The localized company information.
        "countryCodes": [ # List of country codes for the localized company info.
          "A String",
        ],
        "languageCode": "A String", # Language code of the localized company info, as defined by
            # <a href="https://tools.ietf.org/html/bcp47">BCP 47</a>
            # (IETF BCP 47, "Tags for Identifying Languages").
        "displayName": "A String", # Localized display name.
        "overview": "A String", # Localized brief description that the company uses to advertise themselves.
      },
    ],
    "convertedMinMonthlyBudget": { # Represents an amount of money with its currency type. # The minimum monthly budget that the company accepts for partner business,
        # converted to the requested currency code.
      "nanos": 42, # Number of nano (10^-9) units of the amount.
          # The value must be between -999,999,999 and +999,999,999 inclusive.
          # If `units` is positive, `nanos` must be positive or zero.
          # If `units` is zero, `nanos` can be positive, zero, or negative.
          # If `units` is negative, `nanos` must be negative or zero.
          # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
      "units": "A String", # The whole units of the amount.
          # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
      "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
    },
    "primaryLanguageCode": "A String", # The primary language code of the company, as defined by
        # <a href="https://tools.ietf.org/html/bcp47">BCP 47</a>
        # (IETF BCP 47, "Tags for Identifying Languages").
    "name": "A String", # The name of the company.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateLeads">updateLeads(body, requestMetadata_userOverrides_ipAddress=None, requestMetadata_trafficSource_trafficSubId=None, requestMetadata_userOverrides_userId=None, x__xgafv=None, requestMetadata_locale=None, requestMetadata_experimentIds=None, requestMetadata_trafficSource_trafficSourceId=None, updateMask=None, requestMetadata_partnersSessionId=None)</code>
  <pre>Updates the specified lead.

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

{ # A lead resource that represents an advertiser contact for a `Company`. These
    # are usually generated via Google Partner Search (the advertiser portal).
  "marketingOptIn": True or False, # Whether or not the lead signed up for marketing emails
  "languageCode": "A String", # Language code of the lead's language preference, as defined by
      # <a href="https://tools.ietf.org/html/bcp47">BCP 47</a>
      # (IETF BCP 47, "Tags for Identifying Languages").
  "type": "A String", # Type of lead.
  "familyName": "A String", # Last name of lead source.
  "minMonthlyBudget": { # Represents an amount of money with its currency type. # The minimum monthly budget lead source is willing to spend.
    "nanos": 42, # Number of nano (10^-9) units of the amount.
        # The value must be between -999,999,999 and +999,999,999 inclusive.
        # If `units` is positive, `nanos` must be positive or zero.
        # If `units` is zero, `nanos` can be positive, zero, or negative.
        # If `units` is negative, `nanos` must be negative or zero.
        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
    "units": "A String", # The whole units of the amount.
        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
  },
  "comments": "A String", # Comments lead source gave.
  "createTime": "A String", # Timestamp of when this lead was created.
  "websiteUrl": "A String", # Website URL of lead source.
  "email": "A String", # Email address of lead source.
  "state": "A String", # The lead's state in relation to the company.
  "phoneNumber": "A String", # Phone number of lead source.
  "gpsMotivations": [ # List of reasons for using Google Partner Search and creating a lead.
    "A String",
  ],
  "givenName": "A String", # First name of lead source.
  "adwordsCustomerId": "A String", # The AdWords Customer ID of the lead.
  "id": "A String", # ID of the lead.
}

  requestMetadata_userOverrides_ipAddress: string, IP address to use instead of the user's geo-located IP address.
  requestMetadata_trafficSource_trafficSubId: string, Second level identifier to indicate where the traffic comes from.
An identifier has multiple letters created by a team which redirected the
traffic to us.
  requestMetadata_userOverrides_userId: string, Logged-in user ID to impersonate instead of the user's ID.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  requestMetadata_locale: string, Locale to use for the current request.
  requestMetadata_experimentIds: string, Experiment IDs the current request belongs to. (repeated)
  requestMetadata_trafficSource_trafficSourceId: string, Identifier to indicate where the traffic comes from.
An identifier has multiple letters created by a team which redirected the
traffic to us.
  updateMask: string, Standard field mask for the set of fields to be updated.
Required with at least 1 value in FieldMask's paths.
Only `state` and `adwords_customer_id` are currently supported.
  requestMetadata_partnersSessionId: string, Google Partners session ID.

Returns:
  An object of the form:

    { # A lead resource that represents an advertiser contact for a `Company`. These
      # are usually generated via Google Partner Search (the advertiser portal).
    "marketingOptIn": True or False, # Whether or not the lead signed up for marketing emails
    "languageCode": "A String", # Language code of the lead's language preference, as defined by
        # <a href="https://tools.ietf.org/html/bcp47">BCP 47</a>
        # (IETF BCP 47, "Tags for Identifying Languages").
    "type": "A String", # Type of lead.
    "familyName": "A String", # Last name of lead source.
    "minMonthlyBudget": { # Represents an amount of money with its currency type. # The minimum monthly budget lead source is willing to spend.
      "nanos": 42, # Number of nano (10^-9) units of the amount.
          # The value must be between -999,999,999 and +999,999,999 inclusive.
          # If `units` is positive, `nanos` must be positive or zero.
          # If `units` is zero, `nanos` can be positive, zero, or negative.
          # If `units` is negative, `nanos` must be negative or zero.
          # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
      "units": "A String", # The whole units of the amount.
          # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
      "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
    },
    "comments": "A String", # Comments lead source gave.
    "createTime": "A String", # Timestamp of when this lead was created.
    "websiteUrl": "A String", # Website URL of lead source.
    "email": "A String", # Email address of lead source.
    "state": "A String", # The lead's state in relation to the company.
    "phoneNumber": "A String", # Phone number of lead source.
    "gpsMotivations": [ # List of reasons for using Google Partner Search and creating a lead.
      "A String",
    ],
    "givenName": "A String", # First name of lead source.
    "adwordsCustomerId": "A String", # The AdWords Customer ID of the lead.
    "id": "A String", # ID of the lead.
  }</pre>
</div>

</body></html>