---
schema_version: "1"
id: 2b021a975cb86e3804316bfa463ab6e2cdcd005f90887250c9cbb15f27639a6e
title: Delivery Group SPI
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/commerce-cloud/retail-cloud/reference/generated-api-specs/delivery-group-spi.md
canonical_url: https://developer.salesforce.com/docs/commerce/retail-cloud/references/delivery-group-spi
source_site: developer.salesforce.com
content_type: documentation
content_hash: 2396886be5cf00251a9b41a8e5d7d4cc1b8811763689c930f3bd9852868b4e82
products:
  - Point of Sale for Developers
  - Salesforce APIs
---
Delivery Group SPI

# Delivery Group SPI

[Download specification](https://developer.salesforce.com/static/commercecloud/retail-cloud/delivery-group-spi/delivery-group-spi-oas-public.yaml)

Sample SPIs that demonstrate how to implement SPI endpoints in the merchant's system. These endpoints are configured in CMS so that the POS can use them during all cart operations to obtain the relevant delivery groups.

**Version:** 2.3.4

## Tags

### Delivery Group SPI

[Download specification](https://developer.salesforce.com/static/commercecloud/retail-cloud/delivery-group-spi/delivery-group-spi-oas-public.yaml)

Sample SPIs that demonstrate how to implement SPI endpoints in the merchant's system. These endpoints are configured in CMS so that the POS can use them during all cart operations to obtain the relevant delivery groups.

## Operations

### POST Retrieve delivery group list.

`POST /merchant/spi/sample/endpoint/sa/deliveryGroup`

Operation ID: `getDeliveryGroupList`. Tags: Delivery Group SPI.

Retrieve delivery group from merchant's system. This SPI also provides shipping options for each delivery group. This SPI is used by POS to get delivery groups corresponding to cart and is triggered if the cart has a delivery item. Merchants must implement this endpoint per this specification and then configure it in CMS under **CMS** > **Store Management** > **Integration** > **Custom API Connectors** > **Create**. Make sure to create the endpoint in CMS with the following details:

1.  Under **API Config**:
    *   **API Key:** `DELIVERY_GROUP`
    *   **API Endpoint:** Provide the external endpoint to get the delivery group, for example: [https://sample/external/endpoint/to/get/deliveryGroup/from/external/system/456709](https://sample/external/endpoint/to/get/deliveryGroup/from/external/system/456709)
2.  Under **JSON Config**:
    *   **Integration Type:** `HTTP_POST`
    *   **JSON Headers:** Provide the header for the API. Headers can be Content-Type, for example: {"Content-Type":"application/json"}.

#### Request body

Media type: `*/*`. Schema: `SPIShipmentProcessorRequest`.

#### Responses

*   **default** Default response.
    
    Media type: `application/json`. Schema: `SPIShipmentProcessorResponse`.
    

## Schemas

### SPIShipmentProcessorRequest

*   `cartId` (_string_, required) Unique identifier for the cart.
*   `editOrderId` (_string_) Order ID for the order being edited.
*   `cartItemList` (_array of SPIShipmentProcessorRequestProduct_, required) All the items from the cart. Each item has a link to its delivery group via deliveryGroupId.
*   `deliveryGroupList` (_array of SPIShipmentProcessorRequestDeliveryGroup_, required) All delivery groups corresponding to the delivery items from the cart.

### SPIShipmentProcessorResponse

*   `errorMessage` (_string_, nullable) Error message shown to the user.  
    Example: `Invalid request. Please check the request and try again.`.
*   `errorCode` (_string_, nullable) Error code shown to the user.  
    Example: `INTERNAL_ERROR`.
*   `cartItemList` (_array of SPIShipmentProcessorResponseProduct_, required) All items from the cart are associated with a deliveryGroupId, enabling linkage to the corresponding deliveryGroup within the deliveryGroupList. Additionally, each item may possess custom attributes.
*   `deliveryGroupList` (_array of SPIShipmentProcessorResponseDeliveryGroup_, required) All delivery groups corresponding to the delivery items from the cart.
*   `error` (_boolean_)

### SPIShipmentProcessorRequestProduct

All the items from the cart. Each item has a link to its delivery group via deliveryGroupId.

*   `orderItemId` (_string_, required, write-only) Item sequence/System generated item ID assigned to this line item. Must be unique within this order and should have numerical value in string.  
    Example: `It can have values like 1, 2, 3, etc... which represents line item number within the order.`.
*   `parentOrderItemId` (_string_, write-only) Indicates the parent order item ID for add-on items, pointing to the main item's order item ID. For example, values like 1, 2, or 3 represent the line item number of the parent item.  
    Example: `1, 2, 3`.
*   `deliveryGroupId` (_string_, write-only) Delivery group ID. It is an identifier to the shipping details of the item. It links the item to one of the delivery groups available under transaction. It is applicable for delivery items.  
    Maximum length: 32.
*   `productId` (_string_, required, write-only) Product ID. Unique identifier of an item. All the variations of an item will have distinct product ID, hence it is equivalent to SKU.
*   `variantGroupId` (_string_, required, write-only) Variant Group ID. All the variants of an item are grouped together under the same variant ID.
*   `customAttributeList` (_array of ProductFormAttribute_) Custom attributes related to the product. The products have custom attributes  
    like customString0,customString1. etc. Merchants can map their custom attributes to  
    these fields in field mapping and provide the values in the product feed.  
    For more details, see:  
    [Clienteling SPI Field Mapping](https://developer.salesforce.com/docs/commerce/retail-cloud/guide/clienteling-spi-field-mapping.html)  
    If merchants want custom attributes to be exported in Order Export and also here in  
    this SPI request, they need to configure CMS's store settings as below  
    **CMS** > **Store Management** > **Store Setting** > **Oms** > **Order** export > tLogCustomProductAttributes >  
    customString0,customString1.. etc.  
    
    _Example_
    
    ```
    [
      {
        "key": "color",
        "value": "red"
      }
    ]
    ```
    
*   `name` (_string_, required, write-only) Name of the item.
*   `price` (_number_, required, write-only) Price of the item.
*   `quantity` (_integer (int32)_, required, write-only) Item's Quantity.
*   `imageURL` (_string_, required, write-only) Image URL of the item.
*   `subTotal` (_number_, required, write-only) Item's total excluding discounts, shipping costs and taxes but inclusive of VAT.
*   `discount` (_number_, write-only) Total discount amount applied on the item, including all discount types (manual price override, transaction discount, coupon, rewards, and auto promotions). Required if any discounts are applied.
*   `total` (_number_, required, write-only) Item's total (final amount charged for this item), inclusive of tax/VAT and discounts.
*   `productTax` (_ExternalProductTax_)
*   `size` (_string_, write-only) Item's size.  
    Example: `39-42 or M or 38 etc...`.
*   `color` (_string_, required, write-only) Item's color.  
    Example: `Light Grey or Black etc...`.
*   `itemStatus` (_string_, required, write-only)
    
    Below is the list of statuses for in-store purchases and BORIS. The statuses are applicable for both the order and its items. The significance of each status is described in detail below.  
    The eligibility of an item for returns is determined by its current status and the status of the order. Moreover, the **returnsEligibility** attribute at the item level (productList) can also be used to regulate the return eligibility of an item.  
    To learn more about returns eligibility, please refer to the table below and productList.returnsEligibility  
      
    
    | Order Status | Display Name in Order History Filter | Significance for Order | Significance for Item | Return Eligibility |
    | --- | --- | --- | --- | --- |
    | COMPLETED | Completed | Successful sale transaction. | Item sold successfully. | Both the order and item are eligible for return. |
    | RETURNED | Returned | Successful return or exchange of all items with refund to customer. | Successful return of an item - whole quantity and is not eligible for return. | Both the order and item are not eligible for return. |
    | PARTIALLY\_REFUNDED | Partially Returned | Successful return or exchange of partial items with refund to customer. | Successful return of an item - partial quantity | Further returns are allowed on order as well as on item. |
    | EXCHANGED | Exchanged | Successful transaction that exchanges all items with no refund to customer | Successful exchanges of an item - whole quantity | Both the order and item are not eligible for return. |
    | PARTIALLY\_EXCHANGED | Partially Exchanged | Successful transaction that exchanges partial items with no refund to customer | Successful exchanges of an item - partial quantity | Further returns are allowed on order as well as on item. |
    | FAILED | Failed | Failed sale transaction. | Not applicable | Both the order and item are not eligible for return. |
    | PENDING | Pending | Sale transaction awaiting payment confirmation. For example, Remote Pay By Link | Not applicable | Both the order and item are not eligible for return. |
    
      
    Allowed values: `COMPLETED`, `FAILED`, `RETURNED`, `PARTIALLY_REFUNDED`, `PENDING`, `CANCELLED_WITH_REFUND`, `EXCHANGED`, `PARTIALLY_EXCHANGED`, `CANCELED`. Default: `COMPLETED`.
*   `gtin` (_string_, write-only) Item's GTIN.
*   `fulfillmentType` (_string_, required, write-only) Item's fulfillment type. It can be either IN\_STORE (in-store purchase) or ONLINE (delivery item).  
    Allowed values: `IN_STORE`, `ONLINE`, `MIXED_CART`.
*   `fulfillmentSubType` (_string_, required, write-only)
    
    1.  DEFAULT: Either item will be available from the current store for  
         cash & carry or for delivery to shipping address from a warehouse.  
          Fulfillment Type:IN\_STORE, Fulfillment Sub Type: DEFAULT : Cash & carry item  
        2\. TRY\_AT\_STORE: An item will be made available in the selected store for the trial.  The taxes and promotion will not be applied on the try at store items.  
        3\. PICKUP\_LATER: An item will be made available for pickup from the selected store.  The fulfillment will be done the current store itself, or another store.  
        4\. SHIP\_TO\_HOME: An item will be delivered to provided shipping address.  The fulfillment will be done by the current store itself,  or another store or a warehouse.  
        5\. SHIP\_TO\_STORE: An item will be delivered to a store from where it can be picked up. 6. PICKUP\_NEARBY: An item will be made available for pickup in near by store.  
        \----------------------------------------------------------------------------------  
        
    
    | Fulfillment Type | Fulfillment SubType | Item |
    | --- | --- | --- |
    | IN\_STORE | DEFAULT | Cash & carry |
    | ONLINE | DEFAULT | Ship to home from warehouse |
    | ONLINE | TRY\_AT\_STORE | Ship to store from warehouse to try out |
    | IN\_STORE | PICKUP\_LATER | Pickup from current store |
    | IN\_STORE | SHIP\_TO\_HOME | Ship to home from store |
    | IN\_STORE | SHIP\_TO\_STORE | Ship to a store from another store for pickup |
    | ONLINE | SHIP\_TO\_STORE | Ship to store from warehouse for pickup (buy online ship to store) |
    | IN\_STORE | PICKUP\_NEARBY | Pickup from another store |
    
    .
    
      
    Allowed values: `DEFAULT`, `TRY_AT_STORE`, `PICKUP_LATER`, `SHIP_TO_HOME`, `SHIP_TO_STORE`, `PICKUP_NEARBY`.
*   `priceCorrection` (_ExternalProductPriceCorrection_)
*   `productClass` (_string_, required, write-only) Product class of the item.
*   `serialNumber` (_string_, write-only) Serial number of the item (if applicable).
*   `productCondition` (_string_, write-only) Product condition.  
    Allowed values: `NEW`, `USED`, `REFURBISHED`. Default: `NEW`.
*   `registryId` (_string_, write-only, nullable) The unique ID of the registry. This is required when the item being purchased or returned is a gift registry item.

### SPIShipmentProcessorRequestDeliveryGroup

All delivery groups corresponding the delivery items from the cart.

*   `deliveryGroupId` (_string_, required) Delivery group ID. Unique ID in alphanumeric format.  
    Maximum length: 32.
*   `fulfillmentType` (_string_, required) Fulfillment type.  
    Allowed values: `IN_STORE`, `ONLINE`, `MIXED_CART`.
*   `fulfillmentSubType` (_string_, required)
    
    1.  DEFAULT: Either item will be available from the current store for  
         cash & carry or for delivery to shipping address from a warehouse.  
          Fulfillment Type:IN\_STORE, Fulfillment Sub Type: DEFAULT : Cash & carry item  
        2\. TRY\_AT\_STORE: An item will be made available in the selected store for the trial.  The taxes and promotion will not be applied on the try at store items.  
        3\. PICKUP\_LATER: An item will be made available for pickup from the selected store.  The fulfillment will be done the current store itself, or another store.  
        4\. SHIP\_TO\_HOME: An item will be delivered to provided shipping address.  The fulfillment will be done by the current store itself,  or another store or a warehouse.  
        5\. SHIP\_TO\_STORE: An item will be delivered to a store from where it can be picked up. 6. PICKUP\_NEARBY: An item will be made available for pickup in near by store.  
        \----------------------------------------------------------------------------------  
        
    
    | Fulfillment Type | Fulfillment SubType | Item |
    | --- | --- | --- |
    | IN\_STORE | DEFAULT | Cash & carry |
    | ONLINE | DEFAULT | Ship to home from warehouse |
    | ONLINE | TRY\_AT\_STORE | Ship to store from warehouse to try out |
    | IN\_STORE | PICKUP\_LATER | Pickup from current store |
    | IN\_STORE | SHIP\_TO\_HOME | Ship to home from store |
    | IN\_STORE | SHIP\_TO\_STORE | Ship to a store from another store for pickup |
    | ONLINE | SHIP\_TO\_STORE | Ship to store from warehouse for pickup (buy online ship to store) |
    | IN\_STORE | PICKUP\_NEARBY | Pickup from another store |
    
    .
    
      
    Allowed values: `DEFAULT`, `BOSS`, `BOPIS`, `TRY_AT_STORE`, `PICKUP_LATER`, `SHIP_TO_HOME`, `SHIP_TO_STORE`, `PICKUP_NEARBY`.
*   `shippingMethod` (_SPIShipmentProcessorShippingMethod_)
*   `shippingAddress` (_ExternalAddress_)
*   `dateTimeSlot` (_ExternalDateTimeSlot_)
*   `availableDateTimeSlotList` (_array of ExternalAvailableDateTimeSlot_, read-only) Available delivery date time slots.
*   `deliveryDatePickerOption` (_string_, read-only) Determines what action to take for the delivery date picker.  
    Allowed values: `ENABLED`, `DISABLED`.
*   `sortOrder` (_integer (int32)_, required) PS POS uses sort order to display delivery groups in a specific sequence. If not provided, the display order becomes unpredictable.
*   `fulfillmentAddress` (_ExternalAddress_)

### SPIShipmentProcessorResponseProduct

All items from the cart are associated with a deliveryGroupId,  
enabling linkage to the corresponding deliveryGroup within the deliveryGroupList.  
Additionally, each item may possess custom attributes.

*   `orderItemId` (_string_, required, read-only) Item sequence/System generated item ID assigned to this line item. Must be unique within this order and should have numerical value in string.  
    Example: `It can have values like 1, 2, 3, etc... which represents line item number within the order.`.
*   `deliveryGroupId` (_string_, read-only) Delivery group ID. It is an identifier to the shipping details of the item. It links the item to one of the delivery groups available under transaction. It is applicable for delivery items.  
    Maximum length: 32.
*   `customAttributeList` (_array of ProductFormAttribute_, read-only) Custom attributes related to the product.  
    All these attributes will be available in order export JSON at item level under attribute:  
    tLogCustomProductAttributes.
    
    _Example_
    
    ```
    [
      {
        "key": "color",
        "value": "red"
      }
    ]
    ```
    

### SPIShipmentProcessorResponseDeliveryGroup

All delivery groups corresponding the delivery items from the cart.

*   `deliveryGroupId` (_string_, required) Delivery group ID. Unique ID in alphanumeric format.  
    Maximum length: 32.
*   `fulfillmentType` (_string_, required) Fulfillment type.  
    Allowed values: `IN_STORE`, `ONLINE`, `MIXED_CART`.
*   `fulfillmentSubType` (_string_, required)
    
    1.  DEFAULT: Either item will be available from the current store for  
         cash & carry or for delivery to shipping address from a warehouse.  
          Fulfillment Type:IN\_STORE, Fulfillment Sub Type: DEFAULT : Cash & carry item  
        2\. TRY\_AT\_STORE: An item will be made available in the selected store for the trial.  The taxes and promotion will not be applied on the try at store items.  
        3\. PICKUP\_LATER: An item will be made available for pickup from the selected store.  The fulfillment will be done the current store itself, or another store.  
        4\. SHIP\_TO\_HOME: An item will be delivered to provided shipping address.  The fulfillment will be done by the current store itself,  or another store or a warehouse.  
        5\. SHIP\_TO\_STORE: An item will be delivered to a store from where it can be picked up. 6. PICKUP\_NEARBY: An item will be made available for pickup in near by store.  
        \----------------------------------------------------------------------------------  
        
    
    | Fulfillment Type | Fulfillment SubType | Item |
    | --- | --- | --- |
    | IN\_STORE | DEFAULT | Cash & carry |
    | ONLINE | DEFAULT | Ship to home from warehouse |
    | ONLINE | TRY\_AT\_STORE | Ship to store from warehouse to try out |
    | IN\_STORE | PICKUP\_LATER | Pickup from current store |
    | IN\_STORE | SHIP\_TO\_HOME | Ship to home from store |
    | IN\_STORE | SHIP\_TO\_STORE | Ship to a store from another store for pickup |
    | ONLINE | SHIP\_TO\_STORE | Ship to store from warehouse for pickup (buy online ship to store) |
    | IN\_STORE | PICKUP\_NEARBY | Pickup from another store |
    
    .
    
      
    Allowed values: `DEFAULT`, `BOSS`, `BOPIS`, `TRY_AT_STORE`, `PICKUP_LATER`, `SHIP_TO_HOME`, `SHIP_TO_STORE`, `PICKUP_NEARBY`.
*   `shippingMethod` (_SPIShipmentProcessorShippingMethod_)
*   `shippingAddress` (_ExternalAddress_)
*   `dateTimeSlot` (_ExternalDateTimeSlot_)
*   `availableDateTimeSlotList` (_array of ExternalAvailableDateTimeSlot_, read-only) Available delivery date time slots.
*   `deliveryDatePickerOption` (_string_, read-only) Determines what action to take for the delivery date picker.  
    Allowed values: `ENABLED`, `DISABLED`.
*   `sortOrder` (_integer (int32)_, required) PS POS uses sort order to display delivery groups in a specific sequence. If not provided, the display order becomes unpredictable.
*   `fulfillmentAddress` (_ExternalAddress_)
*   `shippingMethodList` (_array of SPIShipmentProcessorShippingMethod_) Available shipping method options corresponding to the delivery group. It is optional and must be provided if an address is provided for the delivery group.

### ProductFormAttribute

Details about a product form attribute.

*   `key` (_string_) The identifier of the attribute.  
    Example: `color`.
*   `value` (_string_) The value associated with the key.  
    Example: `blue`.

_Example_

```
[
  {
    "key": "color",
    "value": "red"
  }
]
```

### ExternalProductTax

Tax/Vat details.

*   `totalTax` (_number_, required) Total tax. Required in case of tax countries.
*   `taxExemption` (_number_, nullable) Tax Exemption.
*   `taxRateList` (_array of ProductTaxRate_, nullable) Tax Rates.
*   `vatRateList` (_array of ProductTaxRate_, nullable) VAT Rates.
*   `valueAddedTax` (_number_, nullable) Total VAT. Required in case of VAT countries.
*   `taxableAmount` (_number_, required) Taxable amount.

### ExternalProductPriceCorrection

Price correction applied on the item with information like the approval manager ID and original price. Sale price becomes new corrected price.

*   `originalPrice` (_number_) Original price of the item.
*   `approvingManagerId` (_string_) ID of the manager who approved the price correction request.

### SPIShipmentProcessorShippingMethod

This selected or default shipping method must be chosen from the shippingMethodList if an address is provided for the delivery group. Refer to other attributes address and shippingMethodList for more details. It is optional.

*   `shippingMethodId` (_string_, required) Unique Identifier for the Shipping Method.  
    Maximum length: 45. Example: `001`.
*   `name` (_string_, required) Shipping Method Name.  
    Maximum length: 128. Example: `Standard Shipping`.
*   `price` (_number_, required) Shipping cost.
*   `sortOrder` (_integer (int32)_) Display Order.  
    Default: `0`.
*   `shippingTax` (_number_, nullable) Tax amount for the shipping cost. Applicable for tax countries and if the shipping cost is taxable.
*   `shippingValueAddedTax` (_number_, nullable) VAT amount for the shipping cost. Applicable for vat countries and if the shipping cost is taxable.
*   `taxExemption` (_number_, nullable) Tax exemption amount for the shipping cost. Applicable for tax countries and if the shipping cost is taxable and tax exemption is applied.
*   `serviceLevel` (_string_, nullable) Service Level Description.  
    E.g. 3-5 Days, 1-Day, Express, Standard, Overnight.  
    Maximum length: 128. Example: `3-5 Days`.
*   `priceAfterShippingDiscount` (_number_, nullable) Price after applying shipping discount.
*   `itemLevelCharges` (_array of SPIShipmentProcessorItemLevelCharge_, nullable) Item level breakdown for the shipping cost and shipping discount.

### ExternalAddress

Billing address.

*   `salutation` (_string_, nullable) Salutation.
*   `firstName` (_string_, required, nullable) Customer first name saved for address.  
    Maximum length: 64.
*   `lastName` (_string_, nullable) Customer last name saved for address.  
    Maximum length: 64.
*   `addressLine1` (_string_, required, nullable) Address Line 1.  
    Maximum length: 256.
*   `addressLine2` (_string_, nullable) Address Line 2.  
    Maximum length: 256.
*   `city` (_string_, required, nullable) City.  
    Maximum length: 64.
*   `state` (_string_, required, nullable) State.  
    Maximum length: 32.
*   `postalCode` (_string_, required, nullable) Postal Code.  
    Maximum length: 16.
*   `countryCode` (_string_, required, nullable) Country Code.  
    Maximum length: 32.
*   `phone` (_string_, nullable) Phone.  
    Maximum length: 24.
*   `storeId` (_string_, nullable) Store ID if it is store address.
*   `addressType` (_string_, nullable) Address type- Home, Business.
*   `emailAddress` (_string_, nullable) Customer Email Address.  
    Maximum length: 64.
*   `country` (_string_, nullable) Country.

### ExternalDateTimeSlot

Delivery date time. It is optional. It must be provided if associate/customer has entered the delivery date for the delivery group.

*   `slotId` (_string_) Slot ID.  
    Example: `1234`.
*   `date` (_integer (int64)_, required) Delivery date in epoch.
*   `timeSlot` (_string_, required) Time slot.  
    Example: `09:00 - 12:00`.
*   `dateTimeSlotType` (_string_, nullable) Time slot type.  
    Allowed values: `Delivery`, `Pickup`. Default: `Delivery`.

### ExternalAvailableDateTimeSlot

Available delivery date time slots.

*   `slotId` (_string_) Slot ID.  
    Example: `1234`.
*   `date` (_integer (int64)_, required) Delivery date in epoch.
*   `availableTimeSlots` (_array of string_) Available time slots.  
    Items: Example: `["12:00 - 14:00"]`.
    
    _Example_
    
    ```
    [
      "12:00 - 14:00"
    ]
    ```
    
*   `dateTimeSlotType` (_string_, nullable) Time slot type.  
    Allowed values: `Delivery`, `Pickup`. Default: `Delivery`.

### ProductTaxRate

VAT breakdown for the shipping cost. Applicable for VAT countries and if the shipping cost is taxable.

*   `countryCode` (_string_, required) Country Code.  
    Maximum length: 2. Example: `US`.
*   `state` (_string_, nullable) State. Applicable if the tax rate is specific to state.  
    Maximum length: 128.
*   `postalCode` (_string_, nullable) Postal Code. Applicable if the tax rate is specific to postal code.  
    Maximum length: 10.
*   `taxType` (_string_, required) Indicates the tax type, such as COUNTRY, CITY, or STATE. The following tax types are specific to the Vertex tax engine: PROVINCE, TERRITORY, APO, BOROUGH, FPO, LOCAL\_IMPROVEMENT\_DISTRICT, PARISH, SPECIAL\_PURPOSE\_DISTRICT, TOWNSHIP, TRADE\_BLOCK, and TRANSIT\_DISTRICT.  
    Allowed values: `CLASS`, `CITY`, `DISTRICT`, `COUNTY`, `STATE`, `COUNTRY`, `ITEM_OVERRIDE`, `STORE_OVERRIDE`, `TRANSACTION_OVERRIDE`, `SPECIAL`, `PROVINCE`, `TERRITORY`, `APO`, `BOROUGH`, `FPO`, `LOCAL_IMPROVEMENT_DISTRICT`, `PARISH`, `SPECIAL_PURPOSE_DISTRICT`, `TOWNSHIP`, `TRADE_BLOCK`, `TRANSIT_DISTRICT`.
*   `chargeType` (_string_) Indicates if the charge is for tax or fee - TAX/FEE.  
    Allowed values: `TAX`, `FEE`. Default: `TAX`.
*   `nonRefundable` (_boolean_) Specifies whether the charge (tax or fee) is refundable.  
    Default: `false`.
*   `taxRate` (_number (float)_, required) % tax/vat rate.  
    Example: `7.25`.
*   `taxClass` (_string_, required) The tax engine uses tax classes to apply specific tax rates to different product categories. Each product is linked to a tax class, which determines its applicable tax rate.  
    Example: `Tax Class for Shoes and Clothing - PS0001`.
*   `taxCode` (_string_, required) Unique identifier for a tax rate, unique per item.
*   `taxAmount` (_number_, required) Total tax amount for the item corresponding to the item's tax rate.  
    Example: `7.25`.
*   `perUnitTaxAmount` (_number_, required) Per unit tax amount of the item corresponding to the tax rate.  
    Example: `1.25`.
*   `taxName` (_string_, required) Tax name, for example, Jurisdiction, MTA, BTW Hoog, or BTW Laag.  
    Maximum length: 64.
*   `displayTaxName` (_string_, required) Display tax name, for example, Jurisdiction - 7.25%, BTW Hoog - 21%, or BTW Laag - 9%.
*   `corporateTaxId` (_string_, nullable) Merchant's Tax Identification Number.  
    Example: `HST-74252RT0001`.
*   `printTaxName` (_string_, nullable) Print tax name for receipts. Includes merchant's tax identification number. For example: HST-74252RT0001 - 7.25%.
*   `externalTaxId` (_string_, nullable) Additional Tax Identifier for external systems.
*   `isExempt` (_boolean_, nullable) Indicates if tax is exempted.  
    Default: `false`.
*   `taxDescription` (_string_, nullable) Tax Description text.
*   `jurisdiction` (_string_, nullable) Jurisdiction.  
    Maximum length: 128.
*   `registrationNumber` (_string_, nullable) Registration Number.  
    Maximum length: 128.
*   `externalId` (_string_, nullable) Identifies the current tax record in the external system. This is a record identifier, not a tax identifier. Used when an order is imported from an external system. Orders placed directly through POS don't populate this identifier. The external system provides this identifier and POS replays it during order posting for subsequent modifications such as returns.  
    Maximum length: 128.

### SPIShipmentProcessorItemLevelCharge

Item level breakdown for the shipping cost and shipping discount.

*   `orderItemId` (_string_, required) Unique sequence number assigned to cart item that belongs to the order or delivery group.  
    Example: `It can have values like 1, 2, 3, etc...<br> which represents line item number within the order or Delivery Group.`.
*   `itemShippingCharge` (_number_) Item level shipping charge.
*   `itemShippingDiscountAmount` (_number_, nullable) Shipping discount that can be applied on item level shipping price due to promotion or reward.
*   `discountText` (_string_, nullable) Discount text of an applied promotion.  
    Maximum length: 1500.
*   `promotionId` (_string_, nullable) External Merchant promotion ID corresponding applied promotion.