<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="content_v2.html">Content API for Shopping</a> . <a href="content_v2.liasettings.html">liasettings</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#custombatch">custombatch(body=None, dryRun=None)</a></code></p>
<p class="firstline">Retrieves and/or updates the LIA settings of multiple accounts in a single request.</p>
<p class="toc_element">
  <code><a href="#get">get(merchantId, accountId)</a></code></p>
<p class="firstline">Retrieves the LIA settings of the account.</p>
<p class="toc_element">
  <code><a href="#getaccessiblegmbaccounts">getaccessiblegmbaccounts(merchantId, accountId)</a></code></p>
<p class="firstline">Retrieves the list of accessible Google My Business accounts.</p>
<p class="toc_element">
  <code><a href="#list">list(merchantId, maxResults=None, pageToken=None)</a></code></p>
<p class="firstline">Lists the LIA settings of the sub-accounts in your Merchant Center account.</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>
<p class="toc_element">
  <code><a href="#listposdataproviders">listposdataproviders()</a></code></p>
<p class="firstline">Retrieves the list of POS data providers that have active settings for the all eiligible countries.</p>
<p class="toc_element">
  <code><a href="#requestgmbaccess">requestgmbaccess(merchantId, accountId, gmbEmail)</a></code></p>
<p class="firstline">Requests access to a specified Google My Business account.</p>
<p class="toc_element">
  <code><a href="#requestinventoryverification">requestinventoryverification(merchantId, accountId, country)</a></code></p>
<p class="firstline">Requests inventory validation for the specified country.</p>
<p class="toc_element">
  <code><a href="#setinventoryverificationcontact">setinventoryverificationcontact(merchantId, accountId, contactEmail, contactName, country, language)</a></code></p>
<p class="firstline">Sets the inventory verification contract for the specified country.</p>
<p class="toc_element">
  <code><a href="#setposdataprovider">setposdataprovider(merchantId, accountId, country, posDataProviderId=None, posExternalAccountId=None)</a></code></p>
<p class="firstline">Sets the POS data provider for the specified country.</p>
<p class="toc_element">
  <code><a href="#update">update(merchantId, accountId, body=None, dryRun=None)</a></code></p>
<p class="firstline">Updates the LIA settings of the account. Any fields that are not provided are deleted from the resource.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="custombatch">custombatch(body=None, dryRun=None)</code>
  <pre>Retrieves and/or updates the LIA settings of multiple accounts in a single request.

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

