<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="#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="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)
                  # 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.
                &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)
            # 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.
          &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)
              # 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.
            &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)
                # 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.
              &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>