<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.orders.html">orders</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#acknowledge">acknowledge(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Marks an order as acknowledged.</p>
<p class="toc_element">
  <code><a href="#advancetestorder">advancetestorder(merchantId, orderId)</a></code></p>
<p class="firstline">Sandbox only. Moves a test order from state "`inProgress`" to state "`pendingShipment`".</p>
<p class="toc_element">
  <code><a href="#cancel">cancel(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Cancels all line items in an order, making a full refund.</p>
<p class="toc_element">
  <code><a href="#cancellineitem">cancellineitem(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Cancels a line item, making a full refund.</p>
<p class="toc_element">
  <code><a href="#canceltestorderbycustomer">canceltestorderbycustomer(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Sandbox only. Cancels a test order for customer-initiated cancellation.</p>
<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="#createtestorder">createtestorder(merchantId, body=None)</a></code></p>
<p class="firstline">Sandbox only. Creates a test order.</p>
<p class="toc_element">
  <code><a href="#createtestreturn">createtestreturn(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Sandbox only. Creates a test return.</p>
<p class="toc_element">
  <code><a href="#custombatch">custombatch(body=None)</a></code></p>
<p class="firstline">Retrieves or modifies multiple orders in a single request.</p>
<p class="toc_element">
  <code><a href="#get">get(merchantId, orderId)</a></code></p>
<p class="firstline">Retrieves an order from your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#getbymerchantorderid">getbymerchantorderid(merchantId, merchantOrderId)</a></code></p>
<p class="firstline">Retrieves an order using merchant order ID.</p>
<p class="toc_element">
  <code><a href="#gettestordertemplate">gettestordertemplate(merchantId, templateName, country=None)</a></code></p>
<p class="firstline">Sandbox only. Retrieves an order template that can be used to quickly create a new order in sandbox.</p>
<p class="toc_element">
  <code><a href="#instorerefundlineitem">instorerefundlineitem(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Deprecated. Notifies that item return and refund was handled directly by merchant outside of Google payments processing (e.g. cash refund done in store).</p>
<p class="toc_element">
  <code><a href="#list">list(merchantId, acknowledged=None, maxResults=None, orderBy=None, pageToken=None, placedDateEnd=None, placedDateStart=None, statuses=None)</a></code></p>
<p class="firstline">Lists the orders 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="#refund">refund(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Deprecated, please use returnRefundLineItem instead.</p>
<p class="toc_element">
  <code><a href="#rejectreturnlineitem">rejectreturnlineitem(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Rejects return on an line item.</p>
<p class="toc_element">
  <code><a href="#returnlineitem">returnlineitem(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Returns a line item.</p>
<p class="toc_element">
  <code><a href="#returnrefundlineitem">returnrefundlineitem(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Returns and refunds a line item. Note that this method can only be called on fully shipped orders. Please also note that the Orderreturns API is the preferred way to handle returns after you receive a return from a customer. You can use Orderreturns.list or Orderreturns.get to search for the return, and then use Orderreturns.processreturn to issue the refund. If the return cannot be found, then we recommend using this API to issue a refund.</p>
<p class="toc_element">
  <code><a href="#setlineitemmetadata">setlineitemmetadata(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Sets (or overrides if it already exists) merchant provided annotations in the form of key-value pairs. A common use case would be to supply us with additional structured information about a line item that cannot be provided via other methods. Submitted key-value pairs can be retrieved as part of the orders resource.</p>
<p class="toc_element">
  <code><a href="#shiplineitems">shiplineitems(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Marks line item(s) as shipped.</p>
<p class="toc_element">
  <code><a href="#updatelineitemshippingdetails">updatelineitemshippingdetails(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Updates ship by and delivery by dates for a line item.</p>
<p class="toc_element">
  <code><a href="#updatemerchantorderid">updatemerchantorderid(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Updates the merchant order ID for a given order.</p>
<p class="toc_element">
  <code><a href="#updateshipment">updateshipment(merchantId, orderId, body=None)</a></code></p>
<p class="firstline">Updates a shipment's status, carrier, and/or tracking ID.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="acknowledge">acknowledge(merchantId, orderId, body=None)</code>
  <pre>Marks an order as acknowledged.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersAcknowledgeResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersAcknowledgeResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="advancetestorder">advancetestorder(merchantId, orderId)</code>
  <pre>Sandbox only. Moves a test order from state &quot;`inProgress`&quot; to state &quot;`pendingShipment`&quot;.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the test order to modify. (required)

Returns:
  An object of the form:

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

<div class="method">
    <code class="details" id="cancel">cancel(merchantId, orderId, body=None)</code>
  <pre>Cancels all line items in an order, making a full refund.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order to cancel. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation.
        # 
        # Acceptable values are:
        # - &quot;`customerInitiatedCancel`&quot;
        # - &quot;`invalidCoupon`&quot;
        # - &quot;`malformedShippingAddress`&quot;
        # - &quot;`noInventory`&quot;
        # - &quot;`other`&quot;
        # - &quot;`priceError`&quot;
        # - &quot;`shippingPriceError`&quot;
        # - &quot;`taxError`&quot;
        # - &quot;`undeliverableShippingAddress`&quot;
        # - &quot;`unsupportedPoBoxAddress`&quot;
    &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersCancelResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersCancelResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="cancellineitem">cancellineitem(merchantId, orderId, body=None)</code>
  <pre>Cancels a line item, making a full refund.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;amount&quot;: { # Deprecated. Please use amountPretax and amountTax instead.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;amountPretax&quot;: { # Amount to refund for the cancelation. Optional. If not set, Google will calculate the default based on the price and tax of the items involved. The amount must not be larger than the net amount left on the order.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;amountTax&quot;: { # Tax amount that corresponds to cancellation amount in amountPretax. Optional, but if filled, then amountPretax must be set. Calculated automatically if not provided.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to cancel. Either lineItemId or productId is required.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to cancel. This is the REST ID used in the products service. Either lineItemId or productId is required.
    &quot;quantity&quot;: 42, # The quantity to cancel.
    &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation.
        # 
        # Acceptable values are:
        # - &quot;`customerInitiatedCancel`&quot;
        # - &quot;`invalidCoupon`&quot;
        # - &quot;`malformedShippingAddress`&quot;
        # - &quot;`noInventory`&quot;
        # - &quot;`other`&quot;
        # - &quot;`priceError`&quot;
        # - &quot;`shippingPriceError`&quot;
        # - &quot;`taxError`&quot;
        # - &quot;`undeliverableShippingAddress`&quot;
        # - &quot;`unsupportedPoBoxAddress`&quot;
    &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersCancelLineItemResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersCancelLineItemResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="canceltestorderbycustomer">canceltestorderbycustomer(merchantId, orderId, body=None)</code>
  <pre>Sandbox only. Cancels a test order for customer-initiated cancellation.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the test order to cancel. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation.
        # 
        # Acceptable values are:
        # - &quot;`changedMind`&quot;
        # - &quot;`orderedWrongItem`&quot;
        # - &quot;`other`&quot;
  }


Returns:
  An object of the form:

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

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="createtestorder">createtestorder(merchantId, body=None)</code>
  <pre>Sandbox only. Creates a test order.

Args:
  merchantId: string, The ID of the account that should manage the order. This cannot be a multi-client account. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;country&quot;: &quot;A String&quot;, # The  CLDR territory code of the country of the test order to create. Affects the currency and addresses of orders created via `template_name`, or the addresses of orders created via `test_order`.
        # 
        # Acceptable values are:
        # - &quot;`US`&quot;
        # - &quot;`FR`&quot;  Defaults to `US`.
    &quot;templateName&quot;: &quot;A String&quot;, # The test order template to use. Specify as an alternative to `testOrder` as a shortcut for retrieving a template and then creating an order using that template.
        # 
        # Acceptable values are:
        # - &quot;`template1`&quot;
        # - &quot;`template1a`&quot;
        # - &quot;`template1b`&quot;
        # - &quot;`template2`&quot;
        # - &quot;`template3`&quot;
    &quot;testOrder&quot;: { # The test order to create.
      &quot;customer&quot;: { # Required. The details of the customer who placed the order.
        &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the customer.
            #
            # Acceptable values are:
            # - &quot;`pog.dwight.schrute@gmail.com`&quot;
            # - &quot;`pog.jim.halpert@gmail.com`&quot;
            # - &quot;`penpog.pam.beesly@gmail.comding`&quot;
        &quot;explicitMarketingPreference&quot;: True or False, # Deprecated. Please use marketingRightsInfo instead.
        &quot;fullName&quot;: &quot;A String&quot;, # Full name of the customer.
        &quot;marketingRightsInfo&quot;: { # Customer&#x27;s marketing preferences.
          &quot;explicitMarketingPreference&quot;: &quot;A String&quot;, # Last know user use selection regards marketing preferences. In certain cases selection might not be known, so this field would be empty.
              #
              # Acceptable values are:
              # - &quot;`denied`&quot;
              # - &quot;`granted`&quot;
          &quot;lastUpdatedTimestamp&quot;: &quot;A String&quot;, # Timestamp when last time marketing preference was updated. Could be empty, if user wasn&#x27;t offered a selection yet.
        },
      },
      &quot;enableOrderinvoices&quot;: True or False, # Whether the orderinvoices service should support this order.
      &quot;kind&quot;: &quot;content#testOrder&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#testOrder`&quot;
      &quot;lineItems&quot;: [ # Required. Line items that are ordered. At least one line item must be provided.
        {
          &quot;product&quot;: { # Required. Product data from the time of the order placement.
            &quot;brand&quot;: &quot;A String&quot;, # Required. Brand of the item.
            &quot;channel&quot;: &quot;A String&quot;, # Deprecated.
                #
                # Acceptable values are:
                # - &quot;`online`&quot;
            &quot;condition&quot;: &quot;A String&quot;, # Required. Condition or state of the item.
                #
                # Acceptable values are:
                # - &quot;`new`&quot;
            &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
                #
                # Acceptable values are:
                # - &quot;`en`&quot;
                # - &quot;`fr`&quot;
            &quot;fees&quot;: [ # Fees for the item. Optional.
              {
                &quot;amount&quot;: { # Amount of the fee.
                  &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                  &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                },
                &quot;name&quot;: &quot;A String&quot;, # Name of the fee.
              },
            ],
            &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number (GTIN) of the item. Optional.
            &quot;imageLink&quot;: &quot;A String&quot;, # Required. URL of an image of the item.
            &quot;itemGroupId&quot;: &quot;A String&quot;, # Shared identifier for all variants of the same product. Optional.
            &quot;mpn&quot;: &quot;A String&quot;, # Manufacturer Part Number (MPN) of the item. Optional.
            &quot;offerId&quot;: &quot;A String&quot;, # Required. An identifier of the item.
            &quot;price&quot;: { # Required. The price for the product. Tax is automatically calculated for orders where marketplace facilitator tax laws are applicable. Otherwise, tax settings from Merchant Center are applied.
              &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
              &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
            },
            &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code of the target country of the product.
            &quot;title&quot;: &quot;A String&quot;, # Required. The title of the product.
            &quot;variantAttributes&quot;: [ # Variant attributes for the item. Optional.
              {
                &quot;dimension&quot;: &quot;A String&quot;, # The dimension of the variant.
                &quot;value&quot;: &quot;A String&quot;, # The value for the dimension.
              },
            ],
          },
          &quot;quantityOrdered&quot;: 42, # Required. Number of items ordered.
          &quot;returnInfo&quot;: { # Required. Details of the return policy for the line item.
            &quot;daysToReturn&quot;: 42, # Required. How many days later the item can be returned.
            &quot;isReturnable&quot;: True or False, # Required. Whether the item is returnable.
            &quot;policyUrl&quot;: &quot;A String&quot;, # Required. URL of the item return policy.
          },
          &quot;shippingDetails&quot;: { # Required. Details of the requested shipping for the line item.
            &quot;deliverByDate&quot;: &quot;A String&quot;, # Required. The delivery by date, in ISO 8601 format.
            &quot;method&quot;: { # Required. Details of the shipping method.
              &quot;carrier&quot;: &quot;A String&quot;, # The carrier for the shipping. Optional. See `shipments[].carrier` for a list of acceptable values.
              &quot;maxDaysInTransit&quot;: 42, # Required. Maximum transit time.
              &quot;methodName&quot;: &quot;A String&quot;, # Required. The name of the shipping method.
              &quot;minDaysInTransit&quot;: 42, # Required. Minimum transit time.
            },
            &quot;shipByDate&quot;: &quot;A String&quot;, # Required. The ship by date, in ISO 8601 format.
            &quot;type&quot;: &quot;A String&quot;, # Type of shipment. Indicates whether `deliveryDetails` or `pickupDetails` is applicable for this shipment.
                #
                # Acceptable values are:
                # - &quot;`delivery`&quot;
                # - &quot;`pickup`&quot;
          },
          &quot;unitTax&quot;: { # Deprecated. Ignored if provided.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
        },
      ],
      &quot;notificationMode&quot;: &quot;A String&quot;, # Restricted. Do not use.
      &quot;paymentMethod&quot;: { # The details of the payment method.
        &quot;expirationMonth&quot;: 42, # The card expiration month (January = 1, February = 2 etc.).
        &quot;expirationYear&quot;: 42, # The card expiration year (4-digit, e.g. 2015).
        &quot;lastFourDigits&quot;: &quot;A String&quot;, # The last four digits of the card number.
        &quot;predefinedBillingAddress&quot;: &quot;A String&quot;, # The billing address.
            #
            # Acceptable values are:
            # - &quot;`dwight`&quot;
            # - &quot;`jim`&quot;
            # - &quot;`pam`&quot;
        &quot;type&quot;: &quot;A String&quot;, # The type of instrument. Note that real orders might have different values than the four values accepted by `createTestOrder`.
            #
            # Acceptable values are:
            # - &quot;`AMEX`&quot;
            # - &quot;`DISCOVER`&quot;
            # - &quot;`MASTERCARD`&quot;
            # - &quot;`VISA`&quot;
      },
      &quot;predefinedDeliveryAddress&quot;: &quot;A String&quot;, # Required. Identifier of one of the predefined delivery addresses for the delivery.
          #
          # Acceptable values are:
          # - &quot;`dwight`&quot;
          # - &quot;`jim`&quot;
          # - &quot;`pam`&quot;
      &quot;predefinedPickupDetails&quot;: &quot;A String&quot;, # Identifier of one of the predefined pickup details. Required for orders containing line items with shipping type `pickup`.
          #
          # Acceptable values are:
          # - &quot;`dwight`&quot;
          # - &quot;`jim`&quot;
          # - &quot;`pam`&quot;
      &quot;promotions&quot;: [ # Deprecated. Ignored if provided.
        {
          &quot;benefits&quot;: [
            {
              &quot;discount&quot;: { # The discount in the order price when the promotion is applied.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;offerIds&quot;: [ # The OfferId(s) that were purchased in this order and map to this specific benefit of the promotion.
                &quot;A String&quot;,
              ],
              &quot;subType&quot;: &quot;A String&quot;, # Further describes the benefit of the promotion. Note that we will expand on this enumeration as we support new promotion sub-types.
                  #
                  # Acceptable values are:
                  # - &quot;`buyMGetMoneyOff`&quot;
                  # - &quot;`buyMGetNMoneyOff`&quot;
                  # - &quot;`buyMGetNPercentOff`&quot;
                  # - &quot;`buyMGetPercentOff`&quot;
                  # - &quot;`freeGift`&quot;
                  # - &quot;`freeGiftWithItemId`&quot;
                  # - &quot;`freeGiftWithValue`&quot;
                  # - &quot;`freeOvernightShipping`&quot;
                  # - &quot;`freeShipping`&quot;
                  # - &quot;`freeTwoDayShipping`&quot;
                  # - &quot;`moneyOff`&quot;
                  # - &quot;`percentageOff`&quot;
                  # - &quot;`rewardPoints`&quot;
                  # - &quot;`salePrice`&quot;
              &quot;taxImpact&quot;: { # The impact on tax when the promotion is applied.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;type&quot;: &quot;A String&quot;, # Describes whether the promotion applies to products (e.g. 20% off) or to shipping (e.g. Free Shipping).
                  #
                  # Acceptable values are:
                  # - &quot;`product`&quot;
                  # - &quot;`shipping`&quot;
            },
          ],
          &quot;effectiveDates&quot;: &quot;A String&quot;, # The date and time frame when the promotion is active and ready for validation review. Note that the promotion live time may be delayed for a few hours due to the validation review.
              # Start date and end date are separated by a forward slash (/). The start date is specified by the format (YYYY-MM-DD), followed by the letter ?T?, the time of the day when the sale starts (in Greenwich Mean Time, GMT), followed by an expression of the time zone for the sale. The end date is in the same format.
          &quot;genericRedemptionCode&quot;: &quot;A String&quot;, # Optional. The text code that corresponds to the promotion when applied on the retailer?s website.
          &quot;id&quot;: &quot;A String&quot;, # The unique ID of the promotion.
          &quot;longTitle&quot;: &quot;A String&quot;, # The full title of the promotion.
          &quot;productApplicability&quot;: &quot;A String&quot;, # Whether the promotion is applicable to all products or only specific products.
              #
              # Acceptable values are:
              # - &quot;`allProducts`&quot;
              # - &quot;`specificProducts`&quot;
          &quot;redemptionChannel&quot;: &quot;A String&quot;, # Indicates that the promotion is valid online.
              #
              # Acceptable values are:
              # - &quot;`online`&quot;
        },
      ],
      &quot;shippingCost&quot;: { # Required. The price of shipping for all items. Shipping tax is automatically calculated for orders where marketplace facilitator tax laws are applicable. Otherwise, tax settings from Merchant Center are applied. Note that shipping is not taxed in certain states.
        &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
        &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
      },
      &quot;shippingCostTax&quot;: { # Deprecated. Ignored if provided.
        &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
        &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
      },
      &quot;shippingOption&quot;: &quot;A String&quot;, # Required. The requested shipping option.
          #
          # Acceptable values are:
          # - &quot;`economy`&quot;
          # - &quot;`expedited`&quot;
          # - &quot;`oneDay`&quot;
          # - &quot;`sameDay`&quot;
          # - &quot;`standard`&quot;
          # - &quot;`twoDay`&quot;
    },
  }


Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#ordersCreateTestOrderResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersCreateTestOrderResponse&quot;.
    &quot;orderId&quot;: &quot;A String&quot;, # The ID of the newly created test order.
  }</pre>
</div>

<div class="method">
    <code class="details" id="createtestreturn">createtestreturn(merchantId, orderId, body=None)</code>
  <pre>Sandbox only. Creates a test return.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;items&quot;: [ # Returned items.
      {
        &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return.
        &quot;quantity&quot;: 42, # Quantity that is returned.
      },
    ],
  }


Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#ordersCreateTestReturnResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersCreateTestReturnResponse&quot;.
    &quot;returnId&quot;: &quot;A String&quot;, # The ID of the newly created test order return.
  }</pre>
</div>

<div class="method">
    <code class="details" id="custombatch">custombatch(body=None)</code>
  <pre>Retrieves or modifies multiple orders 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;batchId&quot;: 42, # An entry ID, unique within the batch request.
        &quot;cancel&quot;: { # Required for `cancel` method.
          &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation.
              #
              # Acceptable values are:
              # - &quot;`customerInitiatedCancel`&quot;
              # - &quot;`invalidCoupon`&quot;
              # - &quot;`malformedShippingAddress`&quot;
              # - &quot;`noInventory`&quot;
              # - &quot;`other`&quot;
              # - &quot;`priceError`&quot;
              # - &quot;`shippingPriceError`&quot;
              # - &quot;`taxError`&quot;
              # - &quot;`undeliverableShippingAddress`&quot;
              # - &quot;`unsupportedPoBoxAddress`&quot;
          &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
        },
        &quot;cancelLineItem&quot;: { # Required for `cancelLineItem` method.
          &quot;amount&quot;: { # Deprecated. Please use amountPretax and amountTax instead.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;amountPretax&quot;: { # Amount to refund for the cancelation. Optional. If not set, Google will calculate the default based on the price and tax of the items involved. The amount must not be larger than the net amount left on the order.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;amountTax&quot;: { # Tax amount that corresponds to cancellation amount in amountPretax. Optional, but if filled, then amountPretax must be set. Calculated automatically if not provided.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to cancel. Either lineItemId or productId is required.
          &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to cancel. This is the REST ID used in the products service. Either lineItemId or productId is required.
          &quot;quantity&quot;: 42, # The quantity to cancel.
          &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation.
              #
              # Acceptable values are:
              # - &quot;`customerInitiatedCancel`&quot;
              # - &quot;`invalidCoupon`&quot;
              # - &quot;`malformedShippingAddress`&quot;
              # - &quot;`noInventory`&quot;
              # - &quot;`other`&quot;
              # - &quot;`priceError`&quot;
              # - &quot;`shippingPriceError`&quot;
              # - &quot;`taxError`&quot;
              # - &quot;`undeliverableShippingAddress`&quot;
              # - &quot;`unsupportedPoBoxAddress`&quot;
          &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
        },
        &quot;inStoreRefundLineItem&quot;: { # Required for `inStoreReturnLineItem` method.
          &quot;amountPretax&quot;: { # The amount that is refunded. Required.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;amountTax&quot;: { # Tax amount that correspond to refund amount in amountPretax. Required.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return. Either lineItemId or productId is required.
          &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to return. This is the REST ID used in the products service. Either lineItemId or productId is required.
          &quot;quantity&quot;: 42, # The quantity to return and refund.
          &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
              #
              # Acceptable values are:
              # - &quot;`customerDiscretionaryReturn`&quot;
              # - &quot;`customerInitiatedMerchantCancel`&quot;
              # - &quot;`deliveredTooLate`&quot;
              # - &quot;`expiredItem`&quot;
              # - &quot;`invalidCoupon`&quot;
              # - &quot;`malformedShippingAddress`&quot;
              # - &quot;`other`&quot;
              # - &quot;`productArrivedDamaged`&quot;
              # - &quot;`productNotAsDescribed`&quot;
              # - &quot;`qualityNotAsExpected`&quot;
              # - &quot;`undeliverableShippingAddress`&quot;
              # - &quot;`unsupportedPoBoxAddress`&quot;
              # - &quot;`wrongProductShipped`&quot;
          &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
        },
        &quot;merchantId&quot;: &quot;A String&quot;, # The ID of the managing account.
        &quot;merchantOrderId&quot;: &quot;A String&quot;, # The merchant order ID. Required for `updateMerchantOrderId` and `getByMerchantOrderId` methods.
        &quot;method&quot;: &quot;A String&quot;, # The method of the batch entry.
            #
            # Acceptable values are:
            # - &quot;`acknowledge`&quot;
            # - &quot;`cancel`&quot;
            # - &quot;`cancelLineItem`&quot;
            # - &quot;`get`&quot;
            # - &quot;`getByMerchantOrderId`&quot;
            # - &quot;`inStoreRefundLineItem`&quot;
            # - &quot;`refund`&quot;
            # - &quot;`rejectReturnLineItem`&quot;
            # - &quot;`returnLineItem`&quot;
            # - &quot;`returnRefundLineItem`&quot;
            # - &quot;`setLineItemMetadata`&quot;
            # - &quot;`shipLineItems`&quot;
            # - &quot;`updateLineItemShippingDetails`&quot;
            # - &quot;`updateMerchantOrderId`&quot;
            # - &quot;`updateShipment`&quot;
        &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order. Required for all methods beside `get` and `getByMerchantOrderId`.
        &quot;orderId&quot;: &quot;A String&quot;, # The ID of the order. Required for all methods beside `getByMerchantOrderId`.
        &quot;refund&quot;: { # Required for `refund` method.
          &quot;amount&quot;: { # Deprecated. Please use amountPretax and amountTax instead.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;amountPretax&quot;: { # The amount that is refunded. Either amount or amountPretax should be filled.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;amountTax&quot;: { # Tax amount that corresponds to refund amount in amountPretax. Optional, but if filled, amountPretax must be set. Calculated automatically if not provided.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;reason&quot;: &quot;A String&quot;, # The reason for the refund.
              #
              # Acceptable values are:
              # - &quot;`adjustment`&quot;
              # - &quot;`courtesyAdjustment`&quot;
              # - &quot;`customerCanceled`&quot;
              # - &quot;`customerDiscretionaryReturn`&quot;
              # - &quot;`deliveredLateByCarrier`&quot;
              # - &quot;`feeAdjustment`&quot;
              # - &quot;`lateShipmentCredit`&quot;
              # - &quot;`noInventory`&quot;
              # - &quot;`other`&quot;
              # - &quot;`priceError`&quot;
              # - &quot;`productArrivedDamaged`&quot;
              # - &quot;`productNotAsDescribed`&quot;
              # - &quot;`shippingCostAdjustment`&quot;
              # - &quot;`taxAdjustment`&quot;
              # - &quot;`undeliverableShippingAddress`&quot;
              # - &quot;`wrongProductShipped`&quot;
          &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
        },
        &quot;rejectReturnLineItem&quot;: { # Required for `rejectReturnLineItem` method.
          &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return. Either lineItemId or productId is required.
          &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to return. This is the REST ID used in the products service. Either lineItemId or productId is required.
          &quot;quantity&quot;: 42, # The quantity to return and refund.
          &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
              #
              # Acceptable values are:
              # - &quot;`damagedOrUsed`&quot;
              # - &quot;`missingComponent`&quot;
              # - &quot;`notEligible`&quot;
              # - &quot;`other`&quot;
              # - &quot;`outOfReturnWindow`&quot;
          &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
        },
        &quot;returnLineItem&quot;: { # Required for `returnLineItem` method.
          &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return. Either lineItemId or productId is required.
          &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to return. This is the REST ID used in the products service. Either lineItemId or productId is required.
          &quot;quantity&quot;: 42, # The quantity to return.
          &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
              #
              # Acceptable values are:
              # - &quot;`customerDiscretionaryReturn`&quot;
              # - &quot;`customerInitiatedMerchantCancel`&quot;
              # - &quot;`deliveredTooLate`&quot;
              # - &quot;`expiredItem`&quot;
              # - &quot;`invalidCoupon`&quot;
              # - &quot;`malformedShippingAddress`&quot;
              # - &quot;`other`&quot;
              # - &quot;`productArrivedDamaged`&quot;
              # - &quot;`productNotAsDescribed`&quot;
              # - &quot;`qualityNotAsExpected`&quot;
              # - &quot;`undeliverableShippingAddress`&quot;
              # - &quot;`unsupportedPoBoxAddress`&quot;
              # - &quot;`wrongProductShipped`&quot;
          &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
        },
        &quot;returnRefundLineItem&quot;: { # Required for `returnRefundLineItem` method.
          &quot;amountPretax&quot;: { # The amount that is refunded. If omitted, refundless return is assumed (same as calling returnLineItem method).
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;amountTax&quot;: { # Tax amount that corresponds to refund amount in amountPretax. Optional, but if filled, then amountPretax must be set. Calculated automatically if not provided.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return. Either lineItemId or productId is required.
          &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to return. This is the REST ID used in the products service. Either lineItemId or productId is required.
          &quot;quantity&quot;: 42, # The quantity to return and refund.
          &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
              #
              # Acceptable values are:
              # - &quot;`customerDiscretionaryReturn`&quot;
              # - &quot;`customerInitiatedMerchantCancel`&quot;
              # - &quot;`deliveredTooLate`&quot;
              # - &quot;`expiredItem`&quot;
              # - &quot;`invalidCoupon`&quot;
              # - &quot;`malformedShippingAddress`&quot;
              # - &quot;`other`&quot;
              # - &quot;`productArrivedDamaged`&quot;
              # - &quot;`productNotAsDescribed`&quot;
              # - &quot;`qualityNotAsExpected`&quot;
              # - &quot;`undeliverableShippingAddress`&quot;
              # - &quot;`unsupportedPoBoxAddress`&quot;
              # - &quot;`wrongProductShipped`&quot;
          &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
        },
        &quot;setLineItemMetadata&quot;: { # Required for `setLineItemMetadata` method.
          &quot;annotations&quot;: [
            {
              &quot;key&quot;: &quot;A String&quot;, # Key for additional merchant provided (as key-value pairs) annotation about the line item.
              &quot;value&quot;: &quot;A String&quot;, # Value for additional merchant provided (as key-value pairs) annotation about the line item.
            },
          ],
          &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to set metadata. Either lineItemId or productId is required.
          &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to set metadata. This is the REST ID used in the products service. Either lineItemId or productId is required.
        },
        &quot;shipLineItems&quot;: { # Required for `shipLineItems` method.
          &quot;carrier&quot;: &quot;A String&quot;, # Deprecated. Please use shipmentInfo instead. The carrier handling the shipment. See `shipments[].carrier` in the  Orders resource representation for a list of acceptable values.
          &quot;lineItems&quot;: [ # Line items to ship.
            {
              &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item that is shipped. This value is assigned by Google when an order is created. Either lineItemId or productId is required.
              &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to ship. This is the REST ID used in the products service. Either lineItemId or productId is required.
              &quot;quantity&quot;: 42, # The quantity that is shipped.
            },
          ],
          &quot;shipmentGroupId&quot;: &quot;A String&quot;, # ID of the shipment group. Required for orders that use the orderinvoices service.
          &quot;shipmentId&quot;: &quot;A String&quot;, # Deprecated. Please use shipmentInfo instead. The ID of the shipment.
          &quot;shipmentInfos&quot;: [ # Shipment information. This field is repeated because a single line item can be shipped in several packages (and have several tracking IDs).
            {
              &quot;carrier&quot;: &quot;A String&quot;, # The carrier handling the shipment. See `shipments[].carrier` in the  Orders resource representation for a list of acceptable values.
              &quot;shipmentId&quot;: &quot;A String&quot;, # Required. The ID of the shipment. This is assigned by the merchant and is unique to each shipment.
              &quot;trackingId&quot;: &quot;A String&quot;, # The tracking ID for the shipment.
            },
          ],
          &quot;trackingId&quot;: &quot;A String&quot;, # Deprecated. Please use shipmentInfo instead. The tracking ID for the shipment.
        },
        &quot;updateLineItemShippingDetails&quot;: { # Required for `updateLineItemShippingDate` method.
          &quot;deliverByDate&quot;: &quot;A String&quot;, # Updated delivery by date, in ISO 8601 format. If not specified only ship by date is updated.
              #
              # Provided date should be within 1 year timeframe and can not be a date in the past.
          &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to set metadata. Either lineItemId or productId is required.
          &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to set metadata. This is the REST ID used in the products service. Either lineItemId or productId is required.
          &quot;shipByDate&quot;: &quot;A String&quot;, # Updated ship by date, in ISO 8601 format. If not specified only deliver by date is updated.
              #
              # Provided date should be within 1 year timeframe and can not be a date in the past.
        },
        &quot;updateShipment&quot;: { # Required for `updateShipment` method.
          &quot;carrier&quot;: &quot;A String&quot;, # The carrier handling the shipment. Not updated if missing. See `shipments[].carrier` in the  Orders resource representation for a list of acceptable values.
          &quot;deliveryDate&quot;: &quot;A String&quot;, # Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if `status` is `delivered`.
          &quot;shipmentId&quot;: &quot;A String&quot;, # The ID of the shipment.
          &quot;status&quot;: &quot;A String&quot;, # New status for the shipment. Not updated if missing.
              #
              # Acceptable values are:
              # - &quot;`delivered`&quot;
              # - &quot;`undeliverable`&quot;
              # - &quot;`readyForPickup`&quot;
          &quot;trackingId&quot;: &quot;A String&quot;, # The tracking ID for the shipment. Not updated if missing.
        },
      },
    ],
  }


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 this entry responds to.
        &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;executionStatus&quot;: &quot;A String&quot;, # The status of the execution. Only defined if
            # - the request was successful; and
            # - the method is not `get`, `getByMerchantOrderId`, or one of the test methods.
            #
            # Acceptable values are:
            # - &quot;`duplicate`&quot;
            # - &quot;`executed`&quot;
        &quot;kind&quot;: &quot;content#ordersCustomBatchResponseEntry&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#ordersCustomBatchResponseEntry`&quot;
        &quot;order&quot;: { # Order. Production access (all methods) requires the order manager role. Sandbox access does not. (== resource_for v2.orders ==) (== resource_for v2.1.orders ==) # The retrieved order. Only defined if the method is `get` and if the request was successful.
          &quot;acknowledged&quot;: True or False, # Whether the order was acknowledged.
          &quot;channelType&quot;: &quot;A String&quot;, # Deprecated.
              #
              # Acceptable values are:
              # - &quot;`googleExpress`&quot;
              # - &quot;`purchasesOnGoogle`&quot;
          &quot;customer&quot;: { # The details of the customer who placed the order.
            &quot;email&quot;: &quot;A String&quot;, # Deprecated.
            &quot;explicitMarketingPreference&quot;: True or False, # Deprecated. Please use marketingRightsInfo instead.
            &quot;fullName&quot;: &quot;A String&quot;, # Full name of the customer.
            &quot;invoiceReceivingEmail&quot;: &quot;A String&quot;, # Email address for the merchant to send value-added tax or invoice documentation of the order. Only the last document sent is made available to the customer. For more information, see  About automated VAT invoicing for Shopping Actions.
            &quot;marketingRightsInfo&quot;: { # Customer&#x27;s marketing preferences. Contains the marketing opt-in information that is current at the time that the merchant call. User preference selections can change from one order to the next so preferences must be checked with every order.
              &quot;explicitMarketingPreference&quot;: &quot;A String&quot;, # Last known customer selection regarding marketing preferences. In certain cases this selection might not be known, so this field would be empty. If a customer selected `granted` in their most recent order, they can be subscribed to marketing emails. Customers who have chosen `denied` must not be subscribed, or must be unsubscribed if already opted-in.
                  #
                  # Acceptable values are:
                  # - &quot;`denied`&quot;
                  # - &quot;`granted`&quot;
              &quot;lastUpdatedTimestamp&quot;: &quot;A String&quot;, # Timestamp when last time marketing preference was updated. Could be empty, if user wasn&#x27;t offered a selection yet.
              &quot;marketingEmailAddress&quot;: &quot;A String&quot;, # Email address that can be used for marketing purposes. The field may be empty even if `explicitMarketingPreference` is &#x27;granted&#x27;. This happens when retrieving an old order from the customer who deleted their account.
            },
          },
          &quot;deliveryDetails&quot;: { # Delivery details for shipments of type `delivery`.
            &quot;address&quot;: { # The delivery address
              &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
              &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
                  # John Smith
                  # 1600 Amphitheatre Parkway
                  # Mountain View, CA, 94043
                  # United States
                &quot;A String&quot;,
              ],
              &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
              &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
              &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
              &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
              &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
              &quot;streetAddress&quot;: [ # Street-level part of the address.
                &quot;A String&quot;,
              ],
            },
            &quot;phoneNumber&quot;: &quot;A String&quot;, # The phone number of the person receiving the delivery.
          },
          &quot;id&quot;: &quot;A String&quot;, # The REST ID of the order. Globally unique.
          &quot;kind&quot;: &quot;content#order&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#order`&quot;
          &quot;lineItems&quot;: [ # Line items that are ordered.
            {
              &quot;annotations&quot;: [ # Annotations that are attached to the line item.
                {
                  &quot;key&quot;: &quot;A String&quot;, # Key for additional merchant provided (as key-value pairs) annotation about the line item.
                  &quot;value&quot;: &quot;A String&quot;, # Value for additional merchant provided (as key-value pairs) annotation about the line item.
                },
              ],
              &quot;cancellations&quot;: [ # Cancellations of the line item.
                {
                  &quot;actor&quot;: &quot;A String&quot;, # The actor that created the cancellation.
                      #
                      # Acceptable values are:
                      # - &quot;`customer`&quot;
                      # - &quot;`googleBot`&quot;
                      # - &quot;`googleCustomerService`&quot;
                      # - &quot;`googlePayments`&quot;
                      # - &quot;`googleSabre`&quot;
                      # - &quot;`merchant`&quot;
                  &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the cancellation has been created, in ISO 8601 format.
                  &quot;quantity&quot;: 42, # The quantity that was canceled.
                  &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation. Orders that are canceled with a noInventory reason will lead to the removal of the product from Shopping Actions until you make an update to that product. This will not affect your Shopping ads.
                      #
                      # Acceptable values are:
                      # - &quot;`autoPostInternal`&quot;
                      # - &quot;`autoPostInvalidBillingAddress`&quot;
                      # - &quot;`autoPostNoInventory`&quot;
                      # - &quot;`autoPostPriceError`&quot;
                      # - &quot;`autoPostUndeliverableShippingAddress`&quot;
                      # - &quot;`couponAbuse`&quot;
                      # - &quot;`customerCanceled`&quot;
                      # - &quot;`customerInitiatedCancel`&quot;
                      # - &quot;`customerSupportRequested`&quot;
                      # - &quot;`failToPushOrderGoogleError`&quot;
                      # - &quot;`failToPushOrderMerchantError`&quot;
                      # - &quot;`failToPushOrderMerchantFulfillmentError`&quot;
                      # - &quot;`failToPushOrderToMerchant`&quot;
                      # - &quot;`failToPushOrderToMerchantOutOfStock`&quot;
                      # - &quot;`invalidCoupon`&quot;
                      # - &quot;`malformedShippingAddress`&quot;
                      # - &quot;`merchantDidNotShipOnTime`&quot;
                      # - &quot;`noInventory`&quot;
                      # - &quot;`orderTimeout`&quot;
                      # - &quot;`other`&quot;
                      # - &quot;`paymentAbuse`&quot;
                      # - &quot;`paymentDeclined`&quot;
                      # - &quot;`priceError`&quot;
                      # - &quot;`returnRefundAbuse`&quot;
                      # - &quot;`shippingPriceError`&quot;
                      # - &quot;`taxError`&quot;
                      # - &quot;`undeliverableShippingAddress`&quot;
                      # - &quot;`unsupportedPoBoxAddress`&quot;
                  &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
                },
              ],
              &quot;id&quot;: &quot;A String&quot;, # The ID of the line item.
              &quot;price&quot;: { # Total price for the line item. For example, if two items for $10 are purchased, the total price will be $20.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;product&quot;: { # Product data as seen by customer from the time of the order placement. Note that certain attributes values (e.g. title or gtin) might be reformatted and no longer match values submitted via product feed.
                &quot;brand&quot;: &quot;A String&quot;, # Brand of the item.
                &quot;channel&quot;: &quot;A String&quot;, # The item&#x27;s channel (online or local).
                    #
                    # Acceptable values are:
                    # - &quot;`local`&quot;
                    # - &quot;`online`&quot;
                &quot;condition&quot;: &quot;A String&quot;, # Condition or state of the item.
                    #
                    # Acceptable values are:
                    # - &quot;`new`&quot;
                    # - &quot;`refurbished`&quot;
                    # - &quot;`used`&quot;
                &quot;contentLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language code for the item.
                &quot;fees&quot;: [ # Associated fees at order creation time.
                  {
                    &quot;amount&quot;: { # Amount of the fee.
                      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                    },
                    &quot;name&quot;: &quot;A String&quot;, # Name of the fee.
                  },
                ],
                &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number (GTIN) of the item.
                &quot;id&quot;: &quot;A String&quot;, # The REST ID of the product.
                &quot;imageLink&quot;: &quot;A String&quot;, # URL of an image of the item.
                &quot;itemGroupId&quot;: &quot;A String&quot;, # Shared identifier for all variants of the same product.
                &quot;mpn&quot;: &quot;A String&quot;, # Manufacturer Part Number (MPN) of the item.
                &quot;offerId&quot;: &quot;A String&quot;, # An identifier of the item.
                &quot;price&quot;: { # Price of the item.
                  &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                  &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                },
                &quot;shownImage&quot;: &quot;A String&quot;, # URL to the cached image shown to the user when order was placed.
                &quot;targetCountry&quot;: &quot;A String&quot;, # The CLDR territory code of the target country of the product.
                &quot;title&quot;: &quot;A String&quot;, # The title of the product.
                &quot;variantAttributes&quot;: [ # Variant attributes for the item. These are dimensions of the product, such as color, gender, material, pattern, and size. You can find a comprehensive list of variant attributes here.
                  {
                    &quot;dimension&quot;: &quot;A String&quot;, # The dimension of the variant.
                    &quot;value&quot;: &quot;A String&quot;, # The value for the dimension.
                  },
                ],
              },
              &quot;quantityCanceled&quot;: 42, # Number of items canceled.
              &quot;quantityDelivered&quot;: 42, # Number of items delivered.
              &quot;quantityOrdered&quot;: 42, # Number of items ordered.
              &quot;quantityPending&quot;: 42, # Number of items pending.
              &quot;quantityReadyForPickup&quot;: 42, # Number of items ready for pickup.
              &quot;quantityReturned&quot;: 42, # Number of items returned.
              &quot;quantityShipped&quot;: 42, # Number of items shipped.
              &quot;returnInfo&quot;: { # Details of the return policy for the line item.
                &quot;daysToReturn&quot;: 42, # Required. How many days later the item can be returned.
                &quot;isReturnable&quot;: True or False, # Required. Whether the item is returnable.
                &quot;policyUrl&quot;: &quot;A String&quot;, # Required. URL of the item return policy.
              },
              &quot;returns&quot;: [ # Returns of the line item.
                {
                  &quot;actor&quot;: &quot;A String&quot;, # The actor that created the refund.
                      #
                      # Acceptable values are:
                      # - &quot;`customer`&quot;
                      # - &quot;`googleBot`&quot;
                      # - &quot;`googleCustomerService`&quot;
                      # - &quot;`googlePayments`&quot;
                      # - &quot;`googleSabre`&quot;
                      # - &quot;`merchant`&quot;
                  &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the item has been created, in ISO 8601 format.
                  &quot;quantity&quot;: 42, # Quantity that is returned.
                  &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
                      #
                      # Acceptable values are:
                      # - &quot;`customerDiscretionaryReturn`&quot;
                      # - &quot;`customerInitiatedMerchantCancel`&quot;
                      # - &quot;`deliveredTooLate`&quot;
                      # - &quot;`expiredItem`&quot;
                      # - &quot;`invalidCoupon`&quot;
                      # - &quot;`malformedShippingAddress`&quot;
                      # - &quot;`other`&quot;
                      # - &quot;`productArrivedDamaged`&quot;
                      # - &quot;`productNotAsDescribed`&quot;
                      # - &quot;`qualityNotAsExpected`&quot;
                      # - &quot;`undeliverableShippingAddress`&quot;
                      # - &quot;`unsupportedPoBoxAddress`&quot;
                      # - &quot;`wrongProductShipped`&quot;
                  &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
                },
              ],
              &quot;shippingDetails&quot;: { # Details of the requested shipping for the line item.
                &quot;deliverByDate&quot;: &quot;A String&quot;, # Required. The delivery by date, in ISO 8601 format.
                &quot;method&quot;: { # Required. Details of the shipping method.
                  &quot;carrier&quot;: &quot;A String&quot;, # The carrier for the shipping. Optional. See `shipments[].carrier` for a list of acceptable values.
                  &quot;maxDaysInTransit&quot;: 42, # Required. Maximum transit time.
                  &quot;methodName&quot;: &quot;A String&quot;, # Required. The name of the shipping method.
                  &quot;minDaysInTransit&quot;: 42, # Required. Minimum transit time.
                },
                &quot;shipByDate&quot;: &quot;A String&quot;, # Required. The ship by date, in ISO 8601 format.
                &quot;type&quot;: &quot;A String&quot;, # Type of shipment. Indicates whether `deliveryDetails` or `pickupDetails` is applicable for this shipment.
                    #
                    # Acceptable values are:
                    # - &quot;`delivery`&quot;
                    # - &quot;`pickup`&quot;
              },
              &quot;tax&quot;: { # Total tax amount for the line item. For example, if two items are purchased, and each have a cost tax of $2, the total tax amount will be $4.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
            },
          ],
          &quot;merchantId&quot;: &quot;A String&quot;,
          &quot;merchantOrderId&quot;: &quot;A String&quot;, # Merchant-provided ID of the order.
          &quot;netAmount&quot;: { # The net amount for the order. For example, if an order was originally for a grand total of $100 and a refund was issued for $20, the net amount will be $80.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;paymentMethod&quot;: { # The details of the payment method.
            &quot;billingAddress&quot;: { # The billing address.
              &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
              &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
                  # John Smith
                  # 1600 Amphitheatre Parkway
                  # Mountain View, CA, 94043
                  # United States
                &quot;A String&quot;,
              ],
              &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
              &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
              &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
              &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
              &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
              &quot;streetAddress&quot;: [ # Street-level part of the address.
                &quot;A String&quot;,
              ],
            },
            &quot;expirationMonth&quot;: 42, # The card expiration month (January = 1, February = 2 etc.).
            &quot;expirationYear&quot;: 42, # The card expiration year (4-digit, e.g. 2015).
            &quot;lastFourDigits&quot;: &quot;A String&quot;, # The last four digits of the card number.
            &quot;phoneNumber&quot;: &quot;A String&quot;, # The billing phone number.
            &quot;type&quot;: &quot;A String&quot;, # The type of instrument.
                #
                # Acceptable values are:
                # - &quot;`AMEX`&quot;
                # - &quot;`DISCOVER`&quot;
                # - &quot;`JCB`&quot;
                # - &quot;`MASTERCARD`&quot;
                # - &quot;`UNIONPAY`&quot;
                # - &quot;`VISA`&quot;
                # - &quot;``&quot;
          },
          &quot;paymentStatus&quot;: &quot;A String&quot;, # The status of the payment.
              #
              # Acceptable values are:
              # - &quot;`paymentCaptured`&quot;
              # - &quot;`paymentRejected`&quot;
              # - &quot;`paymentSecured`&quot;
              # - &quot;`pendingAuthorization`&quot;
          &quot;pickupDetails&quot;: { # Pickup details for shipments of type `pickup`.
            &quot;address&quot;: { # Address of the pickup location where the shipment should be sent. Note that `recipientName` in the address is the name of the business at the pickup location.
              &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
              &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
                  # John Smith
                  # 1600 Amphitheatre Parkway
                  # Mountain View, CA, 94043
                  # United States
                &quot;A String&quot;,
              ],
              &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
              &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
              &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
              &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
              &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
              &quot;streetAddress&quot;: [ # Street-level part of the address.
                &quot;A String&quot;,
              ],
            },
            &quot;collectors&quot;: [ # Collectors authorized to pick up shipment from the pickup location.
              {
                &quot;name&quot;: &quot;A String&quot;, # Name of the person picking up the shipment.
                &quot;phoneNumber&quot;: &quot;A String&quot;, # Phone number of the person picking up the shipment.
              },
            ],
            &quot;locationId&quot;: &quot;A String&quot;, # ID of the pickup location.
          },
          &quot;placedDate&quot;: &quot;A String&quot;, # The date when the order was placed, in ISO 8601 format.
          &quot;promotions&quot;: [ # The details of the merchant provided promotions applied to the order.
              #
              # To determine which promotions apply to which products, check the `Promotions[].Benefits[].OfferIds` field against the `LineItems[].Product.OfferId` field for each promotion. If a promotion is applied to more than 1 `offerId`, divide the discount value by the number of affected offers to determine how much discount to apply to each `offerId`.
              #
              # Examples:
              # - To calculate the line item level discount for a single specific item: For each promotion, subtract the `Promotions[].Benefits[].Discount.value` amount from the `LineItems[].Price.value`.
              # - To calculate the line item level discount for multiple quantity of a specific item: For each promotion, divide the `Promotions[].Benefits[].Discount.value` by the quantity of products and substract it from `LineItems[].Product.Price.value` for each quantity item.
              #
              # Only 1 promotion can be applied to an offerId in a given order. To refund an item which had a promotion applied to it, make sure to refund the amount after first subtracting the promotion discount from the item price.
              #
              # More details about the program are here.
            {
              &quot;benefits&quot;: [
                {
                  &quot;discount&quot;: { # The discount in the order price when the promotion is applied.
                    &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                    &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                  },
                  &quot;offerIds&quot;: [ # The OfferId(s) that were purchased in this order and map to this specific benefit of the promotion.
                    &quot;A String&quot;,
                  ],
                  &quot;subType&quot;: &quot;A String&quot;, # Further describes the benefit of the promotion. Note that we will expand on this enumeration as we support new promotion sub-types.
                      #
                      # Acceptable values are:
                      # - &quot;`buyMGetMoneyOff`&quot;
                      # - &quot;`buyMGetNMoneyOff`&quot;
                      # - &quot;`buyMGetNPercentOff`&quot;
                      # - &quot;`buyMGetPercentOff`&quot;
                      # - &quot;`freeGift`&quot;
                      # - &quot;`freeGiftWithItemId`&quot;
                      # - &quot;`freeGiftWithValue`&quot;
                      # - &quot;`freeOvernightShipping`&quot;
                      # - &quot;`freeShipping`&quot;
                      # - &quot;`freeTwoDayShipping`&quot;
                      # - &quot;`moneyOff`&quot;
                      # - &quot;`percentageOff`&quot;
                      # - &quot;`rewardPoints`&quot;
                      # - &quot;`salePrice`&quot;
                  &quot;taxImpact&quot;: { # The impact on tax when the promotion is applied.
                    &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                    &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                  },
                  &quot;type&quot;: &quot;A String&quot;, # Describes whether the promotion applies to products (e.g. 20% off) or to shipping (e.g. Free Shipping).
                      #
                      # Acceptable values are:
                      # - &quot;`product`&quot;
                      # - &quot;`shipping`&quot;
                },
              ],
              &quot;effectiveDates&quot;: &quot;A String&quot;, # The date and time frame when the promotion is active and ready for validation review. Note that the promotion live time may be delayed for a few hours due to the validation review.
                  # Start date and end date are separated by a forward slash (/). The start date is specified by the format (YYYY-MM-DD), followed by the letter ?T?, the time of the day when the sale starts (in Greenwich Mean Time, GMT), followed by an expression of the time zone for the sale. The end date is in the same format.
              &quot;genericRedemptionCode&quot;: &quot;A String&quot;, # Optional. The text code that corresponds to the promotion when applied on the retailer?s website.
              &quot;id&quot;: &quot;A String&quot;, # The unique ID of the promotion.
              &quot;longTitle&quot;: &quot;A String&quot;, # The full title of the promotion.
              &quot;productApplicability&quot;: &quot;A String&quot;, # Whether the promotion is applicable to all products or only specific products.
                  #
                  # Acceptable values are:
                  # - &quot;`allProducts`&quot;
                  # - &quot;`specificProducts`&quot;
              &quot;redemptionChannel&quot;: &quot;A String&quot;, # Indicates that the promotion is valid online.
                  #
                  # Acceptable values are:
                  # - &quot;`online`&quot;
            },
          ],
          &quot;refunds&quot;: [ # Refunds for the order.
            {
              &quot;actor&quot;: &quot;A String&quot;, # The actor that created the refund.
                  #
                  # Acceptable values are:
                  # - &quot;`customer`&quot;
                  # - &quot;`googleBot`&quot;
                  # - &quot;`googleCustomerService`&quot;
                  # - &quot;`googlePayments`&quot;
                  # - &quot;`googleSabre`&quot;
                  # - &quot;`merchant`&quot;
              &quot;amount&quot;: { # The amount that is refunded.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the item has been created, in ISO 8601 format.
              &quot;reason&quot;: &quot;A String&quot;, # The reason for the refund.
                  #
                  # Acceptable values are:
                  # - &quot;`adjustment`&quot;
                  # - &quot;`autoPostInternal`&quot;
                  # - &quot;`autoPostInvalidBillingAddress`&quot;
                  # - &quot;`autoPostNoInventory`&quot;
                  # - &quot;`autoPostPriceError`&quot;
                  # - &quot;`autoPostUndeliverableShippingAddress`&quot;
                  # - &quot;`couponAbuse`&quot;
                  # - &quot;`courtesyAdjustment`&quot;
                  # - &quot;`customerCanceled`&quot;
                  # - &quot;`customerDiscretionaryReturn`&quot;
                  # - &quot;`customerInitiatedMerchantCancel`&quot;
                  # - &quot;`customerSupportRequested`&quot;
                  # - &quot;`deliveredLateByCarrier`&quot;
                  # - &quot;`deliveredTooLate`&quot;
                  # - &quot;`expiredItem`&quot;
                  # - &quot;`failToPushOrderGoogleError`&quot;
                  # - &quot;`failToPushOrderMerchantError`&quot;
                  # - &quot;`failToPushOrderMerchantFulfillmentError`&quot;
                  # - &quot;`failToPushOrderToMerchant`&quot;
                  # - &quot;`failToPushOrderToMerchantOutOfStock`&quot;
                  # - &quot;`feeAdjustment`&quot;
                  # - &quot;`invalidCoupon`&quot;
                  # - &quot;`lateShipmentCredit`&quot;
                  # - &quot;`malformedShippingAddress`&quot;
                  # - &quot;`merchantDidNotShipOnTime`&quot;
                  # - &quot;`noInventory`&quot;
                  # - &quot;`orderTimeout`&quot;
                  # - &quot;`other`&quot;
                  # - &quot;`paymentAbuse`&quot;
                  # - &quot;`paymentDeclined`&quot;
                  # - &quot;`priceAdjustment`&quot;
                  # - &quot;`priceError`&quot;
                  # - &quot;`productArrivedDamaged`&quot;
                  # - &quot;`productNotAsDescribed`&quot;
                  # - &quot;`promoReallocation`&quot;
                  # - &quot;`qualityNotAsExpected`&quot;
                  # - &quot;`returnRefundAbuse`&quot;
                  # - &quot;`shippingCostAdjustment`&quot;
                  # - &quot;`shippingPriceError`&quot;
                  # - &quot;`taxAdjustment`&quot;
                  # - &quot;`taxError`&quot;
                  # - &quot;`undeliverableShippingAddress`&quot;
                  # - &quot;`unsupportedPoBoxAddress`&quot;
                  # - &quot;`wrongProductShipped`&quot;
              &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
            },
          ],
          &quot;shipments&quot;: [ # Shipments of the order.
            {
              &quot;carrier&quot;: &quot;A String&quot;, # The carrier handling the shipment.
                  #
                  # For supported carriers, Google includes the carrier name and tracking URL in emails to customers. For select supported carriers, Google also automatically updates the shipment status based on the provided shipment ID. Note: You can also use unsupported carriers, but emails to customers will not include the carrier name or tracking URL, and there will be no automatic order status updates.
                  # Supported carriers for US are:
                  # - &quot;`ups`&quot; (United Parcel Service) automatic status updates
                  # - &quot;`usps`&quot; (United States Postal Service) automatic status updates
                  # - &quot;`fedex`&quot; (FedEx) automatic status updates
                  # - &quot;`dhl`&quot; (DHL eCommerce) automatic status updates (US only)
                  # - &quot;`ontrac`&quot; (OnTrac) automatic status updates
                  # - &quot;`dhl express`&quot; (DHL Express)
                  # - &quot;`deliv`&quot; (Deliv)
                  # - &quot;`dynamex`&quot; (TForce)
                  # - &quot;`lasership`&quot; (LaserShip)
                  # - &quot;`mpx`&quot; (Military Parcel Xpress)
                  # - &quot;`uds`&quot; (United Delivery Service)
                  # - &quot;`efw`&quot; (Estes Forwarding Worldwide)
                  # - &quot;`jd logistics`&quot; (JD Logistics)
                  # - &quot;`yunexpress`&quot; (YunExpress)
                  # - &quot;`china post`&quot; (China Post)
                  # - &quot;`china ems`&quot; (China Post Express Mail Service)
                  # - &quot;`singapore post`&quot; (Singapore Post)
                  # - &quot;`pos malaysia`&quot; (Pos Malaysia)
                  # - &quot;`postnl`&quot; (PostNL)
                  # - &quot;`ptt`&quot; (PTT Turkish Post)
                  # - &quot;`eub`&quot; (ePacket)
                  # - &quot;`chukou1`&quot; (Chukou1 Logistics)
                  # - &quot;`bestex`&quot; (Best Express)
                  # - &quot;`canada post`&quot; (Canada Post)
                  # - &quot;`purolator`&quot; (Purolator)
                  # - &quot;`canpar`&quot; (Canpar)
                  # - &quot;`india post`&quot; (India Post)
                  # - &quot;`blue dart`&quot; (Blue Dart)
                  # - &quot;`delhivery`&quot; (Delhivery)
                  # - &quot;`dtdc`&quot; (DTDC)
                  # - &quot;`tpc india`&quot; (TPC India)
                  # Supported carriers for FR are:
                  # - &quot;`la poste`&quot; (La Poste) automatic status updates
                  # - &quot;`colissimo`&quot; (Colissimo by La Poste) automatic status updates
                  # - &quot;`ups`&quot; (United Parcel Service) automatic status updates
                  # - &quot;`chronopost`&quot; (Chronopost by La Poste)
                  # - &quot;`gls`&quot; (General Logistics Systems France)
                  # - &quot;`dpd`&quot; (DPD Group by GeoPost)
                  # - &quot;`bpost`&quot; (Belgian Post Group)
                  # - &quot;`colis prive`&quot; (Colis Privé)
                  # - &quot;`boxtal`&quot; (Boxtal)
                  # - &quot;`geodis`&quot; (GEODIS)
                  # - &quot;`tnt`&quot; (TNT)
                  # - &quot;`db schenker`&quot; (DB Schenker)
                  # - &quot;`aramex`&quot; (Aramex)
              &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the shipment has been created, in ISO 8601 format.
              &quot;deliveryDate&quot;: &quot;A String&quot;, # Date on which the shipment has been delivered, in ISO 8601 format. Present only if `status` is `delivered`
              &quot;id&quot;: &quot;A String&quot;, # The ID of the shipment.
              &quot;lineItems&quot;: [ # The line items that are shipped.
                {
                  &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item that is shipped. This value is assigned by Google when an order is created. Either lineItemId or productId is required.
                  &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to ship. This is the REST ID used in the products service. Either lineItemId or productId is required.
                  &quot;quantity&quot;: 42, # The quantity that is shipped.
                },
              ],
              &quot;scheduledDeliveryDetails&quot;: { # Delivery details of the shipment if scheduling is needed.
                &quot;carrierPhoneNumber&quot;: &quot;A String&quot;, # The phone number of the carrier fulfilling the delivery. The phone number is formatted as the international notation in ITU-T Recommendation E.123 (e.g., &quot;+41 44 668 1800&quot;).
                &quot;scheduledDate&quot;: &quot;A String&quot;, # The date a shipment is scheduled for delivery, in ISO 8601 format.
              },
              &quot;status&quot;: &quot;A String&quot;, # The status of the shipment.
                  #
                  # Acceptable values are:
                  # - &quot;`delivered`&quot;
                  # - &quot;`readyForPickup`&quot;
                  # - &quot;`shipped`&quot;
                  # - &quot;`undeliverable`&quot;
              &quot;trackingId&quot;: &quot;A String&quot;, # The tracking ID for the shipment.
            },
          ],
          &quot;shippingCost&quot;: { # The total cost of shipping for all items.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;shippingCostTax&quot;: { # The tax for the total shipping cost.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;shippingOption&quot;: &quot;A String&quot;, # Deprecated. Shipping details are provided with line items instead.
              #
              # Acceptable values are:
              # - &quot;`economy`&quot;
              # - &quot;`expedited`&quot;
              # - &quot;`oneDay`&quot;
              # - &quot;`sameDay`&quot;
              # - &quot;`standard`&quot;
              # - &quot;`twoDay`&quot;
          &quot;status&quot;: &quot;A String&quot;, # The status of the order.
              #
              # Acceptable values are:
              # - &quot;`canceled`&quot;
              # - &quot;`delivered`&quot;
              # - &quot;`inProgress`&quot;
              # - &quot;`partiallyDelivered`&quot;
              # - &quot;`partiallyReturned`&quot;
              # - &quot;`partiallyShipped`&quot;
              # - &quot;`pendingShipment`&quot;
              # - &quot;`returned`&quot;
              # - &quot;`shipped`&quot;
          &quot;taxCollector&quot;: &quot;A String&quot;, # The party responsible for collecting and remitting taxes.
              #
              # Acceptable values are:
              # - &quot;`marketplaceFacilitator`&quot;
              # - &quot;`merchant`&quot;
        },
      },
    ],
    &quot;kind&quot;: &quot;content#ordersCustomBatchResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersCustomBatchResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(merchantId, orderId)</code>
  <pre>Retrieves an order from your Merchant Center account.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)

Returns:
  An object of the form:

    { # Order. Production access (all methods) requires the order manager role. Sandbox access does not. (== resource_for v2.orders ==) (== resource_for v2.1.orders ==)
    &quot;acknowledged&quot;: True or False, # Whether the order was acknowledged.
    &quot;channelType&quot;: &quot;A String&quot;, # Deprecated.
        #
        # Acceptable values are:
        # - &quot;`googleExpress`&quot;
        # - &quot;`purchasesOnGoogle`&quot;
    &quot;customer&quot;: { # The details of the customer who placed the order.
      &quot;email&quot;: &quot;A String&quot;, # Deprecated.
      &quot;explicitMarketingPreference&quot;: True or False, # Deprecated. Please use marketingRightsInfo instead.
      &quot;fullName&quot;: &quot;A String&quot;, # Full name of the customer.
      &quot;invoiceReceivingEmail&quot;: &quot;A String&quot;, # Email address for the merchant to send value-added tax or invoice documentation of the order. Only the last document sent is made available to the customer. For more information, see  About automated VAT invoicing for Shopping Actions.
      &quot;marketingRightsInfo&quot;: { # Customer&#x27;s marketing preferences. Contains the marketing opt-in information that is current at the time that the merchant call. User preference selections can change from one order to the next so preferences must be checked with every order.
        &quot;explicitMarketingPreference&quot;: &quot;A String&quot;, # Last known customer selection regarding marketing preferences. In certain cases this selection might not be known, so this field would be empty. If a customer selected `granted` in their most recent order, they can be subscribed to marketing emails. Customers who have chosen `denied` must not be subscribed, or must be unsubscribed if already opted-in.
            #
            # Acceptable values are:
            # - &quot;`denied`&quot;
            # - &quot;`granted`&quot;
        &quot;lastUpdatedTimestamp&quot;: &quot;A String&quot;, # Timestamp when last time marketing preference was updated. Could be empty, if user wasn&#x27;t offered a selection yet.
        &quot;marketingEmailAddress&quot;: &quot;A String&quot;, # Email address that can be used for marketing purposes. The field may be empty even if `explicitMarketingPreference` is &#x27;granted&#x27;. This happens when retrieving an old order from the customer who deleted their account.
      },
    },
    &quot;deliveryDetails&quot;: { # Delivery details for shipments of type `delivery`.
      &quot;address&quot;: { # The delivery address
        &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
        &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
            # John Smith
            # 1600 Amphitheatre Parkway
            # Mountain View, CA, 94043
            # United States
          &quot;A String&quot;,
        ],
        &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
        &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
        &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
        &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
        &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
        &quot;streetAddress&quot;: [ # Street-level part of the address.
          &quot;A String&quot;,
        ],
      },
      &quot;phoneNumber&quot;: &quot;A String&quot;, # The phone number of the person receiving the delivery.
    },
    &quot;id&quot;: &quot;A String&quot;, # The REST ID of the order. Globally unique.
    &quot;kind&quot;: &quot;content#order&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#order`&quot;
    &quot;lineItems&quot;: [ # Line items that are ordered.
      {
        &quot;annotations&quot;: [ # Annotations that are attached to the line item.
          {
            &quot;key&quot;: &quot;A String&quot;, # Key for additional merchant provided (as key-value pairs) annotation about the line item.
            &quot;value&quot;: &quot;A String&quot;, # Value for additional merchant provided (as key-value pairs) annotation about the line item.
          },
        ],
        &quot;cancellations&quot;: [ # Cancellations of the line item.
          {
            &quot;actor&quot;: &quot;A String&quot;, # The actor that created the cancellation.
                #
                # Acceptable values are:
                # - &quot;`customer`&quot;
                # - &quot;`googleBot`&quot;
                # - &quot;`googleCustomerService`&quot;
                # - &quot;`googlePayments`&quot;
                # - &quot;`googleSabre`&quot;
                # - &quot;`merchant`&quot;
            &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the cancellation has been created, in ISO 8601 format.
            &quot;quantity&quot;: 42, # The quantity that was canceled.
            &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation. Orders that are canceled with a noInventory reason will lead to the removal of the product from Shopping Actions until you make an update to that product. This will not affect your Shopping ads.
                #
                # Acceptable values are:
                # - &quot;`autoPostInternal`&quot;
                # - &quot;`autoPostInvalidBillingAddress`&quot;
                # - &quot;`autoPostNoInventory`&quot;
                # - &quot;`autoPostPriceError`&quot;
                # - &quot;`autoPostUndeliverableShippingAddress`&quot;
                # - &quot;`couponAbuse`&quot;
                # - &quot;`customerCanceled`&quot;
                # - &quot;`customerInitiatedCancel`&quot;
                # - &quot;`customerSupportRequested`&quot;
                # - &quot;`failToPushOrderGoogleError`&quot;
                # - &quot;`failToPushOrderMerchantError`&quot;
                # - &quot;`failToPushOrderMerchantFulfillmentError`&quot;
                # - &quot;`failToPushOrderToMerchant`&quot;
                # - &quot;`failToPushOrderToMerchantOutOfStock`&quot;
                # - &quot;`invalidCoupon`&quot;
                # - &quot;`malformedShippingAddress`&quot;
                # - &quot;`merchantDidNotShipOnTime`&quot;
                # - &quot;`noInventory`&quot;
                # - &quot;`orderTimeout`&quot;
                # - &quot;`other`&quot;
                # - &quot;`paymentAbuse`&quot;
                # - &quot;`paymentDeclined`&quot;
                # - &quot;`priceError`&quot;
                # - &quot;`returnRefundAbuse`&quot;
                # - &quot;`shippingPriceError`&quot;
                # - &quot;`taxError`&quot;
                # - &quot;`undeliverableShippingAddress`&quot;
                # - &quot;`unsupportedPoBoxAddress`&quot;
            &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
          },
        ],
        &quot;id&quot;: &quot;A String&quot;, # The ID of the line item.
        &quot;price&quot;: { # Total price for the line item. For example, if two items for $10 are purchased, the total price will be $20.
          &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
          &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
        },
        &quot;product&quot;: { # Product data as seen by customer from the time of the order placement. Note that certain attributes values (e.g. title or gtin) might be reformatted and no longer match values submitted via product feed.
          &quot;brand&quot;: &quot;A String&quot;, # Brand of the item.
          &quot;channel&quot;: &quot;A String&quot;, # The item&#x27;s channel (online or local).
              #
              # Acceptable values are:
              # - &quot;`local`&quot;
              # - &quot;`online`&quot;
          &quot;condition&quot;: &quot;A String&quot;, # Condition or state of the item.
              #
              # Acceptable values are:
              # - &quot;`new`&quot;
              # - &quot;`refurbished`&quot;
              # - &quot;`used`&quot;
          &quot;contentLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language code for the item.
          &quot;fees&quot;: [ # Associated fees at order creation time.
            {
              &quot;amount&quot;: { # Amount of the fee.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;name&quot;: &quot;A String&quot;, # Name of the fee.
            },
          ],
          &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number (GTIN) of the item.
          &quot;id&quot;: &quot;A String&quot;, # The REST ID of the product.
          &quot;imageLink&quot;: &quot;A String&quot;, # URL of an image of the item.
          &quot;itemGroupId&quot;: &quot;A String&quot;, # Shared identifier for all variants of the same product.
          &quot;mpn&quot;: &quot;A String&quot;, # Manufacturer Part Number (MPN) of the item.
          &quot;offerId&quot;: &quot;A String&quot;, # An identifier of the item.
          &quot;price&quot;: { # Price of the item.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;shownImage&quot;: &quot;A String&quot;, # URL to the cached image shown to the user when order was placed.
          &quot;targetCountry&quot;: &quot;A String&quot;, # The CLDR territory code of the target country of the product.
          &quot;title&quot;: &quot;A String&quot;, # The title of the product.
          &quot;variantAttributes&quot;: [ # Variant attributes for the item. These are dimensions of the product, such as color, gender, material, pattern, and size. You can find a comprehensive list of variant attributes here.
            {
              &quot;dimension&quot;: &quot;A String&quot;, # The dimension of the variant.
              &quot;value&quot;: &quot;A String&quot;, # The value for the dimension.
            },
          ],
        },
        &quot;quantityCanceled&quot;: 42, # Number of items canceled.
        &quot;quantityDelivered&quot;: 42, # Number of items delivered.
        &quot;quantityOrdered&quot;: 42, # Number of items ordered.
        &quot;quantityPending&quot;: 42, # Number of items pending.
        &quot;quantityReadyForPickup&quot;: 42, # Number of items ready for pickup.
        &quot;quantityReturned&quot;: 42, # Number of items returned.
        &quot;quantityShipped&quot;: 42, # Number of items shipped.
        &quot;returnInfo&quot;: { # Details of the return policy for the line item.
          &quot;daysToReturn&quot;: 42, # Required. How many days later the item can be returned.
          &quot;isReturnable&quot;: True or False, # Required. Whether the item is returnable.
          &quot;policyUrl&quot;: &quot;A String&quot;, # Required. URL of the item return policy.
        },
        &quot;returns&quot;: [ # Returns of the line item.
          {
            &quot;actor&quot;: &quot;A String&quot;, # The actor that created the refund.
                #
                # Acceptable values are:
                # - &quot;`customer`&quot;
                # - &quot;`googleBot`&quot;
                # - &quot;`googleCustomerService`&quot;
                # - &quot;`googlePayments`&quot;
                # - &quot;`googleSabre`&quot;
                # - &quot;`merchant`&quot;
            &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the item has been created, in ISO 8601 format.
            &quot;quantity&quot;: 42, # Quantity that is returned.
            &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
                #
                # Acceptable values are:
                # - &quot;`customerDiscretionaryReturn`&quot;
                # - &quot;`customerInitiatedMerchantCancel`&quot;
                # - &quot;`deliveredTooLate`&quot;
                # - &quot;`expiredItem`&quot;
                # - &quot;`invalidCoupon`&quot;
                # - &quot;`malformedShippingAddress`&quot;
                # - &quot;`other`&quot;
                # - &quot;`productArrivedDamaged`&quot;
                # - &quot;`productNotAsDescribed`&quot;
                # - &quot;`qualityNotAsExpected`&quot;
                # - &quot;`undeliverableShippingAddress`&quot;
                # - &quot;`unsupportedPoBoxAddress`&quot;
                # - &quot;`wrongProductShipped`&quot;
            &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
          },
        ],
        &quot;shippingDetails&quot;: { # Details of the requested shipping for the line item.
          &quot;deliverByDate&quot;: &quot;A String&quot;, # Required. The delivery by date, in ISO 8601 format.
          &quot;method&quot;: { # Required. Details of the shipping method.
            &quot;carrier&quot;: &quot;A String&quot;, # The carrier for the shipping. Optional. See `shipments[].carrier` for a list of acceptable values.
            &quot;maxDaysInTransit&quot;: 42, # Required. Maximum transit time.
            &quot;methodName&quot;: &quot;A String&quot;, # Required. The name of the shipping method.
            &quot;minDaysInTransit&quot;: 42, # Required. Minimum transit time.
          },
          &quot;shipByDate&quot;: &quot;A String&quot;, # Required. The ship by date, in ISO 8601 format.
          &quot;type&quot;: &quot;A String&quot;, # Type of shipment. Indicates whether `deliveryDetails` or `pickupDetails` is applicable for this shipment.
              #
              # Acceptable values are:
              # - &quot;`delivery`&quot;
              # - &quot;`pickup`&quot;
        },
        &quot;tax&quot;: { # Total tax amount for the line item. For example, if two items are purchased, and each have a cost tax of $2, the total tax amount will be $4.
          &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
          &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
        },
      },
    ],
    &quot;merchantId&quot;: &quot;A String&quot;,
    &quot;merchantOrderId&quot;: &quot;A String&quot;, # Merchant-provided ID of the order.
    &quot;netAmount&quot;: { # The net amount for the order. For example, if an order was originally for a grand total of $100 and a refund was issued for $20, the net amount will be $80.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;paymentMethod&quot;: { # The details of the payment method.
      &quot;billingAddress&quot;: { # The billing address.
        &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
        &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
            # John Smith
            # 1600 Amphitheatre Parkway
            # Mountain View, CA, 94043
            # United States
          &quot;A String&quot;,
        ],
        &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
        &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
        &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
        &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
        &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
        &quot;streetAddress&quot;: [ # Street-level part of the address.
          &quot;A String&quot;,
        ],
      },
      &quot;expirationMonth&quot;: 42, # The card expiration month (January = 1, February = 2 etc.).
      &quot;expirationYear&quot;: 42, # The card expiration year (4-digit, e.g. 2015).
      &quot;lastFourDigits&quot;: &quot;A String&quot;, # The last four digits of the card number.
      &quot;phoneNumber&quot;: &quot;A String&quot;, # The billing phone number.
      &quot;type&quot;: &quot;A String&quot;, # The type of instrument.
          #
          # Acceptable values are:
          # - &quot;`AMEX`&quot;
          # - &quot;`DISCOVER`&quot;
          # - &quot;`JCB`&quot;
          # - &quot;`MASTERCARD`&quot;
          # - &quot;`UNIONPAY`&quot;
          # - &quot;`VISA`&quot;
          # - &quot;``&quot;
    },
    &quot;paymentStatus&quot;: &quot;A String&quot;, # The status of the payment.
        #
        # Acceptable values are:
        # - &quot;`paymentCaptured`&quot;
        # - &quot;`paymentRejected`&quot;
        # - &quot;`paymentSecured`&quot;
        # - &quot;`pendingAuthorization`&quot;
    &quot;pickupDetails&quot;: { # Pickup details for shipments of type `pickup`.
      &quot;address&quot;: { # Address of the pickup location where the shipment should be sent. Note that `recipientName` in the address is the name of the business at the pickup location.
        &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
        &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
            # John Smith
            # 1600 Amphitheatre Parkway
            # Mountain View, CA, 94043
            # United States
          &quot;A String&quot;,
        ],
        &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
        &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
        &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
        &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
        &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
        &quot;streetAddress&quot;: [ # Street-level part of the address.
          &quot;A String&quot;,
        ],
      },
      &quot;collectors&quot;: [ # Collectors authorized to pick up shipment from the pickup location.
        {
          &quot;name&quot;: &quot;A String&quot;, # Name of the person picking up the shipment.
          &quot;phoneNumber&quot;: &quot;A String&quot;, # Phone number of the person picking up the shipment.
        },
      ],
      &quot;locationId&quot;: &quot;A String&quot;, # ID of the pickup location.
    },
    &quot;placedDate&quot;: &quot;A String&quot;, # The date when the order was placed, in ISO 8601 format.
    &quot;promotions&quot;: [ # The details of the merchant provided promotions applied to the order.
        #
        # To determine which promotions apply to which products, check the `Promotions[].Benefits[].OfferIds` field against the `LineItems[].Product.OfferId` field for each promotion. If a promotion is applied to more than 1 `offerId`, divide the discount value by the number of affected offers to determine how much discount to apply to each `offerId`.
        #
        # Examples:
        # - To calculate the line item level discount for a single specific item: For each promotion, subtract the `Promotions[].Benefits[].Discount.value` amount from the `LineItems[].Price.value`.
        # - To calculate the line item level discount for multiple quantity of a specific item: For each promotion, divide the `Promotions[].Benefits[].Discount.value` by the quantity of products and substract it from `LineItems[].Product.Price.value` for each quantity item.
        #
        # Only 1 promotion can be applied to an offerId in a given order. To refund an item which had a promotion applied to it, make sure to refund the amount after first subtracting the promotion discount from the item price.
        #
        # More details about the program are here.
      {
        &quot;benefits&quot;: [
          {
            &quot;discount&quot;: { # The discount in the order price when the promotion is applied.
              &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
              &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
            },
            &quot;offerIds&quot;: [ # The OfferId(s) that were purchased in this order and map to this specific benefit of the promotion.
              &quot;A String&quot;,
            ],
            &quot;subType&quot;: &quot;A String&quot;, # Further describes the benefit of the promotion. Note that we will expand on this enumeration as we support new promotion sub-types.
                #
                # Acceptable values are:
                # - &quot;`buyMGetMoneyOff`&quot;
                # - &quot;`buyMGetNMoneyOff`&quot;
                # - &quot;`buyMGetNPercentOff`&quot;
                # - &quot;`buyMGetPercentOff`&quot;
                # - &quot;`freeGift`&quot;
                # - &quot;`freeGiftWithItemId`&quot;
                # - &quot;`freeGiftWithValue`&quot;
                # - &quot;`freeOvernightShipping`&quot;
                # - &quot;`freeShipping`&quot;
                # - &quot;`freeTwoDayShipping`&quot;
                # - &quot;`moneyOff`&quot;
                # - &quot;`percentageOff`&quot;
                # - &quot;`rewardPoints`&quot;
                # - &quot;`salePrice`&quot;
            &quot;taxImpact&quot;: { # The impact on tax when the promotion is applied.
              &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
              &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
            },
            &quot;type&quot;: &quot;A String&quot;, # Describes whether the promotion applies to products (e.g. 20% off) or to shipping (e.g. Free Shipping).
                #
                # Acceptable values are:
                # - &quot;`product`&quot;
                # - &quot;`shipping`&quot;
          },
        ],
        &quot;effectiveDates&quot;: &quot;A String&quot;, # The date and time frame when the promotion is active and ready for validation review. Note that the promotion live time may be delayed for a few hours due to the validation review.
            # Start date and end date are separated by a forward slash (/). The start date is specified by the format (YYYY-MM-DD), followed by the letter ?T?, the time of the day when the sale starts (in Greenwich Mean Time, GMT), followed by an expression of the time zone for the sale. The end date is in the same format.
        &quot;genericRedemptionCode&quot;: &quot;A String&quot;, # Optional. The text code that corresponds to the promotion when applied on the retailer?s website.
        &quot;id&quot;: &quot;A String&quot;, # The unique ID of the promotion.
        &quot;longTitle&quot;: &quot;A String&quot;, # The full title of the promotion.
        &quot;productApplicability&quot;: &quot;A String&quot;, # Whether the promotion is applicable to all products or only specific products.
            #
            # Acceptable values are:
            # - &quot;`allProducts`&quot;
            # - &quot;`specificProducts`&quot;
        &quot;redemptionChannel&quot;: &quot;A String&quot;, # Indicates that the promotion is valid online.
            #
            # Acceptable values are:
            # - &quot;`online`&quot;
      },
    ],
    &quot;refunds&quot;: [ # Refunds for the order.
      {
        &quot;actor&quot;: &quot;A String&quot;, # The actor that created the refund.
            #
            # Acceptable values are:
            # - &quot;`customer`&quot;
            # - &quot;`googleBot`&quot;
            # - &quot;`googleCustomerService`&quot;
            # - &quot;`googlePayments`&quot;
            # - &quot;`googleSabre`&quot;
            # - &quot;`merchant`&quot;
        &quot;amount&quot;: { # The amount that is refunded.
          &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
          &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
        },
        &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the item has been created, in ISO 8601 format.
        &quot;reason&quot;: &quot;A String&quot;, # The reason for the refund.
            #
            # Acceptable values are:
            # - &quot;`adjustment`&quot;
            # - &quot;`autoPostInternal`&quot;
            # - &quot;`autoPostInvalidBillingAddress`&quot;
            # - &quot;`autoPostNoInventory`&quot;
            # - &quot;`autoPostPriceError`&quot;
            # - &quot;`autoPostUndeliverableShippingAddress`&quot;
            # - &quot;`couponAbuse`&quot;
            # - &quot;`courtesyAdjustment`&quot;
            # - &quot;`customerCanceled`&quot;
            # - &quot;`customerDiscretionaryReturn`&quot;
            # - &quot;`customerInitiatedMerchantCancel`&quot;
            # - &quot;`customerSupportRequested`&quot;
            # - &quot;`deliveredLateByCarrier`&quot;
            # - &quot;`deliveredTooLate`&quot;
            # - &quot;`expiredItem`&quot;
            # - &quot;`failToPushOrderGoogleError`&quot;
            # - &quot;`failToPushOrderMerchantError`&quot;
            # - &quot;`failToPushOrderMerchantFulfillmentError`&quot;
            # - &quot;`failToPushOrderToMerchant`&quot;
            # - &quot;`failToPushOrderToMerchantOutOfStock`&quot;
            # - &quot;`feeAdjustment`&quot;
            # - &quot;`invalidCoupon`&quot;
            # - &quot;`lateShipmentCredit`&quot;
            # - &quot;`malformedShippingAddress`&quot;
            # - &quot;`merchantDidNotShipOnTime`&quot;
            # - &quot;`noInventory`&quot;
            # - &quot;`orderTimeout`&quot;
            # - &quot;`other`&quot;
            # - &quot;`paymentAbuse`&quot;
            # - &quot;`paymentDeclined`&quot;
            # - &quot;`priceAdjustment`&quot;
            # - &quot;`priceError`&quot;
            # - &quot;`productArrivedDamaged`&quot;
            # - &quot;`productNotAsDescribed`&quot;
            # - &quot;`promoReallocation`&quot;
            # - &quot;`qualityNotAsExpected`&quot;
            # - &quot;`returnRefundAbuse`&quot;
            # - &quot;`shippingCostAdjustment`&quot;
            # - &quot;`shippingPriceError`&quot;
            # - &quot;`taxAdjustment`&quot;
            # - &quot;`taxError`&quot;
            # - &quot;`undeliverableShippingAddress`&quot;
            # - &quot;`unsupportedPoBoxAddress`&quot;
            # - &quot;`wrongProductShipped`&quot;
        &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
      },
    ],
    &quot;shipments&quot;: [ # Shipments of the order.
      {
        &quot;carrier&quot;: &quot;A String&quot;, # The carrier handling the shipment.
            #
            # For supported carriers, Google includes the carrier name and tracking URL in emails to customers. For select supported carriers, Google also automatically updates the shipment status based on the provided shipment ID. Note: You can also use unsupported carriers, but emails to customers will not include the carrier name or tracking URL, and there will be no automatic order status updates.
            # Supported carriers for US are:
            # - &quot;`ups`&quot; (United Parcel Service) automatic status updates
            # - &quot;`usps`&quot; (United States Postal Service) automatic status updates
            # - &quot;`fedex`&quot; (FedEx) automatic status updates
            # - &quot;`dhl`&quot; (DHL eCommerce) automatic status updates (US only)
            # - &quot;`ontrac`&quot; (OnTrac) automatic status updates
            # - &quot;`dhl express`&quot; (DHL Express)
            # - &quot;`deliv`&quot; (Deliv)
            # - &quot;`dynamex`&quot; (TForce)
            # - &quot;`lasership`&quot; (LaserShip)
            # - &quot;`mpx`&quot; (Military Parcel Xpress)
            # - &quot;`uds`&quot; (United Delivery Service)
            # - &quot;`efw`&quot; (Estes Forwarding Worldwide)
            # - &quot;`jd logistics`&quot; (JD Logistics)
            # - &quot;`yunexpress`&quot; (YunExpress)
            # - &quot;`china post`&quot; (China Post)
            # - &quot;`china ems`&quot; (China Post Express Mail Service)
            # - &quot;`singapore post`&quot; (Singapore Post)
            # - &quot;`pos malaysia`&quot; (Pos Malaysia)
            # - &quot;`postnl`&quot; (PostNL)
            # - &quot;`ptt`&quot; (PTT Turkish Post)
            # - &quot;`eub`&quot; (ePacket)
            # - &quot;`chukou1`&quot; (Chukou1 Logistics)
            # - &quot;`bestex`&quot; (Best Express)
            # - &quot;`canada post`&quot; (Canada Post)
            # - &quot;`purolator`&quot; (Purolator)
            # - &quot;`canpar`&quot; (Canpar)
            # - &quot;`india post`&quot; (India Post)
            # - &quot;`blue dart`&quot; (Blue Dart)
            # - &quot;`delhivery`&quot; (Delhivery)
            # - &quot;`dtdc`&quot; (DTDC)
            # - &quot;`tpc india`&quot; (TPC India)
            # Supported carriers for FR are:
            # - &quot;`la poste`&quot; (La Poste) automatic status updates
            # - &quot;`colissimo`&quot; (Colissimo by La Poste) automatic status updates
            # - &quot;`ups`&quot; (United Parcel Service) automatic status updates
            # - &quot;`chronopost`&quot; (Chronopost by La Poste)
            # - &quot;`gls`&quot; (General Logistics Systems France)
            # - &quot;`dpd`&quot; (DPD Group by GeoPost)
            # - &quot;`bpost`&quot; (Belgian Post Group)
            # - &quot;`colis prive`&quot; (Colis Privé)
            # - &quot;`boxtal`&quot; (Boxtal)
            # - &quot;`geodis`&quot; (GEODIS)
            # - &quot;`tnt`&quot; (TNT)
            # - &quot;`db schenker`&quot; (DB Schenker)
            # - &quot;`aramex`&quot; (Aramex)
        &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the shipment has been created, in ISO 8601 format.
        &quot;deliveryDate&quot;: &quot;A String&quot;, # Date on which the shipment has been delivered, in ISO 8601 format. Present only if `status` is `delivered`
        &quot;id&quot;: &quot;A String&quot;, # The ID of the shipment.
        &quot;lineItems&quot;: [ # The line items that are shipped.
          {
            &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item that is shipped. This value is assigned by Google when an order is created. Either lineItemId or productId is required.
            &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to ship. This is the REST ID used in the products service. Either lineItemId or productId is required.
            &quot;quantity&quot;: 42, # The quantity that is shipped.
          },
        ],
        &quot;scheduledDeliveryDetails&quot;: { # Delivery details of the shipment if scheduling is needed.
          &quot;carrierPhoneNumber&quot;: &quot;A String&quot;, # The phone number of the carrier fulfilling the delivery. The phone number is formatted as the international notation in ITU-T Recommendation E.123 (e.g., &quot;+41 44 668 1800&quot;).
          &quot;scheduledDate&quot;: &quot;A String&quot;, # The date a shipment is scheduled for delivery, in ISO 8601 format.
        },
        &quot;status&quot;: &quot;A String&quot;, # The status of the shipment.
            #
            # Acceptable values are:
            # - &quot;`delivered`&quot;
            # - &quot;`readyForPickup`&quot;
            # - &quot;`shipped`&quot;
            # - &quot;`undeliverable`&quot;
        &quot;trackingId&quot;: &quot;A String&quot;, # The tracking ID for the shipment.
      },
    ],
    &quot;shippingCost&quot;: { # The total cost of shipping for all items.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;shippingCostTax&quot;: { # The tax for the total shipping cost.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;shippingOption&quot;: &quot;A String&quot;, # Deprecated. Shipping details are provided with line items instead.
        #
        # Acceptable values are:
        # - &quot;`economy`&quot;
        # - &quot;`expedited`&quot;
        # - &quot;`oneDay`&quot;
        # - &quot;`sameDay`&quot;
        # - &quot;`standard`&quot;
        # - &quot;`twoDay`&quot;
    &quot;status&quot;: &quot;A String&quot;, # The status of the order.
        #
        # Acceptable values are:
        # - &quot;`canceled`&quot;
        # - &quot;`delivered`&quot;
        # - &quot;`inProgress`&quot;
        # - &quot;`partiallyDelivered`&quot;
        # - &quot;`partiallyReturned`&quot;
        # - &quot;`partiallyShipped`&quot;
        # - &quot;`pendingShipment`&quot;
        # - &quot;`returned`&quot;
        # - &quot;`shipped`&quot;
    &quot;taxCollector&quot;: &quot;A String&quot;, # The party responsible for collecting and remitting taxes.
        #
        # Acceptable values are:
        # - &quot;`marketplaceFacilitator`&quot;
        # - &quot;`merchant`&quot;
  }</pre>
</div>

<div class="method">
    <code class="details" id="getbymerchantorderid">getbymerchantorderid(merchantId, merchantOrderId)</code>
  <pre>Retrieves an order using merchant order ID.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  merchantOrderId: string, The merchant order ID to be looked for. (required)

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#ordersGetByMerchantOrderIdResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersGetByMerchantOrderIdResponse&quot;.
    &quot;order&quot;: { # Order. Production access (all methods) requires the order manager role. Sandbox access does not. (== resource_for v2.orders ==) (== resource_for v2.1.orders ==) # The requested order.
      &quot;acknowledged&quot;: True or False, # Whether the order was acknowledged.
      &quot;channelType&quot;: &quot;A String&quot;, # Deprecated.
          #
          # Acceptable values are:
          # - &quot;`googleExpress`&quot;
          # - &quot;`purchasesOnGoogle`&quot;
      &quot;customer&quot;: { # The details of the customer who placed the order.
        &quot;email&quot;: &quot;A String&quot;, # Deprecated.
        &quot;explicitMarketingPreference&quot;: True or False, # Deprecated. Please use marketingRightsInfo instead.
        &quot;fullName&quot;: &quot;A String&quot;, # Full name of the customer.
        &quot;invoiceReceivingEmail&quot;: &quot;A String&quot;, # Email address for the merchant to send value-added tax or invoice documentation of the order. Only the last document sent is made available to the customer. For more information, see  About automated VAT invoicing for Shopping Actions.
        &quot;marketingRightsInfo&quot;: { # Customer&#x27;s marketing preferences. Contains the marketing opt-in information that is current at the time that the merchant call. User preference selections can change from one order to the next so preferences must be checked with every order.
          &quot;explicitMarketingPreference&quot;: &quot;A String&quot;, # Last known customer selection regarding marketing preferences. In certain cases this selection might not be known, so this field would be empty. If a customer selected `granted` in their most recent order, they can be subscribed to marketing emails. Customers who have chosen `denied` must not be subscribed, or must be unsubscribed if already opted-in.
              #
              # Acceptable values are:
              # - &quot;`denied`&quot;
              # - &quot;`granted`&quot;
          &quot;lastUpdatedTimestamp&quot;: &quot;A String&quot;, # Timestamp when last time marketing preference was updated. Could be empty, if user wasn&#x27;t offered a selection yet.
          &quot;marketingEmailAddress&quot;: &quot;A String&quot;, # Email address that can be used for marketing purposes. The field may be empty even if `explicitMarketingPreference` is &#x27;granted&#x27;. This happens when retrieving an old order from the customer who deleted their account.
        },
      },
      &quot;deliveryDetails&quot;: { # Delivery details for shipments of type `delivery`.
        &quot;address&quot;: { # The delivery address
          &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
          &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
              # John Smith
              # 1600 Amphitheatre Parkway
              # Mountain View, CA, 94043
              # United States
            &quot;A String&quot;,
          ],
          &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
          &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
          &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
          &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
          &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
          &quot;streetAddress&quot;: [ # Street-level part of the address.
            &quot;A String&quot;,
          ],
        },
        &quot;phoneNumber&quot;: &quot;A String&quot;, # The phone number of the person receiving the delivery.
      },
      &quot;id&quot;: &quot;A String&quot;, # The REST ID of the order. Globally unique.
      &quot;kind&quot;: &quot;content#order&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#order`&quot;
      &quot;lineItems&quot;: [ # Line items that are ordered.
        {
          &quot;annotations&quot;: [ # Annotations that are attached to the line item.
            {
              &quot;key&quot;: &quot;A String&quot;, # Key for additional merchant provided (as key-value pairs) annotation about the line item.
              &quot;value&quot;: &quot;A String&quot;, # Value for additional merchant provided (as key-value pairs) annotation about the line item.
            },
          ],
          &quot;cancellations&quot;: [ # Cancellations of the line item.
            {
              &quot;actor&quot;: &quot;A String&quot;, # The actor that created the cancellation.
                  #
                  # Acceptable values are:
                  # - &quot;`customer`&quot;
                  # - &quot;`googleBot`&quot;
                  # - &quot;`googleCustomerService`&quot;
                  # - &quot;`googlePayments`&quot;
                  # - &quot;`googleSabre`&quot;
                  # - &quot;`merchant`&quot;
              &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the cancellation has been created, in ISO 8601 format.
              &quot;quantity&quot;: 42, # The quantity that was canceled.
              &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation. Orders that are canceled with a noInventory reason will lead to the removal of the product from Shopping Actions until you make an update to that product. This will not affect your Shopping ads.
                  #
                  # Acceptable values are:
                  # - &quot;`autoPostInternal`&quot;
                  # - &quot;`autoPostInvalidBillingAddress`&quot;
                  # - &quot;`autoPostNoInventory`&quot;
                  # - &quot;`autoPostPriceError`&quot;
                  # - &quot;`autoPostUndeliverableShippingAddress`&quot;
                  # - &quot;`couponAbuse`&quot;
                  # - &quot;`customerCanceled`&quot;
                  # - &quot;`customerInitiatedCancel`&quot;
                  # - &quot;`customerSupportRequested`&quot;
                  # - &quot;`failToPushOrderGoogleError`&quot;
                  # - &quot;`failToPushOrderMerchantError`&quot;
                  # - &quot;`failToPushOrderMerchantFulfillmentError`&quot;
                  # - &quot;`failToPushOrderToMerchant`&quot;
                  # - &quot;`failToPushOrderToMerchantOutOfStock`&quot;
                  # - &quot;`invalidCoupon`&quot;
                  # - &quot;`malformedShippingAddress`&quot;
                  # - &quot;`merchantDidNotShipOnTime`&quot;
                  # - &quot;`noInventory`&quot;
                  # - &quot;`orderTimeout`&quot;
                  # - &quot;`other`&quot;
                  # - &quot;`paymentAbuse`&quot;
                  # - &quot;`paymentDeclined`&quot;
                  # - &quot;`priceError`&quot;
                  # - &quot;`returnRefundAbuse`&quot;
                  # - &quot;`shippingPriceError`&quot;
                  # - &quot;`taxError`&quot;
                  # - &quot;`undeliverableShippingAddress`&quot;
                  # - &quot;`unsupportedPoBoxAddress`&quot;
              &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
            },
          ],
          &quot;id&quot;: &quot;A String&quot;, # The ID of the line item.
          &quot;price&quot;: { # Total price for the line item. For example, if two items for $10 are purchased, the total price will be $20.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;product&quot;: { # Product data as seen by customer from the time of the order placement. Note that certain attributes values (e.g. title or gtin) might be reformatted and no longer match values submitted via product feed.
            &quot;brand&quot;: &quot;A String&quot;, # Brand of the item.
            &quot;channel&quot;: &quot;A String&quot;, # The item&#x27;s channel (online or local).
                #
                # Acceptable values are:
                # - &quot;`local`&quot;
                # - &quot;`online`&quot;
            &quot;condition&quot;: &quot;A String&quot;, # Condition or state of the item.
                #
                # Acceptable values are:
                # - &quot;`new`&quot;
                # - &quot;`refurbished`&quot;
                # - &quot;`used`&quot;
            &quot;contentLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language code for the item.
            &quot;fees&quot;: [ # Associated fees at order creation time.
              {
                &quot;amount&quot;: { # Amount of the fee.
                  &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                  &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                },
                &quot;name&quot;: &quot;A String&quot;, # Name of the fee.
              },
            ],
            &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number (GTIN) of the item.
            &quot;id&quot;: &quot;A String&quot;, # The REST ID of the product.
            &quot;imageLink&quot;: &quot;A String&quot;, # URL of an image of the item.
            &quot;itemGroupId&quot;: &quot;A String&quot;, # Shared identifier for all variants of the same product.
            &quot;mpn&quot;: &quot;A String&quot;, # Manufacturer Part Number (MPN) of the item.
            &quot;offerId&quot;: &quot;A String&quot;, # An identifier of the item.
            &quot;price&quot;: { # Price of the item.
              &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
              &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
            },
            &quot;shownImage&quot;: &quot;A String&quot;, # URL to the cached image shown to the user when order was placed.
            &quot;targetCountry&quot;: &quot;A String&quot;, # The CLDR territory code of the target country of the product.
            &quot;title&quot;: &quot;A String&quot;, # The title of the product.
            &quot;variantAttributes&quot;: [ # Variant attributes for the item. These are dimensions of the product, such as color, gender, material, pattern, and size. You can find a comprehensive list of variant attributes here.
              {
                &quot;dimension&quot;: &quot;A String&quot;, # The dimension of the variant.
                &quot;value&quot;: &quot;A String&quot;, # The value for the dimension.
              },
            ],
          },
          &quot;quantityCanceled&quot;: 42, # Number of items canceled.
          &quot;quantityDelivered&quot;: 42, # Number of items delivered.
          &quot;quantityOrdered&quot;: 42, # Number of items ordered.
          &quot;quantityPending&quot;: 42, # Number of items pending.
          &quot;quantityReadyForPickup&quot;: 42, # Number of items ready for pickup.
          &quot;quantityReturned&quot;: 42, # Number of items returned.
          &quot;quantityShipped&quot;: 42, # Number of items shipped.
          &quot;returnInfo&quot;: { # Details of the return policy for the line item.
            &quot;daysToReturn&quot;: 42, # Required. How many days later the item can be returned.
            &quot;isReturnable&quot;: True or False, # Required. Whether the item is returnable.
            &quot;policyUrl&quot;: &quot;A String&quot;, # Required. URL of the item return policy.
          },
          &quot;returns&quot;: [ # Returns of the line item.
            {
              &quot;actor&quot;: &quot;A String&quot;, # The actor that created the refund.
                  #
                  # Acceptable values are:
                  # - &quot;`customer`&quot;
                  # - &quot;`googleBot`&quot;
                  # - &quot;`googleCustomerService`&quot;
                  # - &quot;`googlePayments`&quot;
                  # - &quot;`googleSabre`&quot;
                  # - &quot;`merchant`&quot;
              &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the item has been created, in ISO 8601 format.
              &quot;quantity&quot;: 42, # Quantity that is returned.
              &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
                  #
                  # Acceptable values are:
                  # - &quot;`customerDiscretionaryReturn`&quot;
                  # - &quot;`customerInitiatedMerchantCancel`&quot;
                  # - &quot;`deliveredTooLate`&quot;
                  # - &quot;`expiredItem`&quot;
                  # - &quot;`invalidCoupon`&quot;
                  # - &quot;`malformedShippingAddress`&quot;
                  # - &quot;`other`&quot;
                  # - &quot;`productArrivedDamaged`&quot;
                  # - &quot;`productNotAsDescribed`&quot;
                  # - &quot;`qualityNotAsExpected`&quot;
                  # - &quot;`undeliverableShippingAddress`&quot;
                  # - &quot;`unsupportedPoBoxAddress`&quot;
                  # - &quot;`wrongProductShipped`&quot;
              &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
            },
          ],
          &quot;shippingDetails&quot;: { # Details of the requested shipping for the line item.
            &quot;deliverByDate&quot;: &quot;A String&quot;, # Required. The delivery by date, in ISO 8601 format.
            &quot;method&quot;: { # Required. Details of the shipping method.
              &quot;carrier&quot;: &quot;A String&quot;, # The carrier for the shipping. Optional. See `shipments[].carrier` for a list of acceptable values.
              &quot;maxDaysInTransit&quot;: 42, # Required. Maximum transit time.
              &quot;methodName&quot;: &quot;A String&quot;, # Required. The name of the shipping method.
              &quot;minDaysInTransit&quot;: 42, # Required. Minimum transit time.
            },
            &quot;shipByDate&quot;: &quot;A String&quot;, # Required. The ship by date, in ISO 8601 format.
            &quot;type&quot;: &quot;A String&quot;, # Type of shipment. Indicates whether `deliveryDetails` or `pickupDetails` is applicable for this shipment.
                #
                # Acceptable values are:
                # - &quot;`delivery`&quot;
                # - &quot;`pickup`&quot;
          },
          &quot;tax&quot;: { # Total tax amount for the line item. For example, if two items are purchased, and each have a cost tax of $2, the total tax amount will be $4.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
        },
      ],
      &quot;merchantId&quot;: &quot;A String&quot;,
      &quot;merchantOrderId&quot;: &quot;A String&quot;, # Merchant-provided ID of the order.
      &quot;netAmount&quot;: { # The net amount for the order. For example, if an order was originally for a grand total of $100 and a refund was issued for $20, the net amount will be $80.
        &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
        &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
      },
      &quot;paymentMethod&quot;: { # The details of the payment method.
        &quot;billingAddress&quot;: { # The billing address.
          &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
          &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
              # John Smith
              # 1600 Amphitheatre Parkway
              # Mountain View, CA, 94043
              # United States
            &quot;A String&quot;,
          ],
          &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
          &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
          &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
          &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
          &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
          &quot;streetAddress&quot;: [ # Street-level part of the address.
            &quot;A String&quot;,
          ],
        },
        &quot;expirationMonth&quot;: 42, # The card expiration month (January = 1, February = 2 etc.).
        &quot;expirationYear&quot;: 42, # The card expiration year (4-digit, e.g. 2015).
        &quot;lastFourDigits&quot;: &quot;A String&quot;, # The last four digits of the card number.
        &quot;phoneNumber&quot;: &quot;A String&quot;, # The billing phone number.
        &quot;type&quot;: &quot;A String&quot;, # The type of instrument.
            #
            # Acceptable values are:
            # - &quot;`AMEX`&quot;
            # - &quot;`DISCOVER`&quot;
            # - &quot;`JCB`&quot;
            # - &quot;`MASTERCARD`&quot;
            # - &quot;`UNIONPAY`&quot;
            # - &quot;`VISA`&quot;
            # - &quot;``&quot;
      },
      &quot;paymentStatus&quot;: &quot;A String&quot;, # The status of the payment.
          #
          # Acceptable values are:
          # - &quot;`paymentCaptured`&quot;
          # - &quot;`paymentRejected`&quot;
          # - &quot;`paymentSecured`&quot;
          # - &quot;`pendingAuthorization`&quot;
      &quot;pickupDetails&quot;: { # Pickup details for shipments of type `pickup`.
        &quot;address&quot;: { # Address of the pickup location where the shipment should be sent. Note that `recipientName` in the address is the name of the business at the pickup location.
          &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
          &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
              # John Smith
              # 1600 Amphitheatre Parkway
              # Mountain View, CA, 94043
              # United States
            &quot;A String&quot;,
          ],
          &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
          &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
          &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
          &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
          &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
          &quot;streetAddress&quot;: [ # Street-level part of the address.
            &quot;A String&quot;,
          ],
        },
        &quot;collectors&quot;: [ # Collectors authorized to pick up shipment from the pickup location.
          {
            &quot;name&quot;: &quot;A String&quot;, # Name of the person picking up the shipment.
            &quot;phoneNumber&quot;: &quot;A String&quot;, # Phone number of the person picking up the shipment.
          },
        ],
        &quot;locationId&quot;: &quot;A String&quot;, # ID of the pickup location.
      },
      &quot;placedDate&quot;: &quot;A String&quot;, # The date when the order was placed, in ISO 8601 format.
      &quot;promotions&quot;: [ # The details of the merchant provided promotions applied to the order.
          #
          # To determine which promotions apply to which products, check the `Promotions[].Benefits[].OfferIds` field against the `LineItems[].Product.OfferId` field for each promotion. If a promotion is applied to more than 1 `offerId`, divide the discount value by the number of affected offers to determine how much discount to apply to each `offerId`.
          #
          # Examples:
          # - To calculate the line item level discount for a single specific item: For each promotion, subtract the `Promotions[].Benefits[].Discount.value` amount from the `LineItems[].Price.value`.
          # - To calculate the line item level discount for multiple quantity of a specific item: For each promotion, divide the `Promotions[].Benefits[].Discount.value` by the quantity of products and substract it from `LineItems[].Product.Price.value` for each quantity item.
          #
          # Only 1 promotion can be applied to an offerId in a given order. To refund an item which had a promotion applied to it, make sure to refund the amount after first subtracting the promotion discount from the item price.
          #
          # More details about the program are here.
        {
          &quot;benefits&quot;: [
            {
              &quot;discount&quot;: { # The discount in the order price when the promotion is applied.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;offerIds&quot;: [ # The OfferId(s) that were purchased in this order and map to this specific benefit of the promotion.
                &quot;A String&quot;,
              ],
              &quot;subType&quot;: &quot;A String&quot;, # Further describes the benefit of the promotion. Note that we will expand on this enumeration as we support new promotion sub-types.
                  #
                  # Acceptable values are:
                  # - &quot;`buyMGetMoneyOff`&quot;
                  # - &quot;`buyMGetNMoneyOff`&quot;
                  # - &quot;`buyMGetNPercentOff`&quot;
                  # - &quot;`buyMGetPercentOff`&quot;
                  # - &quot;`freeGift`&quot;
                  # - &quot;`freeGiftWithItemId`&quot;
                  # - &quot;`freeGiftWithValue`&quot;
                  # - &quot;`freeOvernightShipping`&quot;
                  # - &quot;`freeShipping`&quot;
                  # - &quot;`freeTwoDayShipping`&quot;
                  # - &quot;`moneyOff`&quot;
                  # - &quot;`percentageOff`&quot;
                  # - &quot;`rewardPoints`&quot;
                  # - &quot;`salePrice`&quot;
              &quot;taxImpact&quot;: { # The impact on tax when the promotion is applied.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;type&quot;: &quot;A String&quot;, # Describes whether the promotion applies to products (e.g. 20% off) or to shipping (e.g. Free Shipping).
                  #
                  # Acceptable values are:
                  # - &quot;`product`&quot;
                  # - &quot;`shipping`&quot;
            },
          ],
          &quot;effectiveDates&quot;: &quot;A String&quot;, # The date and time frame when the promotion is active and ready for validation review. Note that the promotion live time may be delayed for a few hours due to the validation review.
              # Start date and end date are separated by a forward slash (/). The start date is specified by the format (YYYY-MM-DD), followed by the letter ?T?, the time of the day when the sale starts (in Greenwich Mean Time, GMT), followed by an expression of the time zone for the sale. The end date is in the same format.
          &quot;genericRedemptionCode&quot;: &quot;A String&quot;, # Optional. The text code that corresponds to the promotion when applied on the retailer?s website.
          &quot;id&quot;: &quot;A String&quot;, # The unique ID of the promotion.
          &quot;longTitle&quot;: &quot;A String&quot;, # The full title of the promotion.
          &quot;productApplicability&quot;: &quot;A String&quot;, # Whether the promotion is applicable to all products or only specific products.
              #
              # Acceptable values are:
              # - &quot;`allProducts`&quot;
              # - &quot;`specificProducts`&quot;
          &quot;redemptionChannel&quot;: &quot;A String&quot;, # Indicates that the promotion is valid online.
              #
              # Acceptable values are:
              # - &quot;`online`&quot;
        },
      ],
      &quot;refunds&quot;: [ # Refunds for the order.
        {
          &quot;actor&quot;: &quot;A String&quot;, # The actor that created the refund.
              #
              # Acceptable values are:
              # - &quot;`customer`&quot;
              # - &quot;`googleBot`&quot;
              # - &quot;`googleCustomerService`&quot;
              # - &quot;`googlePayments`&quot;
              # - &quot;`googleSabre`&quot;
              # - &quot;`merchant`&quot;
          &quot;amount&quot;: { # The amount that is refunded.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
          &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the item has been created, in ISO 8601 format.
          &quot;reason&quot;: &quot;A String&quot;, # The reason for the refund.
              #
              # Acceptable values are:
              # - &quot;`adjustment`&quot;
              # - &quot;`autoPostInternal`&quot;
              # - &quot;`autoPostInvalidBillingAddress`&quot;
              # - &quot;`autoPostNoInventory`&quot;
              # - &quot;`autoPostPriceError`&quot;
              # - &quot;`autoPostUndeliverableShippingAddress`&quot;
              # - &quot;`couponAbuse`&quot;
              # - &quot;`courtesyAdjustment`&quot;
              # - &quot;`customerCanceled`&quot;
              # - &quot;`customerDiscretionaryReturn`&quot;
              # - &quot;`customerInitiatedMerchantCancel`&quot;
              # - &quot;`customerSupportRequested`&quot;
              # - &quot;`deliveredLateByCarrier`&quot;
              # - &quot;`deliveredTooLate`&quot;
              # - &quot;`expiredItem`&quot;
              # - &quot;`failToPushOrderGoogleError`&quot;
              # - &quot;`failToPushOrderMerchantError`&quot;
              # - &quot;`failToPushOrderMerchantFulfillmentError`&quot;
              # - &quot;`failToPushOrderToMerchant`&quot;
              # - &quot;`failToPushOrderToMerchantOutOfStock`&quot;
              # - &quot;`feeAdjustment`&quot;
              # - &quot;`invalidCoupon`&quot;
              # - &quot;`lateShipmentCredit`&quot;
              # - &quot;`malformedShippingAddress`&quot;
              # - &quot;`merchantDidNotShipOnTime`&quot;
              # - &quot;`noInventory`&quot;
              # - &quot;`orderTimeout`&quot;
              # - &quot;`other`&quot;
              # - &quot;`paymentAbuse`&quot;
              # - &quot;`paymentDeclined`&quot;
              # - &quot;`priceAdjustment`&quot;
              # - &quot;`priceError`&quot;
              # - &quot;`productArrivedDamaged`&quot;
              # - &quot;`productNotAsDescribed`&quot;
              # - &quot;`promoReallocation`&quot;
              # - &quot;`qualityNotAsExpected`&quot;
              # - &quot;`returnRefundAbuse`&quot;
              # - &quot;`shippingCostAdjustment`&quot;
              # - &quot;`shippingPriceError`&quot;
              # - &quot;`taxAdjustment`&quot;
              # - &quot;`taxError`&quot;
              # - &quot;`undeliverableShippingAddress`&quot;
              # - &quot;`unsupportedPoBoxAddress`&quot;
              # - &quot;`wrongProductShipped`&quot;
          &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
        },
      ],
      &quot;shipments&quot;: [ # Shipments of the order.
        {
          &quot;carrier&quot;: &quot;A String&quot;, # The carrier handling the shipment.
              #
              # For supported carriers, Google includes the carrier name and tracking URL in emails to customers. For select supported carriers, Google also automatically updates the shipment status based on the provided shipment ID. Note: You can also use unsupported carriers, but emails to customers will not include the carrier name or tracking URL, and there will be no automatic order status updates.
              # Supported carriers for US are:
              # - &quot;`ups`&quot; (United Parcel Service) automatic status updates
              # - &quot;`usps`&quot; (United States Postal Service) automatic status updates
              # - &quot;`fedex`&quot; (FedEx) automatic status updates
              # - &quot;`dhl`&quot; (DHL eCommerce) automatic status updates (US only)
              # - &quot;`ontrac`&quot; (OnTrac) automatic status updates
              # - &quot;`dhl express`&quot; (DHL Express)
              # - &quot;`deliv`&quot; (Deliv)
              # - &quot;`dynamex`&quot; (TForce)
              # - &quot;`lasership`&quot; (LaserShip)
              # - &quot;`mpx`&quot; (Military Parcel Xpress)
              # - &quot;`uds`&quot; (United Delivery Service)
              # - &quot;`efw`&quot; (Estes Forwarding Worldwide)
              # - &quot;`jd logistics`&quot; (JD Logistics)
              # - &quot;`yunexpress`&quot; (YunExpress)
              # - &quot;`china post`&quot; (China Post)
              # - &quot;`china ems`&quot; (China Post Express Mail Service)
              # - &quot;`singapore post`&quot; (Singapore Post)
              # - &quot;`pos malaysia`&quot; (Pos Malaysia)
              # - &quot;`postnl`&quot; (PostNL)
              # - &quot;`ptt`&quot; (PTT Turkish Post)
              # - &quot;`eub`&quot; (ePacket)
              # - &quot;`chukou1`&quot; (Chukou1 Logistics)
              # - &quot;`bestex`&quot; (Best Express)
              # - &quot;`canada post`&quot; (Canada Post)
              # - &quot;`purolator`&quot; (Purolator)
              # - &quot;`canpar`&quot; (Canpar)
              # - &quot;`india post`&quot; (India Post)
              # - &quot;`blue dart`&quot; (Blue Dart)
              # - &quot;`delhivery`&quot; (Delhivery)
              # - &quot;`dtdc`&quot; (DTDC)
              # - &quot;`tpc india`&quot; (TPC India)
              # Supported carriers for FR are:
              # - &quot;`la poste`&quot; (La Poste) automatic status updates
              # - &quot;`colissimo`&quot; (Colissimo by La Poste) automatic status updates
              # - &quot;`ups`&quot; (United Parcel Service) automatic status updates
              # - &quot;`chronopost`&quot; (Chronopost by La Poste)
              # - &quot;`gls`&quot; (General Logistics Systems France)
              # - &quot;`dpd`&quot; (DPD Group by GeoPost)
              # - &quot;`bpost`&quot; (Belgian Post Group)
              # - &quot;`colis prive`&quot; (Colis Privé)
              # - &quot;`boxtal`&quot; (Boxtal)
              # - &quot;`geodis`&quot; (GEODIS)
              # - &quot;`tnt`&quot; (TNT)
              # - &quot;`db schenker`&quot; (DB Schenker)
              # - &quot;`aramex`&quot; (Aramex)
          &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the shipment has been created, in ISO 8601 format.
          &quot;deliveryDate&quot;: &quot;A String&quot;, # Date on which the shipment has been delivered, in ISO 8601 format. Present only if `status` is `delivered`
          &quot;id&quot;: &quot;A String&quot;, # The ID of the shipment.
          &quot;lineItems&quot;: [ # The line items that are shipped.
            {
              &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item that is shipped. This value is assigned by Google when an order is created. Either lineItemId or productId is required.
              &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to ship. This is the REST ID used in the products service. Either lineItemId or productId is required.
              &quot;quantity&quot;: 42, # The quantity that is shipped.
            },
          ],
          &quot;scheduledDeliveryDetails&quot;: { # Delivery details of the shipment if scheduling is needed.
            &quot;carrierPhoneNumber&quot;: &quot;A String&quot;, # The phone number of the carrier fulfilling the delivery. The phone number is formatted as the international notation in ITU-T Recommendation E.123 (e.g., &quot;+41 44 668 1800&quot;).
            &quot;scheduledDate&quot;: &quot;A String&quot;, # The date a shipment is scheduled for delivery, in ISO 8601 format.
          },
          &quot;status&quot;: &quot;A String&quot;, # The status of the shipment.
              #
              # Acceptable values are:
              # - &quot;`delivered`&quot;
              # - &quot;`readyForPickup`&quot;
              # - &quot;`shipped`&quot;
              # - &quot;`undeliverable`&quot;
          &quot;trackingId&quot;: &quot;A String&quot;, # The tracking ID for the shipment.
        },
      ],
      &quot;shippingCost&quot;: { # The total cost of shipping for all items.
        &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
        &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
      },
      &quot;shippingCostTax&quot;: { # The tax for the total shipping cost.
        &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
        &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
      },
      &quot;shippingOption&quot;: &quot;A String&quot;, # Deprecated. Shipping details are provided with line items instead.
          #
          # Acceptable values are:
          # - &quot;`economy`&quot;
          # - &quot;`expedited`&quot;
          # - &quot;`oneDay`&quot;
          # - &quot;`sameDay`&quot;
          # - &quot;`standard`&quot;
          # - &quot;`twoDay`&quot;
      &quot;status&quot;: &quot;A String&quot;, # The status of the order.
          #
          # Acceptable values are:
          # - &quot;`canceled`&quot;
          # - &quot;`delivered`&quot;
          # - &quot;`inProgress`&quot;
          # - &quot;`partiallyDelivered`&quot;
          # - &quot;`partiallyReturned`&quot;
          # - &quot;`partiallyShipped`&quot;
          # - &quot;`pendingShipment`&quot;
          # - &quot;`returned`&quot;
          # - &quot;`shipped`&quot;
      &quot;taxCollector&quot;: &quot;A String&quot;, # The party responsible for collecting and remitting taxes.
          #
          # Acceptable values are:
          # - &quot;`marketplaceFacilitator`&quot;
          # - &quot;`merchant`&quot;
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="gettestordertemplate">gettestordertemplate(merchantId, templateName, country=None)</code>
  <pre>Sandbox only. Retrieves an order template that can be used to quickly create a new order in sandbox.

Args:
  merchantId: string, The ID of the account that should manage the order. This cannot be a multi-client account. (required)
  templateName: string, The name of the template to retrieve. (required)
    Allowed values
      template1 - 
      template1a - 
      template1b - 
      template2 - 
      template3 - 
  country: string, The country of the template to retrieve. Defaults to `US`.

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#ordersGetTestOrderTemplateResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersGetTestOrderTemplateResponse&quot;.
    &quot;template&quot;: { # The requested test order template.
      &quot;customer&quot;: { # Required. The details of the customer who placed the order.
        &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the customer.
            #
            # Acceptable values are:
            # - &quot;`pog.dwight.schrute@gmail.com`&quot;
            # - &quot;`pog.jim.halpert@gmail.com`&quot;
            # - &quot;`penpog.pam.beesly@gmail.comding`&quot;
        &quot;explicitMarketingPreference&quot;: True or False, # Deprecated. Please use marketingRightsInfo instead.
        &quot;fullName&quot;: &quot;A String&quot;, # Full name of the customer.
        &quot;marketingRightsInfo&quot;: { # Customer&#x27;s marketing preferences.
          &quot;explicitMarketingPreference&quot;: &quot;A String&quot;, # Last know user use selection regards marketing preferences. In certain cases selection might not be known, so this field would be empty.
              #
              # Acceptable values are:
              # - &quot;`denied`&quot;
              # - &quot;`granted`&quot;
          &quot;lastUpdatedTimestamp&quot;: &quot;A String&quot;, # Timestamp when last time marketing preference was updated. Could be empty, if user wasn&#x27;t offered a selection yet.
        },
      },
      &quot;enableOrderinvoices&quot;: True or False, # Whether the orderinvoices service should support this order.
      &quot;kind&quot;: &quot;content#testOrder&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#testOrder`&quot;
      &quot;lineItems&quot;: [ # Required. Line items that are ordered. At least one line item must be provided.
        {
          &quot;product&quot;: { # Required. Product data from the time of the order placement.
            &quot;brand&quot;: &quot;A String&quot;, # Required. Brand of the item.
            &quot;channel&quot;: &quot;A String&quot;, # Deprecated.
                #
                # Acceptable values are:
                # - &quot;`online`&quot;
            &quot;condition&quot;: &quot;A String&quot;, # Required. Condition or state of the item.
                #
                # Acceptable values are:
                # - &quot;`new`&quot;
            &quot;contentLanguage&quot;: &quot;A String&quot;, # Required. The two-letter ISO 639-1 language code for the item.
                #
                # Acceptable values are:
                # - &quot;`en`&quot;
                # - &quot;`fr`&quot;
            &quot;fees&quot;: [ # Fees for the item. Optional.
              {
                &quot;amount&quot;: { # Amount of the fee.
                  &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                  &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                },
                &quot;name&quot;: &quot;A String&quot;, # Name of the fee.
              },
            ],
            &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number (GTIN) of the item. Optional.
            &quot;imageLink&quot;: &quot;A String&quot;, # Required. URL of an image of the item.
            &quot;itemGroupId&quot;: &quot;A String&quot;, # Shared identifier for all variants of the same product. Optional.
            &quot;mpn&quot;: &quot;A String&quot;, # Manufacturer Part Number (MPN) of the item. Optional.
            &quot;offerId&quot;: &quot;A String&quot;, # Required. An identifier of the item.
            &quot;price&quot;: { # Required. The price for the product. Tax is automatically calculated for orders where marketplace facilitator tax laws are applicable. Otherwise, tax settings from Merchant Center are applied.
              &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
              &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
            },
            &quot;targetCountry&quot;: &quot;A String&quot;, # Required. The CLDR territory code of the target country of the product.
            &quot;title&quot;: &quot;A String&quot;, # Required. The title of the product.
            &quot;variantAttributes&quot;: [ # Variant attributes for the item. Optional.
              {
                &quot;dimension&quot;: &quot;A String&quot;, # The dimension of the variant.
                &quot;value&quot;: &quot;A String&quot;, # The value for the dimension.
              },
            ],
          },
          &quot;quantityOrdered&quot;: 42, # Required. Number of items ordered.
          &quot;returnInfo&quot;: { # Required. Details of the return policy for the line item.
            &quot;daysToReturn&quot;: 42, # Required. How many days later the item can be returned.
            &quot;isReturnable&quot;: True or False, # Required. Whether the item is returnable.
            &quot;policyUrl&quot;: &quot;A String&quot;, # Required. URL of the item return policy.
          },
          &quot;shippingDetails&quot;: { # Required. Details of the requested shipping for the line item.
            &quot;deliverByDate&quot;: &quot;A String&quot;, # Required. The delivery by date, in ISO 8601 format.
            &quot;method&quot;: { # Required. Details of the shipping method.
              &quot;carrier&quot;: &quot;A String&quot;, # The carrier for the shipping. Optional. See `shipments[].carrier` for a list of acceptable values.
              &quot;maxDaysInTransit&quot;: 42, # Required. Maximum transit time.
              &quot;methodName&quot;: &quot;A String&quot;, # Required. The name of the shipping method.
              &quot;minDaysInTransit&quot;: 42, # Required. Minimum transit time.
            },
            &quot;shipByDate&quot;: &quot;A String&quot;, # Required. The ship by date, in ISO 8601 format.
            &quot;type&quot;: &quot;A String&quot;, # Type of shipment. Indicates whether `deliveryDetails` or `pickupDetails` is applicable for this shipment.
                #
                # Acceptable values are:
                # - &quot;`delivery`&quot;
                # - &quot;`pickup`&quot;
          },
          &quot;unitTax&quot;: { # Deprecated. Ignored if provided.
            &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
            &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
          },
        },
      ],
      &quot;notificationMode&quot;: &quot;A String&quot;, # Restricted. Do not use.
      &quot;paymentMethod&quot;: { # The details of the payment method.
        &quot;expirationMonth&quot;: 42, # The card expiration month (January = 1, February = 2 etc.).
        &quot;expirationYear&quot;: 42, # The card expiration year (4-digit, e.g. 2015).
        &quot;lastFourDigits&quot;: &quot;A String&quot;, # The last four digits of the card number.
        &quot;predefinedBillingAddress&quot;: &quot;A String&quot;, # The billing address.
            #
            # Acceptable values are:
            # - &quot;`dwight`&quot;
            # - &quot;`jim`&quot;
            # - &quot;`pam`&quot;
        &quot;type&quot;: &quot;A String&quot;, # The type of instrument. Note that real orders might have different values than the four values accepted by `createTestOrder`.
            #
            # Acceptable values are:
            # - &quot;`AMEX`&quot;
            # - &quot;`DISCOVER`&quot;
            # - &quot;`MASTERCARD`&quot;
            # - &quot;`VISA`&quot;
      },
      &quot;predefinedDeliveryAddress&quot;: &quot;A String&quot;, # Required. Identifier of one of the predefined delivery addresses for the delivery.
          #
          # Acceptable values are:
          # - &quot;`dwight`&quot;
          # - &quot;`jim`&quot;
          # - &quot;`pam`&quot;
      &quot;predefinedPickupDetails&quot;: &quot;A String&quot;, # Identifier of one of the predefined pickup details. Required for orders containing line items with shipping type `pickup`.
          #
          # Acceptable values are:
          # - &quot;`dwight`&quot;
          # - &quot;`jim`&quot;
          # - &quot;`pam`&quot;
      &quot;promotions&quot;: [ # Deprecated. Ignored if provided.
        {
          &quot;benefits&quot;: [
            {
              &quot;discount&quot;: { # The discount in the order price when the promotion is applied.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;offerIds&quot;: [ # The OfferId(s) that were purchased in this order and map to this specific benefit of the promotion.
                &quot;A String&quot;,
              ],
              &quot;subType&quot;: &quot;A String&quot;, # Further describes the benefit of the promotion. Note that we will expand on this enumeration as we support new promotion sub-types.
                  #
                  # Acceptable values are:
                  # - &quot;`buyMGetMoneyOff`&quot;
                  # - &quot;`buyMGetNMoneyOff`&quot;
                  # - &quot;`buyMGetNPercentOff`&quot;
                  # - &quot;`buyMGetPercentOff`&quot;
                  # - &quot;`freeGift`&quot;
                  # - &quot;`freeGiftWithItemId`&quot;
                  # - &quot;`freeGiftWithValue`&quot;
                  # - &quot;`freeOvernightShipping`&quot;
                  # - &quot;`freeShipping`&quot;
                  # - &quot;`freeTwoDayShipping`&quot;
                  # - &quot;`moneyOff`&quot;
                  # - &quot;`percentageOff`&quot;
                  # - &quot;`rewardPoints`&quot;
                  # - &quot;`salePrice`&quot;
              &quot;taxImpact&quot;: { # The impact on tax when the promotion is applied.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;type&quot;: &quot;A String&quot;, # Describes whether the promotion applies to products (e.g. 20% off) or to shipping (e.g. Free Shipping).
                  #
                  # Acceptable values are:
                  # - &quot;`product`&quot;
                  # - &quot;`shipping`&quot;
            },
          ],
          &quot;effectiveDates&quot;: &quot;A String&quot;, # The date and time frame when the promotion is active and ready for validation review. Note that the promotion live time may be delayed for a few hours due to the validation review.
              # Start date and end date are separated by a forward slash (/). The start date is specified by the format (YYYY-MM-DD), followed by the letter ?T?, the time of the day when the sale starts (in Greenwich Mean Time, GMT), followed by an expression of the time zone for the sale. The end date is in the same format.
          &quot;genericRedemptionCode&quot;: &quot;A String&quot;, # Optional. The text code that corresponds to the promotion when applied on the retailer?s website.
          &quot;id&quot;: &quot;A String&quot;, # The unique ID of the promotion.
          &quot;longTitle&quot;: &quot;A String&quot;, # The full title of the promotion.
          &quot;productApplicability&quot;: &quot;A String&quot;, # Whether the promotion is applicable to all products or only specific products.
              #
              # Acceptable values are:
              # - &quot;`allProducts`&quot;
              # - &quot;`specificProducts`&quot;
          &quot;redemptionChannel&quot;: &quot;A String&quot;, # Indicates that the promotion is valid online.
              #
              # Acceptable values are:
              # - &quot;`online`&quot;
        },
      ],
      &quot;shippingCost&quot;: { # Required. The price of shipping for all items. Shipping tax is automatically calculated for orders where marketplace facilitator tax laws are applicable. Otherwise, tax settings from Merchant Center are applied. Note that shipping is not taxed in certain states.
        &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
        &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
      },
      &quot;shippingCostTax&quot;: { # Deprecated. Ignored if provided.
        &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
        &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
      },
      &quot;shippingOption&quot;: &quot;A String&quot;, # Required. The requested shipping option.
          #
          # Acceptable values are:
          # - &quot;`economy`&quot;
          # - &quot;`expedited`&quot;
          # - &quot;`oneDay`&quot;
          # - &quot;`sameDay`&quot;
          # - &quot;`standard`&quot;
          # - &quot;`twoDay`&quot;
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="instorerefundlineitem">instorerefundlineitem(merchantId, orderId, body=None)</code>
  <pre>Deprecated. Notifies that item return and refund was handled directly by merchant outside of Google payments processing (e.g. cash refund done in store).
Note: We recommend calling the returnrefundlineitem method to refund in-store returns. We will issue the refund directly to the customer. This helps to prevent possible differences arising between merchant and Google transaction records. We also recommend having the point of sale system communicate with Google to ensure that customers do not receive a double refund by first refunding via Google then via an in-store return.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;amountPretax&quot;: { # The amount that is refunded. Required.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;amountTax&quot;: { # Tax amount that correspond to refund amount in amountPretax. Required.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return. Either lineItemId or productId is required.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to return. This is the REST ID used in the products service. Either lineItemId or productId is required.
    &quot;quantity&quot;: 42, # The quantity to return and refund.
    &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
        # 
        # Acceptable values are:
        # - &quot;`customerDiscretionaryReturn`&quot;
        # - &quot;`customerInitiatedMerchantCancel`&quot;
        # - &quot;`deliveredTooLate`&quot;
        # - &quot;`expiredItem`&quot;
        # - &quot;`invalidCoupon`&quot;
        # - &quot;`malformedShippingAddress`&quot;
        # - &quot;`other`&quot;
        # - &quot;`productArrivedDamaged`&quot;
        # - &quot;`productNotAsDescribed`&quot;
        # - &quot;`qualityNotAsExpected`&quot;
        # - &quot;`undeliverableShippingAddress`&quot;
        # - &quot;`unsupportedPoBoxAddress`&quot;
        # - &quot;`wrongProductShipped`&quot;
    &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersInStoreRefundLineItemResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersInStoreRefundLineItemResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(merchantId, acknowledged=None, maxResults=None, orderBy=None, pageToken=None, placedDateEnd=None, placedDateStart=None, statuses=None)</code>
  <pre>Lists the orders in your Merchant Center account.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  acknowledged: boolean, Obtains orders that match the acknowledgement status. When set to true, obtains orders that have been acknowledged. When false, obtains orders that have not been acknowledged.
We recommend using this filter set to `false`, in conjunction with the `acknowledge` call, such that only un-acknowledged orders are returned.
  maxResults: integer, The maximum number of orders to return in the response, used for paging. The default value is 25 orders per page, and the maximum allowed value is 250 orders per page.
  orderBy: string, Order results by placement date in descending or ascending order.

Acceptable values are:
- placedDateAsc
- placedDateDesc
  pageToken: string, The token returned by the previous request.
  placedDateEnd: string, Obtains orders placed before this date (exclusively), in ISO 8601 format.
  placedDateStart: string, Obtains orders placed after this date (inclusively), in ISO 8601 format.
  statuses: string, Obtains orders that match any of the specified statuses. Please note that `active` is a shortcut for `pendingShipment` and `partiallyShipped`, and `completed` is a shortcut for `shipped`, `partiallyDelivered`, `delivered`, `partiallyReturned`, `returned`, and `canceled`. (repeated)
    Allowed values
      active - 
      canceled - 
      completed - 
      delivered - 
      inProgress - 
      partiallyDelivered - 
      partiallyReturned - 
      partiallyShipped - 
      pendingShipment - 
      returned - 
      shipped - 

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#ordersListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersListResponse&quot;.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The token for the retrieval of the next page of orders.
    &quot;resources&quot;: [
      { # Order. Production access (all methods) requires the order manager role. Sandbox access does not. (== resource_for v2.orders ==) (== resource_for v2.1.orders ==)
        &quot;acknowledged&quot;: True or False, # Whether the order was acknowledged.
        &quot;channelType&quot;: &quot;A String&quot;, # Deprecated.
            #
            # Acceptable values are:
            # - &quot;`googleExpress`&quot;
            # - &quot;`purchasesOnGoogle`&quot;
        &quot;customer&quot;: { # The details of the customer who placed the order.
          &quot;email&quot;: &quot;A String&quot;, # Deprecated.
          &quot;explicitMarketingPreference&quot;: True or False, # Deprecated. Please use marketingRightsInfo instead.
          &quot;fullName&quot;: &quot;A String&quot;, # Full name of the customer.
          &quot;invoiceReceivingEmail&quot;: &quot;A String&quot;, # Email address for the merchant to send value-added tax or invoice documentation of the order. Only the last document sent is made available to the customer. For more information, see  About automated VAT invoicing for Shopping Actions.
          &quot;marketingRightsInfo&quot;: { # Customer&#x27;s marketing preferences. Contains the marketing opt-in information that is current at the time that the merchant call. User preference selections can change from one order to the next so preferences must be checked with every order.
            &quot;explicitMarketingPreference&quot;: &quot;A String&quot;, # Last known customer selection regarding marketing preferences. In certain cases this selection might not be known, so this field would be empty. If a customer selected `granted` in their most recent order, they can be subscribed to marketing emails. Customers who have chosen `denied` must not be subscribed, or must be unsubscribed if already opted-in.
                #
                # Acceptable values are:
                # - &quot;`denied`&quot;
                # - &quot;`granted`&quot;
            &quot;lastUpdatedTimestamp&quot;: &quot;A String&quot;, # Timestamp when last time marketing preference was updated. Could be empty, if user wasn&#x27;t offered a selection yet.
            &quot;marketingEmailAddress&quot;: &quot;A String&quot;, # Email address that can be used for marketing purposes. The field may be empty even if `explicitMarketingPreference` is &#x27;granted&#x27;. This happens when retrieving an old order from the customer who deleted their account.
          },
        },
        &quot;deliveryDetails&quot;: { # Delivery details for shipments of type `delivery`.
          &quot;address&quot;: { # The delivery address
            &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
            &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
                # John Smith
                # 1600 Amphitheatre Parkway
                # Mountain View, CA, 94043
                # United States
              &quot;A String&quot;,
            ],
            &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
            &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
            &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
            &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
            &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
            &quot;streetAddress&quot;: [ # Street-level part of the address.
              &quot;A String&quot;,
            ],
          },
          &quot;phoneNumber&quot;: &quot;A String&quot;, # The phone number of the person receiving the delivery.
        },
        &quot;id&quot;: &quot;A String&quot;, # The REST ID of the order. Globally unique.
        &quot;kind&quot;: &quot;content#order&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#order`&quot;
        &quot;lineItems&quot;: [ # Line items that are ordered.
          {
            &quot;annotations&quot;: [ # Annotations that are attached to the line item.
              {
                &quot;key&quot;: &quot;A String&quot;, # Key for additional merchant provided (as key-value pairs) annotation about the line item.
                &quot;value&quot;: &quot;A String&quot;, # Value for additional merchant provided (as key-value pairs) annotation about the line item.
              },
            ],
            &quot;cancellations&quot;: [ # Cancellations of the line item.
              {
                &quot;actor&quot;: &quot;A String&quot;, # The actor that created the cancellation.
                    #
                    # Acceptable values are:
                    # - &quot;`customer`&quot;
                    # - &quot;`googleBot`&quot;
                    # - &quot;`googleCustomerService`&quot;
                    # - &quot;`googlePayments`&quot;
                    # - &quot;`googleSabre`&quot;
                    # - &quot;`merchant`&quot;
                &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the cancellation has been created, in ISO 8601 format.
                &quot;quantity&quot;: 42, # The quantity that was canceled.
                &quot;reason&quot;: &quot;A String&quot;, # The reason for the cancellation. Orders that are canceled with a noInventory reason will lead to the removal of the product from Shopping Actions until you make an update to that product. This will not affect your Shopping ads.
                    #
                    # Acceptable values are:
                    # - &quot;`autoPostInternal`&quot;
                    # - &quot;`autoPostInvalidBillingAddress`&quot;
                    # - &quot;`autoPostNoInventory`&quot;
                    # - &quot;`autoPostPriceError`&quot;
                    # - &quot;`autoPostUndeliverableShippingAddress`&quot;
                    # - &quot;`couponAbuse`&quot;
                    # - &quot;`customerCanceled`&quot;
                    # - &quot;`customerInitiatedCancel`&quot;
                    # - &quot;`customerSupportRequested`&quot;
                    # - &quot;`failToPushOrderGoogleError`&quot;
                    # - &quot;`failToPushOrderMerchantError`&quot;
                    # - &quot;`failToPushOrderMerchantFulfillmentError`&quot;
                    # - &quot;`failToPushOrderToMerchant`&quot;
                    # - &quot;`failToPushOrderToMerchantOutOfStock`&quot;
                    # - &quot;`invalidCoupon`&quot;
                    # - &quot;`malformedShippingAddress`&quot;
                    # - &quot;`merchantDidNotShipOnTime`&quot;
                    # - &quot;`noInventory`&quot;
                    # - &quot;`orderTimeout`&quot;
                    # - &quot;`other`&quot;
                    # - &quot;`paymentAbuse`&quot;
                    # - &quot;`paymentDeclined`&quot;
                    # - &quot;`priceError`&quot;
                    # - &quot;`returnRefundAbuse`&quot;
                    # - &quot;`shippingPriceError`&quot;
                    # - &quot;`taxError`&quot;
                    # - &quot;`undeliverableShippingAddress`&quot;
                    # - &quot;`unsupportedPoBoxAddress`&quot;
                &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
              },
            ],
            &quot;id&quot;: &quot;A String&quot;, # The ID of the line item.
            &quot;price&quot;: { # Total price for the line item. For example, if two items for $10 are purchased, the total price will be $20.
              &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
              &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
            },
            &quot;product&quot;: { # Product data as seen by customer from the time of the order placement. Note that certain attributes values (e.g. title or gtin) might be reformatted and no longer match values submitted via product feed.
              &quot;brand&quot;: &quot;A String&quot;, # Brand of the item.
              &quot;channel&quot;: &quot;A String&quot;, # The item&#x27;s channel (online or local).
                  #
                  # Acceptable values are:
                  # - &quot;`local`&quot;
                  # - &quot;`online`&quot;
              &quot;condition&quot;: &quot;A String&quot;, # Condition or state of the item.
                  #
                  # Acceptable values are:
                  # - &quot;`new`&quot;
                  # - &quot;`refurbished`&quot;
                  # - &quot;`used`&quot;
              &quot;contentLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language code for the item.
              &quot;fees&quot;: [ # Associated fees at order creation time.
                {
                  &quot;amount&quot;: { # Amount of the fee.
                    &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                    &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                  },
                  &quot;name&quot;: &quot;A String&quot;, # Name of the fee.
                },
              ],
              &quot;gtin&quot;: &quot;A String&quot;, # Global Trade Item Number (GTIN) of the item.
              &quot;id&quot;: &quot;A String&quot;, # The REST ID of the product.
              &quot;imageLink&quot;: &quot;A String&quot;, # URL of an image of the item.
              &quot;itemGroupId&quot;: &quot;A String&quot;, # Shared identifier for all variants of the same product.
              &quot;mpn&quot;: &quot;A String&quot;, # Manufacturer Part Number (MPN) of the item.
              &quot;offerId&quot;: &quot;A String&quot;, # An identifier of the item.
              &quot;price&quot;: { # Price of the item.
                &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
              },
              &quot;shownImage&quot;: &quot;A String&quot;, # URL to the cached image shown to the user when order was placed.
              &quot;targetCountry&quot;: &quot;A String&quot;, # The CLDR territory code of the target country of the product.
              &quot;title&quot;: &quot;A String&quot;, # The title of the product.
              &quot;variantAttributes&quot;: [ # Variant attributes for the item. These are dimensions of the product, such as color, gender, material, pattern, and size. You can find a comprehensive list of variant attributes here.
                {
                  &quot;dimension&quot;: &quot;A String&quot;, # The dimension of the variant.
                  &quot;value&quot;: &quot;A String&quot;, # The value for the dimension.
                },
              ],
            },
            &quot;quantityCanceled&quot;: 42, # Number of items canceled.
            &quot;quantityDelivered&quot;: 42, # Number of items delivered.
            &quot;quantityOrdered&quot;: 42, # Number of items ordered.
            &quot;quantityPending&quot;: 42, # Number of items pending.
            &quot;quantityReadyForPickup&quot;: 42, # Number of items ready for pickup.
            &quot;quantityReturned&quot;: 42, # Number of items returned.
            &quot;quantityShipped&quot;: 42, # Number of items shipped.
            &quot;returnInfo&quot;: { # Details of the return policy for the line item.
              &quot;daysToReturn&quot;: 42, # Required. How many days later the item can be returned.
              &quot;isReturnable&quot;: True or False, # Required. Whether the item is returnable.
              &quot;policyUrl&quot;: &quot;A String&quot;, # Required. URL of the item return policy.
            },
            &quot;returns&quot;: [ # Returns of the line item.
              {
                &quot;actor&quot;: &quot;A String&quot;, # The actor that created the refund.
                    #
                    # Acceptable values are:
                    # - &quot;`customer`&quot;
                    # - &quot;`googleBot`&quot;
                    # - &quot;`googleCustomerService`&quot;
                    # - &quot;`googlePayments`&quot;
                    # - &quot;`googleSabre`&quot;
                    # - &quot;`merchant`&quot;
                &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the item has been created, in ISO 8601 format.
                &quot;quantity&quot;: 42, # Quantity that is returned.
                &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
                    #
                    # Acceptable values are:
                    # - &quot;`customerDiscretionaryReturn`&quot;
                    # - &quot;`customerInitiatedMerchantCancel`&quot;
                    # - &quot;`deliveredTooLate`&quot;
                    # - &quot;`expiredItem`&quot;
                    # - &quot;`invalidCoupon`&quot;
                    # - &quot;`malformedShippingAddress`&quot;
                    # - &quot;`other`&quot;
                    # - &quot;`productArrivedDamaged`&quot;
                    # - &quot;`productNotAsDescribed`&quot;
                    # - &quot;`qualityNotAsExpected`&quot;
                    # - &quot;`undeliverableShippingAddress`&quot;
                    # - &quot;`unsupportedPoBoxAddress`&quot;
                    # - &quot;`wrongProductShipped`&quot;
                &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
              },
            ],
            &quot;shippingDetails&quot;: { # Details of the requested shipping for the line item.
              &quot;deliverByDate&quot;: &quot;A String&quot;, # Required. The delivery by date, in ISO 8601 format.
              &quot;method&quot;: { # Required. Details of the shipping method.
                &quot;carrier&quot;: &quot;A String&quot;, # The carrier for the shipping. Optional. See `shipments[].carrier` for a list of acceptable values.
                &quot;maxDaysInTransit&quot;: 42, # Required. Maximum transit time.
                &quot;methodName&quot;: &quot;A String&quot;, # Required. The name of the shipping method.
                &quot;minDaysInTransit&quot;: 42, # Required. Minimum transit time.
              },
              &quot;shipByDate&quot;: &quot;A String&quot;, # Required. The ship by date, in ISO 8601 format.
              &quot;type&quot;: &quot;A String&quot;, # Type of shipment. Indicates whether `deliveryDetails` or `pickupDetails` is applicable for this shipment.
                  #
                  # Acceptable values are:
                  # - &quot;`delivery`&quot;
                  # - &quot;`pickup`&quot;
            },
            &quot;tax&quot;: { # Total tax amount for the line item. For example, if two items are purchased, and each have a cost tax of $2, the total tax amount will be $4.
              &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
              &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
            },
          },
        ],
        &quot;merchantId&quot;: &quot;A String&quot;,
        &quot;merchantOrderId&quot;: &quot;A String&quot;, # Merchant-provided ID of the order.
        &quot;netAmount&quot;: { # The net amount for the order. For example, if an order was originally for a grand total of $100 and a refund was issued for $20, the net amount will be $80.
          &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
          &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
        },
        &quot;paymentMethod&quot;: { # The details of the payment method.
          &quot;billingAddress&quot;: { # The billing address.
            &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
            &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
                # John Smith
                # 1600 Amphitheatre Parkway
                # Mountain View, CA, 94043
                # United States
              &quot;A String&quot;,
            ],
            &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
            &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
            &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
            &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
            &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
            &quot;streetAddress&quot;: [ # Street-level part of the address.
              &quot;A String&quot;,
            ],
          },
          &quot;expirationMonth&quot;: 42, # The card expiration month (January = 1, February = 2 etc.).
          &quot;expirationYear&quot;: 42, # The card expiration year (4-digit, e.g. 2015).
          &quot;lastFourDigits&quot;: &quot;A String&quot;, # The last four digits of the card number.
          &quot;phoneNumber&quot;: &quot;A String&quot;, # The billing phone number.
          &quot;type&quot;: &quot;A String&quot;, # The type of instrument.
              #
              # Acceptable values are:
              # - &quot;`AMEX`&quot;
              # - &quot;`DISCOVER`&quot;
              # - &quot;`JCB`&quot;
              # - &quot;`MASTERCARD`&quot;
              # - &quot;`UNIONPAY`&quot;
              # - &quot;`VISA`&quot;
              # - &quot;``&quot;
        },
        &quot;paymentStatus&quot;: &quot;A String&quot;, # The status of the payment.
            #
            # Acceptable values are:
            # - &quot;`paymentCaptured`&quot;
            # - &quot;`paymentRejected`&quot;
            # - &quot;`paymentSecured`&quot;
            # - &quot;`pendingAuthorization`&quot;
        &quot;pickupDetails&quot;: { # Pickup details for shipments of type `pickup`.
          &quot;address&quot;: { # Address of the pickup location where the shipment should be sent. Note that `recipientName` in the address is the name of the business at the pickup location.
            &quot;country&quot;: &quot;A String&quot;, # CLDR country code (e.g. &quot;US&quot;).
            &quot;fullAddress&quot;: [ # Strings representing the lines of the printed label for mailing the order, for example:
                # John Smith
                # 1600 Amphitheatre Parkway
                # Mountain View, CA, 94043
                # United States
              &quot;A String&quot;,
            ],
            &quot;isPostOfficeBox&quot;: True or False, # Whether the address is a post office box.
            &quot;locality&quot;: &quot;A String&quot;, # City, town or commune. May also include dependent localities or sublocalities (e.g. neighborhoods or suburbs).
            &quot;postalCode&quot;: &quot;A String&quot;, # Postal Code or ZIP (e.g. &quot;94043&quot;).
            &quot;recipientName&quot;: &quot;A String&quot;, # Name of the recipient.
            &quot;region&quot;: &quot;A String&quot;, # Top-level administrative subdivision of the country. For example, a state like California (&quot;CA&quot;) or a province like Quebec (&quot;QC&quot;).
            &quot;streetAddress&quot;: [ # Street-level part of the address.
              &quot;A String&quot;,
            ],
          },
          &quot;collectors&quot;: [ # Collectors authorized to pick up shipment from the pickup location.
            {
              &quot;name&quot;: &quot;A String&quot;, # Name of the person picking up the shipment.
              &quot;phoneNumber&quot;: &quot;A String&quot;, # Phone number of the person picking up the shipment.
            },
          ],
          &quot;locationId&quot;: &quot;A String&quot;, # ID of the pickup location.
        },
        &quot;placedDate&quot;: &quot;A String&quot;, # The date when the order was placed, in ISO 8601 format.
        &quot;promotions&quot;: [ # The details of the merchant provided promotions applied to the order.
            #
            # To determine which promotions apply to which products, check the `Promotions[].Benefits[].OfferIds` field against the `LineItems[].Product.OfferId` field for each promotion. If a promotion is applied to more than 1 `offerId`, divide the discount value by the number of affected offers to determine how much discount to apply to each `offerId`.
            #
            # Examples:
            # - To calculate the line item level discount for a single specific item: For each promotion, subtract the `Promotions[].Benefits[].Discount.value` amount from the `LineItems[].Price.value`.
            # - To calculate the line item level discount for multiple quantity of a specific item: For each promotion, divide the `Promotions[].Benefits[].Discount.value` by the quantity of products and substract it from `LineItems[].Product.Price.value` for each quantity item.
            #
            # Only 1 promotion can be applied to an offerId in a given order. To refund an item which had a promotion applied to it, make sure to refund the amount after first subtracting the promotion discount from the item price.
            #
            # More details about the program are here.
          {
            &quot;benefits&quot;: [
              {
                &quot;discount&quot;: { # The discount in the order price when the promotion is applied.
                  &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                  &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                },
                &quot;offerIds&quot;: [ # The OfferId(s) that were purchased in this order and map to this specific benefit of the promotion.
                  &quot;A String&quot;,
                ],
                &quot;subType&quot;: &quot;A String&quot;, # Further describes the benefit of the promotion. Note that we will expand on this enumeration as we support new promotion sub-types.
                    #
                    # Acceptable values are:
                    # - &quot;`buyMGetMoneyOff`&quot;
                    # - &quot;`buyMGetNMoneyOff`&quot;
                    # - &quot;`buyMGetNPercentOff`&quot;
                    # - &quot;`buyMGetPercentOff`&quot;
                    # - &quot;`freeGift`&quot;
                    # - &quot;`freeGiftWithItemId`&quot;
                    # - &quot;`freeGiftWithValue`&quot;
                    # - &quot;`freeOvernightShipping`&quot;
                    # - &quot;`freeShipping`&quot;
                    # - &quot;`freeTwoDayShipping`&quot;
                    # - &quot;`moneyOff`&quot;
                    # - &quot;`percentageOff`&quot;
                    # - &quot;`rewardPoints`&quot;
                    # - &quot;`salePrice`&quot;
                &quot;taxImpact&quot;: { # The impact on tax when the promotion is applied.
                  &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
                  &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
                },
                &quot;type&quot;: &quot;A String&quot;, # Describes whether the promotion applies to products (e.g. 20% off) or to shipping (e.g. Free Shipping).
                    #
                    # Acceptable values are:
                    # - &quot;`product`&quot;
                    # - &quot;`shipping`&quot;
              },
            ],
            &quot;effectiveDates&quot;: &quot;A String&quot;, # The date and time frame when the promotion is active and ready for validation review. Note that the promotion live time may be delayed for a few hours due to the validation review.
                # Start date and end date are separated by a forward slash (/). The start date is specified by the format (YYYY-MM-DD), followed by the letter ?T?, the time of the day when the sale starts (in Greenwich Mean Time, GMT), followed by an expression of the time zone for the sale. The end date is in the same format.
            &quot;genericRedemptionCode&quot;: &quot;A String&quot;, # Optional. The text code that corresponds to the promotion when applied on the retailer?s website.
            &quot;id&quot;: &quot;A String&quot;, # The unique ID of the promotion.
            &quot;longTitle&quot;: &quot;A String&quot;, # The full title of the promotion.
            &quot;productApplicability&quot;: &quot;A String&quot;, # Whether the promotion is applicable to all products or only specific products.
                #
                # Acceptable values are:
                # - &quot;`allProducts`&quot;
                # - &quot;`specificProducts`&quot;
            &quot;redemptionChannel&quot;: &quot;A String&quot;, # Indicates that the promotion is valid online.
                #
                # Acceptable values are:
                # - &quot;`online`&quot;
          },
        ],
        &quot;refunds&quot;: [ # Refunds for the order.
          {
            &quot;actor&quot;: &quot;A String&quot;, # The actor that created the refund.
                #
                # Acceptable values are:
                # - &quot;`customer`&quot;
                # - &quot;`googleBot`&quot;
                # - &quot;`googleCustomerService`&quot;
                # - &quot;`googlePayments`&quot;
                # - &quot;`googleSabre`&quot;
                # - &quot;`merchant`&quot;
            &quot;amount&quot;: { # The amount that is refunded.
              &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
              &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
            },
            &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the item has been created, in ISO 8601 format.
            &quot;reason&quot;: &quot;A String&quot;, # The reason for the refund.
                #
                # Acceptable values are:
                # - &quot;`adjustment`&quot;
                # - &quot;`autoPostInternal`&quot;
                # - &quot;`autoPostInvalidBillingAddress`&quot;
                # - &quot;`autoPostNoInventory`&quot;
                # - &quot;`autoPostPriceError`&quot;
                # - &quot;`autoPostUndeliverableShippingAddress`&quot;
                # - &quot;`couponAbuse`&quot;
                # - &quot;`courtesyAdjustment`&quot;
                # - &quot;`customerCanceled`&quot;
                # - &quot;`customerDiscretionaryReturn`&quot;
                # - &quot;`customerInitiatedMerchantCancel`&quot;
                # - &quot;`customerSupportRequested`&quot;
                # - &quot;`deliveredLateByCarrier`&quot;
                # - &quot;`deliveredTooLate`&quot;
                # - &quot;`expiredItem`&quot;
                # - &quot;`failToPushOrderGoogleError`&quot;
                # - &quot;`failToPushOrderMerchantError`&quot;
                # - &quot;`failToPushOrderMerchantFulfillmentError`&quot;
                # - &quot;`failToPushOrderToMerchant`&quot;
                # - &quot;`failToPushOrderToMerchantOutOfStock`&quot;
                # - &quot;`feeAdjustment`&quot;
                # - &quot;`invalidCoupon`&quot;
                # - &quot;`lateShipmentCredit`&quot;
                # - &quot;`malformedShippingAddress`&quot;
                # - &quot;`merchantDidNotShipOnTime`&quot;
                # - &quot;`noInventory`&quot;
                # - &quot;`orderTimeout`&quot;
                # - &quot;`other`&quot;
                # - &quot;`paymentAbuse`&quot;
                # - &quot;`paymentDeclined`&quot;
                # - &quot;`priceAdjustment`&quot;
                # - &quot;`priceError`&quot;
                # - &quot;`productArrivedDamaged`&quot;
                # - &quot;`productNotAsDescribed`&quot;
                # - &quot;`promoReallocation`&quot;
                # - &quot;`qualityNotAsExpected`&quot;
                # - &quot;`returnRefundAbuse`&quot;
                # - &quot;`shippingCostAdjustment`&quot;
                # - &quot;`shippingPriceError`&quot;
                # - &quot;`taxAdjustment`&quot;
                # - &quot;`taxError`&quot;
                # - &quot;`undeliverableShippingAddress`&quot;
                # - &quot;`unsupportedPoBoxAddress`&quot;
                # - &quot;`wrongProductShipped`&quot;
            &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
          },
        ],
        &quot;shipments&quot;: [ # Shipments of the order.
          {
            &quot;carrier&quot;: &quot;A String&quot;, # The carrier handling the shipment.
                #
                # For supported carriers, Google includes the carrier name and tracking URL in emails to customers. For select supported carriers, Google also automatically updates the shipment status based on the provided shipment ID. Note: You can also use unsupported carriers, but emails to customers will not include the carrier name or tracking URL, and there will be no automatic order status updates.
                # Supported carriers for US are:
                # - &quot;`ups`&quot; (United Parcel Service) automatic status updates
                # - &quot;`usps`&quot; (United States Postal Service) automatic status updates
                # - &quot;`fedex`&quot; (FedEx) automatic status updates
                # - &quot;`dhl`&quot; (DHL eCommerce) automatic status updates (US only)
                # - &quot;`ontrac`&quot; (OnTrac) automatic status updates
                # - &quot;`dhl express`&quot; (DHL Express)
                # - &quot;`deliv`&quot; (Deliv)
                # - &quot;`dynamex`&quot; (TForce)
                # - &quot;`lasership`&quot; (LaserShip)
                # - &quot;`mpx`&quot; (Military Parcel Xpress)
                # - &quot;`uds`&quot; (United Delivery Service)
                # - &quot;`efw`&quot; (Estes Forwarding Worldwide)
                # - &quot;`jd logistics`&quot; (JD Logistics)
                # - &quot;`yunexpress`&quot; (YunExpress)
                # - &quot;`china post`&quot; (China Post)
                # - &quot;`china ems`&quot; (China Post Express Mail Service)
                # - &quot;`singapore post`&quot; (Singapore Post)
                # - &quot;`pos malaysia`&quot; (Pos Malaysia)
                # - &quot;`postnl`&quot; (PostNL)
                # - &quot;`ptt`&quot; (PTT Turkish Post)
                # - &quot;`eub`&quot; (ePacket)
                # - &quot;`chukou1`&quot; (Chukou1 Logistics)
                # - &quot;`bestex`&quot; (Best Express)
                # - &quot;`canada post`&quot; (Canada Post)
                # - &quot;`purolator`&quot; (Purolator)
                # - &quot;`canpar`&quot; (Canpar)
                # - &quot;`india post`&quot; (India Post)
                # - &quot;`blue dart`&quot; (Blue Dart)
                # - &quot;`delhivery`&quot; (Delhivery)
                # - &quot;`dtdc`&quot; (DTDC)
                # - &quot;`tpc india`&quot; (TPC India)
                # Supported carriers for FR are:
                # - &quot;`la poste`&quot; (La Poste) automatic status updates
                # - &quot;`colissimo`&quot; (Colissimo by La Poste) automatic status updates
                # - &quot;`ups`&quot; (United Parcel Service) automatic status updates
                # - &quot;`chronopost`&quot; (Chronopost by La Poste)
                # - &quot;`gls`&quot; (General Logistics Systems France)
                # - &quot;`dpd`&quot; (DPD Group by GeoPost)
                # - &quot;`bpost`&quot; (Belgian Post Group)
                # - &quot;`colis prive`&quot; (Colis Privé)
                # - &quot;`boxtal`&quot; (Boxtal)
                # - &quot;`geodis`&quot; (GEODIS)
                # - &quot;`tnt`&quot; (TNT)
                # - &quot;`db schenker`&quot; (DB Schenker)
                # - &quot;`aramex`&quot; (Aramex)
            &quot;creationDate&quot;: &quot;A String&quot;, # Date on which the shipment has been created, in ISO 8601 format.
            &quot;deliveryDate&quot;: &quot;A String&quot;, # Date on which the shipment has been delivered, in ISO 8601 format. Present only if `status` is `delivered`
            &quot;id&quot;: &quot;A String&quot;, # The ID of the shipment.
            &quot;lineItems&quot;: [ # The line items that are shipped.
              {
                &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item that is shipped. This value is assigned by Google when an order is created. Either lineItemId or productId is required.
                &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to ship. This is the REST ID used in the products service. Either lineItemId or productId is required.
                &quot;quantity&quot;: 42, # The quantity that is shipped.
              },
            ],
            &quot;scheduledDeliveryDetails&quot;: { # Delivery details of the shipment if scheduling is needed.
              &quot;carrierPhoneNumber&quot;: &quot;A String&quot;, # The phone number of the carrier fulfilling the delivery. The phone number is formatted as the international notation in ITU-T Recommendation E.123 (e.g., &quot;+41 44 668 1800&quot;).
              &quot;scheduledDate&quot;: &quot;A String&quot;, # The date a shipment is scheduled for delivery, in ISO 8601 format.
            },
            &quot;status&quot;: &quot;A String&quot;, # The status of the shipment.
                #
                # Acceptable values are:
                # - &quot;`delivered`&quot;
                # - &quot;`readyForPickup`&quot;
                # - &quot;`shipped`&quot;
                # - &quot;`undeliverable`&quot;
            &quot;trackingId&quot;: &quot;A String&quot;, # The tracking ID for the shipment.
          },
        ],
        &quot;shippingCost&quot;: { # The total cost of shipping for all items.
          &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
          &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
        },
        &quot;shippingCostTax&quot;: { # The tax for the total shipping cost.
          &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
          &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
        },
        &quot;shippingOption&quot;: &quot;A String&quot;, # Deprecated. Shipping details are provided with line items instead.
            #
            # Acceptable values are:
            # - &quot;`economy`&quot;
            # - &quot;`expedited`&quot;
            # - &quot;`oneDay`&quot;
            # - &quot;`sameDay`&quot;
            # - &quot;`standard`&quot;
            # - &quot;`twoDay`&quot;
        &quot;status&quot;: &quot;A String&quot;, # The status of the order.
            #
            # Acceptable values are:
            # - &quot;`canceled`&quot;
            # - &quot;`delivered`&quot;
            # - &quot;`inProgress`&quot;
            # - &quot;`partiallyDelivered`&quot;
            # - &quot;`partiallyReturned`&quot;
            # - &quot;`partiallyShipped`&quot;
            # - &quot;`pendingShipment`&quot;
            # - &quot;`returned`&quot;
            # - &quot;`shipped`&quot;
        &quot;taxCollector&quot;: &quot;A String&quot;, # The party responsible for collecting and remitting taxes.
            #
            # Acceptable values are:
            # - &quot;`marketplaceFacilitator`&quot;
            # - &quot;`merchant`&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="refund">refund(merchantId, orderId, body=None)</code>
  <pre>Deprecated, please use returnRefundLineItem instead.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order to refund. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;amount&quot;: { # Deprecated. Please use amountPretax and amountTax instead.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;amountPretax&quot;: { # The amount that is refunded. Either amount or amountPretax should be filled.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;amountTax&quot;: { # Tax amount that corresponds to refund amount in amountPretax. Optional, but if filled, amountPretax must be set. Calculated automatically if not provided.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;reason&quot;: &quot;A String&quot;, # The reason for the refund.
        # 
        # Acceptable values are:
        # - &quot;`adjustment`&quot;
        # - &quot;`courtesyAdjustment`&quot;
        # - &quot;`customerCanceled`&quot;
        # - &quot;`customerDiscretionaryReturn`&quot;
        # - &quot;`deliveredLateByCarrier`&quot;
        # - &quot;`feeAdjustment`&quot;
        # - &quot;`lateShipmentCredit`&quot;
        # - &quot;`noInventory`&quot;
        # - &quot;`other`&quot;
        # - &quot;`priceError`&quot;
        # - &quot;`productArrivedDamaged`&quot;
        # - &quot;`productNotAsDescribed`&quot;
        # - &quot;`shippingCostAdjustment`&quot;
        # - &quot;`taxAdjustment`&quot;
        # - &quot;`undeliverableShippingAddress`&quot;
        # - &quot;`wrongProductShipped`&quot;
    &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersRefundResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersRefundResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="rejectreturnlineitem">rejectreturnlineitem(merchantId, orderId, body=None)</code>
  <pre>Rejects return on an line item.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return. Either lineItemId or productId is required.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to return. This is the REST ID used in the products service. Either lineItemId or productId is required.
    &quot;quantity&quot;: 42, # The quantity to return and refund.
    &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
        # 
        # Acceptable values are:
        # - &quot;`damagedOrUsed`&quot;
        # - &quot;`missingComponent`&quot;
        # - &quot;`notEligible`&quot;
        # - &quot;`other`&quot;
        # - &quot;`outOfReturnWindow`&quot;
    &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersRejectReturnLineItemResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersRejectReturnLineItemResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="returnlineitem">returnlineitem(merchantId, orderId, body=None)</code>
  <pre>Returns a line item.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return. Either lineItemId or productId is required.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to return. This is the REST ID used in the products service. Either lineItemId or productId is required.
    &quot;quantity&quot;: 42, # The quantity to return.
    &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
        # 
        # Acceptable values are:
        # - &quot;`customerDiscretionaryReturn`&quot;
        # - &quot;`customerInitiatedMerchantCancel`&quot;
        # - &quot;`deliveredTooLate`&quot;
        # - &quot;`expiredItem`&quot;
        # - &quot;`invalidCoupon`&quot;
        # - &quot;`malformedShippingAddress`&quot;
        # - &quot;`other`&quot;
        # - &quot;`productArrivedDamaged`&quot;
        # - &quot;`productNotAsDescribed`&quot;
        # - &quot;`qualityNotAsExpected`&quot;
        # - &quot;`undeliverableShippingAddress`&quot;
        # - &quot;`unsupportedPoBoxAddress`&quot;
        # - &quot;`wrongProductShipped`&quot;
    &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersReturnLineItemResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersReturnLineItemResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="returnrefundlineitem">returnrefundlineitem(merchantId, orderId, body=None)</code>
  <pre>Returns and refunds a line item. Note that this method can only be called on fully shipped orders. Please also note that the Orderreturns API is the preferred way to handle returns after you receive a return from a customer. You can use Orderreturns.list or Orderreturns.get to search for the return, and then use Orderreturns.processreturn to issue the refund. If the return cannot be found, then we recommend using this API to issue a refund.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;amountPretax&quot;: { # The amount that is refunded. If omitted, refundless return is assumed (same as calling returnLineItem method).
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;amountTax&quot;: { # Tax amount that corresponds to refund amount in amountPretax. Optional, but if filled, then amountPretax must be set. Calculated automatically if not provided.
      &quot;currency&quot;: &quot;A String&quot;, # The currency of the price.
      &quot;value&quot;: &quot;A String&quot;, # The price represented as a number.
    },
    &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to return. Either lineItemId or productId is required.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to return. This is the REST ID used in the products service. Either lineItemId or productId is required.
    &quot;quantity&quot;: 42, # The quantity to return and refund.
    &quot;reason&quot;: &quot;A String&quot;, # The reason for the return.
        # 
        # Acceptable values are:
        # - &quot;`customerDiscretionaryReturn`&quot;
        # - &quot;`customerInitiatedMerchantCancel`&quot;
        # - &quot;`deliveredTooLate`&quot;
        # - &quot;`expiredItem`&quot;
        # - &quot;`invalidCoupon`&quot;
        # - &quot;`malformedShippingAddress`&quot;
        # - &quot;`other`&quot;
        # - &quot;`productArrivedDamaged`&quot;
        # - &quot;`productNotAsDescribed`&quot;
        # - &quot;`qualityNotAsExpected`&quot;
        # - &quot;`undeliverableShippingAddress`&quot;
        # - &quot;`unsupportedPoBoxAddress`&quot;
        # - &quot;`wrongProductShipped`&quot;
    &quot;reasonText&quot;: &quot;A String&quot;, # The explanation of the reason.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersReturnRefundLineItemResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersReturnRefundLineItemResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="setlineitemmetadata">setlineitemmetadata(merchantId, orderId, body=None)</code>
  <pre>Sets (or overrides if it already exists) merchant provided annotations in the form of key-value pairs. A common use case would be to supply us with additional structured information about a line item that cannot be provided via other methods. Submitted key-value pairs can be retrieved as part of the orders resource.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;annotations&quot;: [
      {
        &quot;key&quot;: &quot;A String&quot;, # Key for additional merchant provided (as key-value pairs) annotation about the line item.
        &quot;value&quot;: &quot;A String&quot;, # Value for additional merchant provided (as key-value pairs) annotation about the line item.
      },
    ],
    &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to set metadata. Either lineItemId or productId is required.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to set metadata. This is the REST ID used in the products service. Either lineItemId or productId is required.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersSetLineItemMetadataResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersSetLineItemMetadataResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="shiplineitems">shiplineitems(merchantId, orderId, body=None)</code>
  <pre>Marks line item(s) as shipped.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;carrier&quot;: &quot;A String&quot;, # Deprecated. Please use shipmentInfo instead. The carrier handling the shipment. See `shipments[].carrier` in the  Orders resource representation for a list of acceptable values.
    &quot;lineItems&quot;: [ # Line items to ship.
      {
        &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item that is shipped. This value is assigned by Google when an order is created. Either lineItemId or productId is required.
        &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to ship. This is the REST ID used in the products service. Either lineItemId or productId is required.
        &quot;quantity&quot;: 42, # The quantity that is shipped.
      },
    ],
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;shipmentGroupId&quot;: &quot;A String&quot;, # ID of the shipment group. Required for orders that use the orderinvoices service.
    &quot;shipmentId&quot;: &quot;A String&quot;, # Deprecated. Please use shipmentInfo instead. The ID of the shipment.
    &quot;shipmentInfos&quot;: [ # Shipment information. This field is repeated because a single line item can be shipped in several packages (and have several tracking IDs).
      {
        &quot;carrier&quot;: &quot;A String&quot;, # The carrier handling the shipment. See `shipments[].carrier` in the  Orders resource representation for a list of acceptable values.
        &quot;shipmentId&quot;: &quot;A String&quot;, # Required. The ID of the shipment. This is assigned by the merchant and is unique to each shipment.
        &quot;trackingId&quot;: &quot;A String&quot;, # The tracking ID for the shipment.
      },
    ],
    &quot;trackingId&quot;: &quot;A String&quot;, # Deprecated. Please use shipmentInfo instead. The tracking ID for the shipment.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersShipLineItemsResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersShipLineItemsResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updatelineitemshippingdetails">updatelineitemshippingdetails(merchantId, orderId, body=None)</code>
  <pre>Updates ship by and delivery by dates for a line item.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;deliverByDate&quot;: &quot;A String&quot;, # Updated delivery by date, in ISO 8601 format. If not specified only ship by date is updated.
        # 
        # Provided date should be within 1 year timeframe and can not be a date in the past.
    &quot;lineItemId&quot;: &quot;A String&quot;, # The ID of the line item to set metadata. Either lineItemId or productId is required.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product to set metadata. This is the REST ID used in the products service. Either lineItemId or productId is required.
    &quot;shipByDate&quot;: &quot;A String&quot;, # Updated ship by date, in ISO 8601 format. If not specified only deliver by date is updated.
        # 
        # Provided date should be within 1 year timeframe and can not be a date in the past.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersUpdateLineItemShippingDetailsResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersUpdateLineItemShippingDetailsResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updatemerchantorderid">updatemerchantorderid(merchantId, orderId, body=None)</code>
  <pre>Updates the merchant order ID for a given order.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;merchantOrderId&quot;: &quot;A String&quot;, # The merchant order id to be assigned to the order. Must be unique per merchant.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersUpdateMerchantOrderIdResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersUpdateMerchantOrderIdResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateshipment">updateshipment(merchantId, orderId, body=None)</code>
  <pre>Updates a shipment&#x27;s status, carrier, and/or tracking ID.

Args:
  merchantId: string, The ID of the account that manages the order. This cannot be a multi-client account. (required)
  orderId: string, The ID of the order. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;carrier&quot;: &quot;A String&quot;, # The carrier handling the shipment. Not updated if missing. See `shipments[].carrier` in the  Orders resource representation for a list of acceptable values.
    &quot;deliveryDate&quot;: &quot;A String&quot;, # Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if `status` is `delivered`.
    &quot;operationId&quot;: &quot;A String&quot;, # The ID of the operation. Unique across all operations for a given order.
    &quot;shipmentId&quot;: &quot;A String&quot;, # The ID of the shipment.
    &quot;status&quot;: &quot;A String&quot;, # New status for the shipment. Not updated if missing.
        # 
        # Acceptable values are:
        # - &quot;`delivered`&quot;
        # - &quot;`undeliverable`&quot;
        # - &quot;`readyForPickup`&quot;
    &quot;trackingId&quot;: &quot;A String&quot;, # The tracking ID for the shipment. Not updated if missing.
  }


Returns:
  An object of the form:

    {
    &quot;executionStatus&quot;: &quot;A String&quot;, # The status of the execution.
        #
        # Acceptable values are:
        # - &quot;`duplicate`&quot;
        # - &quot;`executed`&quot;
    &quot;kind&quot;: &quot;content#ordersUpdateShipmentResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#ordersUpdateShipmentResponse&quot;.
  }</pre>
</div>

</body></html>