{
    &quot;entries&quot;: [ # The request entries to be processed in the batch.
      {
        &quot;accountId&quot;: &quot;A String&quot;, # The ID of the account for which to get/update account LIA settings.
        &quot;batchId&quot;: 42, # An entry ID, unique within the batch request.
        &quot;contactEmail&quot;: &quot;A String&quot;, # Inventory validation contact email. Required only for SetInventoryValidationContact.
        &quot;contactName&quot;: &quot;A String&quot;, # Inventory validation contact name. Required only for SetInventoryValidationContact.
        &quot;country&quot;: &quot;A String&quot;, # The country code. Required only for RequestInventoryVerification.
        &quot;gmbEmail&quot;: &quot;A String&quot;, # The GMB account. Required only for RequestGmbAccess.
        &quot;liaSettings&quot;: { # Local Inventory ads (LIA) settings. All methods except listposdataproviders require the admin role. # The account Lia settings to update. Only defined if the method is `update`.
          &quot;accountId&quot;: &quot;A String&quot;, # The ID of the account to which these LIA settings belong. Ignored upon update, always present in get request responses.
          &quot;countrySettings&quot;: [ # The LIA settings for each country.
            {
              &quot;about&quot;: { # The settings for the About page.
                &quot;status&quot;: &quot;A String&quot;, # The status of the verification process for the About page.
                    #
                    # Acceptable values are:
                    # - &quot;`active`&quot;
                    # - &quot;`inactive`&quot;
                    # - &quot;`pending`&quot;
                &quot;url&quot;: &quot;A String&quot;, # The URL for the About page.
              },
              &quot;country&quot;: &quot;A String&quot;, # Required. CLDR country code (e.g. &quot;US&quot;).
              &quot;hostedLocalStorefrontActive&quot;: True or False, # The status of the &quot;Merchant hosted local storefront&quot; feature.
              &quot;inventory&quot;: { # LIA inventory verification settings.
                &quot;inventoryVerificationContactEmail&quot;: &quot;A String&quot;, # The email of the contact for the inventory verification process.
                &quot;inventoryVerificationContactName&quot;: &quot;A String&quot;, # The name of the contact for the inventory verification process.
                &quot;inventoryVerificationContactStatus&quot;: &quot;A String&quot;, # The status of the verification contact.
                    #
                    # Acceptable values are:
                    # - &quot;`active`&quot;
                    # - &quot;`inactive`&quot;
                    # - &quot;`pending`&quot;
                &quot;status&quot;: &quot;A String&quot;, # The status of the inventory verification process.
                    #
                    # Acceptable values are:
                    # - &quot;`active`&quot;
                    # - &quot;`inactive`&quot;
                    # - &quot;`pending`&quot;
              },
              &quot;onDisplayToOrder&quot;: { # LIA &quot;On Display To Order&quot; settings.
                &quot;shippingCostPolicyUrl&quot;: &quot;A String&quot;, # Shipping cost and policy URL.
                &quot;status&quot;: &quot;A String&quot;, # The status of the ?On display to order? feature.
                    #
                    # Acceptable values are:
                    # - &quot;`active`&quot;
                    # - &quot;`inactive`&quot;
                    # - &quot;`pending`&quot;
              },
              &quot;posDataProvider&quot;: { # The POS data provider linked with this country.
                &quot;posDataProviderId&quot;: &quot;A String&quot;, # The ID of the POS data provider.
                &quot;posExternalAccountId&quot;: &quot;A String&quot;, # The account ID by which this merchant is known to the POS data provider.
              },
              &quot;storePickupActive&quot;: True or False, # The status of the &quot;Store pickup&quot; feature.
            },
          ],
          &quot;kind&quot;: &quot;content#liaSettings&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#liaSettings`&quot;
        },
        &quot;merchantId&quot;: &quot;A String&quot;, # The ID of the managing account.
        &quot;method&quot;: &quot;A String&quot;, # The method of the batch entry.
            #
            # Acceptable values are:
            # - &quot;`get`&quot;
            # - &quot;`getAccessibleGmbAccounts`&quot;
            # - &quot;`requestGmbAccess`&quot;
            # - &quot;`requestInventoryVerification`&quot;
            # - &quot;`setInventoryVerificationContact`&quot;
            # - &quot;`update`&quot;
        &quot;posDataProviderId&quot;: &quot;A String&quot;, # The ID of POS data provider. Required only for SetPosProvider.
        &quot;posExternalAccountId&quot;: &quot;A String&quot;, # The account ID by which this merchant is known to the POS provider.
      },
    ],
  }

  dryRun: boolean, Flag to simulate a request like in a live environment. If set to true, dry-run mode checks the validity of the request and returns errors (if any).

Returns:
  An object of the form:

    {
    &quot;entries&quot;: [ # The result of the execution of the batch requests.
      {
        &quot;batchId&quot;: 42, # The ID of the request entry to which this entry responds.
        &quot;errors&quot;: { # A list of errors returned by a failed batch entry. # A list of errors defined if, and only if, the request failed.
          &quot;code&quot;: 42, # The HTTP status of the first error in `errors`.
          &quot;errors&quot;: [ # A list of errors.
            { # An error returned by the API.
              &quot;domain&quot;: &quot;A String&quot;, # The domain of the error.
              &quot;message&quot;: &quot;A String&quot;, # A description of the error.
              &quot;reason&quot;: &quot;A String&quot;, # The error code.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # The message of the first error in `errors`.
        },
        &quot;gmbAccounts&quot;: { # The the list of accessible GMB accounts.
          &quot;accountId&quot;: &quot;A String&quot;, # The ID of the Merchant Center account.
          &quot;gmbAccounts&quot;: [ # A list of GMB accounts which are available to the merchant.
            {
              &quot;email&quot;: &quot;A String&quot;, # The email which identifies the GMB account.
              &quot;listingCount&quot;: &quot;A String&quot;, # Number of listings under this account.
              &quot;name&quot;: &quot;A String&quot;, # The name of the GMB account.
              &quot;type&quot;: &quot;A String&quot;, # The type of the GMB account (User or Business).
            },
          ],
        },
        &quot;kind&quot;: &quot;content#liasettingsCustomBatchResponseEntry&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#liasettingsCustomBatchResponseEntry`&quot;
        &quot;liaSettings&quot;: { # Local Inventory ads (LIA) settings. All methods except listposdataproviders require the admin role. # The retrieved or updated Lia settings.
          &quot;accountId&quot;: &quot;A String&quot;, # The ID of the account to which these LIA settings belong. Ignored upon update, always present in get request responses.
          &quot;countrySettings&quot;: [ # The LIA settings for each country.
            {
              &quot;about&quot;: { # The settings for the About page.
                &quot;status&quot;: &quot;A String&quot;, # The status of the verification process for the About page.
                    #
                    # Acceptable values are:
                    # - &quot;`active`&quot;
                    # - &quot;`inactive`&quot;
                    # - &quot;`pending`&quot;
                &quot;url&quot;: &quot;A String&quot;, # The URL for the About page.
              },
              &quot;country&quot;: &quot;A String&quot;, # Required. CLDR country code (e.g. &quot;US&quot;).
              &quot;hostedLocalStorefrontActive&quot;: True or False, # The status of the &quot;Merchant hosted local storefront&quot; feature.
              &quot;inventory&quot;: { # LIA inventory verification settings.
                &quot;inventoryVerificationContactEmail&quot;: &quot;A String&quot;, # The email of the contact for the inventory verification process.
                &quot;inventoryVerificationContactName&quot;: &quot;A String&quot;, # The name of the contact for the inventory verification process.
                &quot;inventoryVerificationContactStatus&quot;: &quot;A String&quot;, # The status of the verification contact.
                    #
                    # Acceptable values are:
                    # - &quot;`active`&quot;
                    # - &quot;`inactive`&quot;
                    # - &quot;`pending`&quot;
                &quot;status&quot;: &quot;A String&quot;, # The status of the inventory verification process.
                    #
                    # Acceptable values are:
                    # - &quot;`active`&quot;
                    # - &quot;`inactive`&quot;
                    # - &quot;`pending`&quot;
              },
              &quot;onDisplayToOrder&quot;: { # LIA &quot;On Display To Order&quot; settings.
                &quot;shippingCostPolicyUrl&quot;: &quot;A String&quot;, # Shipping cost and policy URL.
                &quot;status&quot;: &quot;A String&quot;, # The status of the ?On display to order? feature.
                    #
                    # Acceptable values are:
                    # - &quot;`active`&quot;
                    # - &quot;`inactive`&quot;
                    # - &quot;`pending`&quot;
              },
              &quot;posDataProvider&quot;: { # The POS data provider linked with this country.
                &quot;posDataProviderId&quot;: &quot;A String&quot;, # The ID of the POS data provider.
                &quot;posExternalAccountId&quot;: &quot;A String&quot;, # The account ID by which this merchant is known to the POS data provider.
              },
              &quot;storePickupActive&quot;: True or False, # The status of the &quot;Store pickup&quot; feature.
            },
          ],
          &quot;kind&quot;: &quot;content#liaSettings&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#liaSettings`&quot;
        },
        &quot;posDataProviders&quot;: [ # The list of POS data providers.
          {
            &quot;country&quot;: &quot;A String&quot;, # Country code.
            &quot;posDataProviders&quot;: [ # A list of POS data providers.
              {
                &quot;displayName&quot;: &quot;A String&quot;, # The display name of Pos data Provider.
                &quot;fullName&quot;: &quot;A String&quot;, # The full name of this POS data Provider.
                &quot;providerId&quot;: &quot;A String&quot;, # The ID of the account.
              },
            ],
          },
        ],
      },
    ],
    &quot;kind&quot;: &quot;content#liasettingsCustomBatchResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#liasettingsCustomBatchResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(merchantId, accountId)</code>
  <pre>Retrieves the LIA settings of the account.

Args:
  merchantId: string, The ID of the managing account. If this parameter is not the same as accountId, then this account must be a multi-client account and `accountId` must be the ID of a sub-account of this account. (required)
  accountId: string, The ID of the account for which to get or update LIA settings. (required)

Returns:
  An object of the form:

    { # Local Inventory ads (LIA) settings. All methods except listposdataproviders require the admin role.
    &quot;accountId&quot;: &quot;A String&quot;, # The ID of the account to which these LIA settings belong. Ignored upon update, always present in get request responses.
    &quot;countrySettings&quot;: [ # The LIA settings for each country.
      {
        &quot;about&quot;: { # The settings for the About page.
          &quot;status&quot;: &quot;A String&quot;, # The status of the verification process for the About page.
              #
              # Acceptable values are:
              # - &quot;`active`&quot;
              # - &quot;`inactive`&quot;
              # - &quot;`pending`&quot;
          &quot;url&quot;: &quot;A String&quot;, # The URL for the About page.
        },
        &quot;country&quot;: &quot;A String&quot;, # Required. CLDR country code (e.g. &quot;US&quot;).
        &quot;hostedLocalStorefrontActive&quot;: True or False, # The status of the &quot;Merchant hosted local storefront&quot; feature.
        &quot;inventory&quot;: { # LIA inventory verification settings.
          &quot;inventoryVerificationContactEmail&quot;: &quot;A String&quot;, # The email of the contact for the inventory verification process.
          &quot;inventoryVerificationContactName&quot;: &quot;A String&quot;, # The name of the contact for the inventory verification process.
          &quot;inventoryVerificationContactStatus&quot;: &quot;A String&quot;, # The status of the verification contact.
              #
              # Acceptable values are:
              # - &quot;`active`&quot;
              # - &quot;`inactive`&quot;
              # - &quot;`pending`&quot;
          &quot;status&quot;: &quot;A String&quot;, # The status of the inventory verification process.
              #
              # Acceptable values are:
              # - &quot;`active`&quot;
              # - &quot;`inactive`&quot;
              # - &quot;`pending`&quot;
        },
        &quot;onDisplayToOrder&quot;: { # LIA &quot;On Display To Order&quot; settings.
          &quot;shippingCostPolicyUrl&quot;: &quot;A String&quot;, # Shipping cost and policy URL.
          &quot;status&quot;: &quot;A String&quot;, # The status of the ?On display to order? feature.
              #
              # Acceptable values are:
              # - &quot;`active`&quot;
              # - &quot;`inactive`&quot;
              # - &quot;`pending`&quot;
        },
        &quot;posDataProvider&quot;: { # The POS data provider linked with this country.
          &quot;posDataProviderId&quot;: &quot;A String&quot;, # The ID of the POS data provider.
          &quot;posExternalAccountId&quot;: &quot;A String&quot;, # The account ID by which this merchant is known to the POS data provider.
        },
        &quot;storePickupActive&quot;: True or False, # The status of the &quot;Store pickup&quot; feature.
      },
    ],
    &quot;kind&quot;: &quot;content#liaSettings&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#liaSettings`&quot;
  }</pre>
</div>

<div class="method">
    <code class="details" id="getaccessiblegmbaccounts">getaccessiblegmbaccounts(merchantId, accountId)</code>
  <pre>Retrieves the list of accessible Google My Business accounts.

Args:
  merchantId: string, The ID of the managing account. If this parameter is not the same as accountId, then this account must be a multi-client account and `accountId` must be the ID of a sub-account of this account. (required)
  accountId: string, The ID of the account for which to retrieve accessible Google My Business accounts. (required)

Returns:
  An object of the form:

    {
    &quot;accountId&quot;: &quot;A String&quot;, # The ID of the Merchant Center account.
    &quot;gmbAccounts&quot;: [ # A list of GMB accounts which are available to the merchant.
      {
        &quot;email&quot;: &quot;A String&quot;, # The email which identifies the GMB account.
        &quot;listingCount&quot;: &quot;A String&quot;, # Number of listings under this account.
        &quot;name&quot;: &quot;A String&quot;, # The name of the GMB account.
        &quot;type&quot;: &quot;A String&quot;, # The type of the GMB account (User or Business).
      },
    ],
    &quot;kind&quot;: &quot;content#liasettingsGetAccessibleGmbAccountsResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#liasettingsGetAccessibleGmbAccountsResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(merchantId, maxResults=None, pageToken=None)</code>
  <pre>Lists the LIA settings of the sub-accounts in your Merchant Center account.

Args:
  merchantId: string, The ID of the managing account. This must be a multi-client account. (required)
  maxResults: integer, The maximum number of LIA settings to return in the response, used for paging.
  pageToken: string, The token returned by the previous request.

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#liasettingsListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#liasettingsListResponse&quot;.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The token for the retrieval of the next page of LIA settings.
    &quot;resources&quot;: [
      { # Local Inventory ads (LIA) settings. All methods except listposdataproviders require the admin role.
        &quot;accountId&quot;: &quot;A String&quot;, # The ID of the account to which these LIA settings belong. Ignored upon update, always present in get request responses.
        &quot;countrySettings&quot;: [ # The LIA settings for each country.
          {
            &quot;about&quot;: { # The settings for the About page.
              &quot;status&quot;: &quot;A String&quot;, # The status of the verification process for the About page.
                  #
                  # Acceptable values are:
                  # - &quot;`active`&quot;
                  # - &quot;`inactive`&quot;
                  # - &quot;`pending`&quot;
              &quot;url&quot;: &quot;A String&quot;, # The URL for the About page.
            },
            &quot;country&quot;: &quot;A String&quot;, # Required. CLDR country code (e.g. &quot;US&quot;).
            &quot;hostedLocalStorefrontActive&quot;: True or False, # The status of the &quot;Merchant hosted local storefront&quot; feature.
            &quot;inventory&quot;: { # LIA inventory verification settings.
              &quot;inventoryVerificationContactEmail&quot;: &quot;A String&quot;, # The email of the contact for the inventory verification process.
              &quot;inventoryVerificationContactName&quot;: &quot;A String&quot;, # The name of the contact for the inventory verification process.
              &quot;inventoryVerificationContactStatus&quot;: &quot;A String&quot;, # The status of the verification contact.
                  #
                  # Acceptable values are:
                  # - &quot;`active`&quot;
                  # - &quot;`inactive`&quot;
                  # - &quot;`pending`&quot;
              &quot;status&quot;: &quot;A String&quot;, # The status of the inventory verification process.
                  #
                  # Acceptable values are:
                  # - &quot;`active`&quot;
                  # - &quot;`inactive`&quot;
                  # - &quot;`pending`&quot;
            },
            &quot;onDisplayToOrder&quot;: { # LIA &quot;On Display To Order&quot; settings.
              &quot;shippingCostPolicyUrl&quot;: &quot;A String&quot;, # Shipping cost and policy URL.
              &quot;status&quot;: &quot;A String&quot;, # The status of the ?On display to order? feature.
                  #
                  # Acceptable values are:
                  # - &quot;`active`&quot;
                  # - &quot;`inactive`&quot;
                  # - &quot;`pending`&quot;
            },
            &quot;posDataProvider&quot;: { # The POS data provider linked with this country.
              &quot;posDataProviderId&quot;: &quot;A String&quot;, # The ID of the POS data provider.
              &quot;posExternalAccountId&quot;: &quot;A String&quot;, # The account ID by which this merchant is known to the POS data provider.
            },
            &quot;storePickupActive&quot;: True or False, # The status of the &quot;Store pickup&quot; feature.
          },
        ],
        &quot;kind&quot;: &quot;content#liaSettings&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#liaSettings`&quot;
      },
    ],
  }</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>

<div class="method">
    <code class="details" id="listposdataproviders">listposdataproviders()</code>
  <pre>Retrieves the list of POS data providers that have active settings for the all eiligible countries.

Args:

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#liasettingsListPosDataProvidersResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#liasettingsListPosDataProvidersResponse&quot;.
    &quot;posDataProviders&quot;: [ # The list of POS data providers for each eligible country
      {
        &quot;country&quot;: &quot;A String&quot;, # Country code.
        &quot;posDataProviders&quot;: [ # A list of POS data providers.
          {
            &quot;displayName&quot;: &quot;A String&quot;, # The display name of Pos data Provider.
            &quot;fullName&quot;: &quot;A String&quot;, # The full name of this POS data Provider.
            &quot;providerId&quot;: &quot;A String&quot;, # The ID of the account.
          },
        ],
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="requestgmbaccess">requestgmbaccess(merchantId, accountId, gmbEmail)</code>
  <pre>Requests access to a specified Google My Business account.

Args:
  merchantId: string, The ID of the managing account. If this parameter is not the same as accountId, then this account must be a multi-client account and `accountId` must be the ID of a sub-account of this account. (required)
  accountId: string, The ID of the account for which GMB access is requested. (required)
  gmbEmail: string, The email of the Google My Business account. (required)

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#liasettingsRequestGmbAccessResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#liasettingsRequestGmbAccessResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="requestinventoryverification">requestinventoryverification(merchantId, accountId, country)</code>
  <pre>Requests inventory validation for the specified country.

Args:
  merchantId: string, The ID of the managing account. If this parameter is not the same as accountId, then this account must be a multi-client account and `accountId` must be the ID of a sub-account of this account. (required)
  accountId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  country: string, The country for which inventory validation is requested. (required)

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#liasettingsRequestInventoryVerificationResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#liasettingsRequestInventoryVerificationResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="setinventoryverificationcontact">setinventoryverificationcontact(merchantId, accountId, contactEmail, contactName, country, language)</code>
  <pre>Sets the inventory verification contract for the specified country.

Args:
  merchantId: string, The ID of the managing account. If this parameter is not the same as accountId, then this account must be a multi-client account and `accountId` must be the ID of a sub-account of this account. (required)
  accountId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  contactEmail: string, The email of the inventory verification contact. (required)
  contactName: string, The name of the inventory verification contact. (required)
  country: string, The country for which inventory verification is requested. (required)
  language: string, The language for which inventory verification is requested. (required)

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#liasettingsSetInventoryVerificationContactResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#liasettingsSetInventoryVerificationContactResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="setposdataprovider">setposdataprovider(merchantId, accountId, country, posDataProviderId=None, posExternalAccountId=None)</code>
  <pre>Sets the POS data provider for the specified country.

Args:
  merchantId: string, The ID of the managing account. If this parameter is not the same as accountId, then this account must be a multi-client account and `accountId` must be the ID of a sub-account of this account. (required)
  accountId: string, The ID of the account for which to retrieve accessible Google My Business accounts. (required)
  country: string, The country for which the POS data provider is selected. (required)
  posDataProviderId: string, The ID of POS data provider.
  posExternalAccountId: string, The account ID by which this merchant is known to the POS data provider.

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#liasettingsSetPosDataProviderResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#liasettingsSetPosDataProviderResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(merchantId, accountId, body=None, dryRun=None)</code>
  <pre>Updates the LIA settings of the account. Any fields that are not provided are deleted from the resource.

Args:
  merchantId: string, The ID of the managing account. If this parameter is not the same as accountId, then this account must be a multi-client account and `accountId` must be the ID of a sub-account of this account. (required)
  accountId: string, The ID of the account for which to get or update LIA settings. (required)
  body: object, The request body.
    The object takes the form of:

{ # Local Inventory ads (LIA) settings. All methods except listposdataproviders require the admin role.
  &quot;accountId&quot;: &quot;A String&quot;, # The ID of the account to which these LIA settings belong. Ignored upon update, always present in get request responses.
  &quot;countrySettings&quot;: [ # The LIA settings for each country.
    {
      &quot;about&quot;: { # The settings for the About page.
        &quot;status&quot;: &quot;A String&quot;, # The status of the verification process for the About page.
            #
            # Acceptable values are:
            # - &quot;`active`&quot;
            # - &quot;`inactive`&quot;
            # - &quot;`pending`&quot;
        &quot;url&quot;: &quot;A String&quot;, # The URL for the About page.
      },
      &quot;country&quot;: &quot;A String&quot;, # Required. CLDR country code (e.g. &quot;US&quot;).
      &quot;hostedLocalStorefrontActive&quot;: True or False, # The status of the &quot;Merchant hosted local storefront&quot; feature.
      &quot;inventory&quot;: { # LIA inventory verification settings.
        &quot;inventoryVerificationContactEmail&quot;: &quot;A String&quot;, # The email of the contact for the inventory verification process.
        &quot;inventoryVerificationContactName&quot;: &quot;A String&quot;, # The name of the contact for the inventory verification process.
        &quot;inventoryVerificationContactStatus&quot;: &quot;A String&quot;, # The status of the verification contact.
            #
            # Acceptable values are:
            # - &quot;`active`&quot;
            # - &quot;`inactive`&quot;
            # - &quot;`pending`&quot;
        &quot;status&quot;: &quot;A String&quot;, # The status of the inventory verification process.
            #
            # Acceptable values are:
            # - &quot;`active`&quot;
            # - &quot;`inactive`&quot;
            # - &quot;`pending`&quot;
      },
      &quot;onDisplayToOrder&quot;: { # LIA &quot;On Display To Order&quot; settings.
        &quot;shippingCostPolicyUrl&quot;: &quot;A String&quot;, # Shipping cost and policy URL.
        &quot;status&quot;: &quot;A String&quot;, # The status of the ?On display to order? feature.
            #
            # Acceptable values are:
            # - &quot;`active`&quot;
            # - &quot;`inactive`&quot;
            # - &quot;`pending`&quot;
      },
      &quot;posDataProvider&quot;: { # The POS data provider linked with this country.
        &quot;posDataProviderId&quot;: &quot;A String&quot;, # The ID of the POS data provider.
        &quot;posExternalAccountId&quot;: &quot;A String&quot;, # The account ID by which this merchant is known to the POS data provider.
      },
      &quot;storePickupActive&quot;: True or False, # The status of the &quot;Store pickup&quot; feature.
    },
  ],
  &quot;kind&quot;: &quot;content#liaSettings&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#liaSettings`&quot;
}

  dryRun: boolean, Flag to simulate a request like in a live environment. If set to true, dry-run mode checks the validity of the request and returns errors (if any).

Returns:
  An object of the form:

    { # Local Inventory ads (LIA) settings. All methods except listposdataproviders require the admin role.
    &quot;accountId&quot;: &quot;A String&quot;, # The ID of the account to which these LIA settings belong. Ignored upon update, always present in get request responses.
    &quot;countrySettings&quot;: [ # The LIA settings for each country.
      {
        &quot;about&quot;: { # The settings for the About page.
          &quot;status&quot;: &quot;A String&quot;, # The status of the verification process for the About page.
              #
              # Acceptable values are:
              # - &quot;`active`&quot;
              # - &quot;`inactive`&quot;
              # - &quot;`pending`&quot;
          &quot;url&quot;: &quot;A String&quot;, # The URL for the About page.
        },
        &quot;country&quot;: &quot;A String&quot;, # Required. CLDR country code (e.g. &quot;US&quot;).
        &quot;hostedLocalStorefrontActive&quot;: True or False, # The status of the &quot;Merchant hosted local storefront&quot; feature.
        &quot;inventory&quot;: { # LIA inventory verification settings.
          &quot;inventoryVerificationContactEmail&quot;: &quot;A String&quot;, # The email of the contact for the inventory verification process.
          &quot;inventoryVerificationContactName&quot;: &quot;A String&quot;, # The name of the contact for the inventory verification process.
          &quot;inventoryVerificationContactStatus&quot;: &quot;A String&quot;, # The status of the verification contact.
              #
              # Acceptable values are:
              # - &quot;`active`&quot;
              # - &quot;`inactive`&quot;
              # - &quot;`pending`&quot;
          &quot;status&quot;: &quot;A String&quot;, # The status of the inventory verification process.
              #
              # Acceptable values are:
              # - &quot;`active`&quot;
              # - &quot;`inactive`&quot;
              # - &quot;`pending`&quot;
        },
        &quot;onDisplayToOrder&quot;: { # LIA &quot;On Display To Order&quot; settings.
          &quot;shippingCostPolicyUrl&quot;: &quot;A String&quot;, # Shipping cost and policy URL.
          &quot;status&quot;: &quot;A String&quot;, # The status of the ?On display to order? feature.
              #
              # Acceptable values are:
              # - &quot;`active`&quot;
              # - &quot;`inactive`&quot;
              # - &quot;`pending`&quot;
        },
        &quot;posDataProvider&quot;: { # The POS data provider linked with this country.
          &quot;posDataProviderId&quot;: &quot;A String&quot;, # The ID of the POS data provider.
          &quot;posExternalAccountId&quot;: &quot;A String&quot;, # The account ID by which this merchant is known to the POS data provider.
        },
        &quot;storePickupActive&quot;: True or False, # The status of the &quot;Store pickup&quot; feature.
      },
    ],
    &quot;kind&quot;: &quot;content#liaSettings&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#liaSettings`&quot;
  }</pre>
</div>

</body></html>