---
schema_version: "1"
id: 68ccaf592287e464b37b08c4d3e87d3a14d072c29b21bb77ca4a305e30ad1693
title: Salesforce Order Management System Integration Guide
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/commerce/264-0-0/rt_adv_config_sf_int_oms.md
canonical_url: https://help.salesforce.com/s/articleView?id=commerce.rt_adv_config_sf_int_oms.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: fa13447188223a3b0d819fade7229f71c383eb53bb1feac080446da9cac92892
description: Integrate the Salesforce Order Management System (OMS) connector with the Point of Sale platform.
products:
  - Commerce
release: "264"
---
# Salesforce Order Management System Integration Guide

Integrate the Salesforce Order Management System (OMS) connector with the Point of Sale platform.

After reading this article, read [SF OMS CMS Configuration](https://help.salesforce.com/s/articleView?id=commerce.rt_adv_config_sf_int_sfoms.htm&release=264.0.0&type=5 "Discover the steps to configure the Salesforce Order Management System (OMS) in CMS. Point of Sale platform has an inbuilt Salesforce OMS connector. The connector is built on the best practices and collaboration with the Salesforce team.") to learn the configuration portion.

## Prerequisites:

- Refer to [POS Access List - URLs and IP Addresses](https://help.salesforce.com/s/articleView?id=commerce.rt_adv_config_3p_int_erp_pos_access_list.htm&release=264.0.0&type=5 "To enable POS and cloud services to interact with external, third-party services, allowlist specific URLs and IP addresses within the merchant's firewall. Ensure necessary communication for Adyen Payments, Elavon Payments, and other connectors by allowlisting URLs configured on CMS and product or order systems. The in-store IT team handles store firewall and POS app URLs, while the corporate IT team manages backend outbound NAT gateway IPs for connectors.") for a list of URLs and IP addresses to be allow listed. This is to enable necessary communication.
- The Person Accounts feature must be turned on in your Salesforce environment. Point of Sale's API connectors leverage queries for "Person Account" account types. It won't function if not turned on.

## Salesforce OMS Integration Methodology

There are a couple of ways Point of Sale can integrate with the Salesforce OMS.

- Shared Responsibility Model - Integrates with the SF OMS via REST APIs with a shared responsibility model where all API integration is owned by Point of Sale. The SF OMS process flows are controlled by the merchant and their SI. This allows brands to customize their flows as per business needs.
- Customized Package - Creates a custom SF OMS package with a set of pre-defined process flow from Point of Sale. Point of Sale works with the merchant's SI to customize as per merchant needs.

After reviewing the pros and cons of both options, Point of Sale decided to integrate using the shared responsibility model with a clear demarcation between the API client (Point of Sale) and the owner (merchant/SI).

## Troubleshoot State and Country/Territory Picklist Errors

When the State and Country/Territory Picklists feature is enabled in your Salesforce Order Management org, Salesforce validates the country and state values on incoming order addresses. The connector sends the country and state values (for example, the code `FR`) into the standard country and state name fields. With the picklists enabled, Salesforce accepts a value in those fields only when it matches a country or state Integration Value. If the country, state, or territory that Point of Sale sends doesn't match the Integration Value configured for that field, Salesforce logs this error internally:

"There's a problem with this country, even though it may appear correct. Please select a country/territory from the list of valid countries."

To resolve this issue in your Salesforce org, use one of the following options. No Point of Sale or CMS configuration is involved.

**Option 1: Align the picklist Integration Values (Recommended)**

Change each country and state Integration Value so that it matches the value the connector posts.

1. Click the gear icon, and then select **Setup**.
2. In Quick Find, enter **State and Country/Territory Picklists**, and then select it.
3. Click **Configure States, Countries, and Territories**.
4. In the Countries/Territories list, locate the country, and then click **Edit** in the Action column.
5. On the Country/Territory Details page, set the Integration Value to the value the connector posts (for example, change `France` to `FR`). Confirm that **Active** is selected.![The Country/Territory Details page in Salesforce Setup showing France with the Integration Value field set to FR.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_country_integration_value.png)
6. Click **Save**.
7. To align states, open the country and edit each state under States, setting its Integration Value the same way.
8. Repeat these steps for every country and state that your stores transact in.

**Option 2: Transform the value with Apex**

Add an Apex class in the Order Management org that transforms the incoming country and state values to valid picklist values before the order record is saved. For more information, see [Apex Code Overview](https://help.salesforce.com/s/articleView?id=platform.code_about.htm&type=5&language=en_US) in Salesforce Help.

## POS Use Cases

Understand the use cases for the Point of Sale (POS) that uses the Salesforce OMS adapter.

### POS Flows

- Sale Transactions
    - In-Store Order
    - Endless Aisle Order
    - Mixed Cart Order
- POS In-Store Returns
- POS Exchanges

### Omnichannel Flows

- BORIS - Buy Online Return In Store
- BOPIS - Buy Online Pickup In Store
    - BOPIS
        - _What happens if the customer does not pick up?_ When a BOPIS order is created, it goes into the packing stage in fulfillment. If the item isn't picked up. then the order can be canceled. SF OMS is then notified of the cancellation.
        - _What happens if the item is not available?_ Similar to the example above, the order can be canceled and SF OMS is notified.
    - Ship to Store
        - Inventory handling via ASN
        - Inventory receiving in store
- BOFIS - Buy Online Fulfill In Store
    - _What happens if the store cannot fulfill the order?_ Similar to BOPIS, SF OMS is notified that the store cannot fulfill the order.

## Reference Architecture

Understand the reference architecture for the integration of Point of Sale (POS) with Salesforce Order Management System (OMS).

![A block diagram showcases a Salesforce reference architecture for POS.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_arch.png)

## Salesforce OMS Integration Details

Use Salesforce OMS APIs and event listeners to connect POS posting flows with Point of Sale OMS objects. With a comprehensive order history, the integration supports advanced cancellation, order search, returns, and refunds, ensuring a complete customer 360 view.

### Salesforce OMS APIs

**Authorization**

OAUTH Access Token based authorization is used for API calls.

Reference: [REST API Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/quickstart_oauth.htm)

**Posting Transactions via SF Object APIs**

`SOBJECTS /services/data/<apiVersion>/sobjects/<Object>`

a. <Object> _can be Order, Account, OrderItem, Pricebook2, PricebookEntry, Product2, OrderDeliveryGroup, OrderPaymentSummary, OrderDeliveryGroupSummary, OrderItemSummary, FulfillmentOrder, FulfillmentOrderLineItem, Location, CardPaymentMethod, OrderDeliveryMethod, SalesChannel, PaymentGroup, PaymentAuthorization, OrderItemTaxLineItem, OrderAdjustmentGroup, OrderItemAdjustmentLineItem, Payment, PaymentMethod, Shipment, DigitalWallet, PaymentGateway_

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:50%">
              <col style="width:50%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e376">SObject</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e379">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">OrderSummary</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">This represents the current properties and state of an order, including
                  fulfillment information. It is associated with one order that represents the
                  original order. The order summary's values are the sums of the values in the
                  original order and any subsequent orders representing changes such as returns or
                  cancellations.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">Order</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">An original order or a change to an order, such as a return or cancellation. It
                  is associated with one order summary, which represents the current state of an
                  order. The values on the order records don’t usually change. In Order Management,
                  you usually interact with order summaries instead of orders.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">Account</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">When using Person Accounts, an account of the Person Account record type
                  represents an individual shopper. When not using Person Accounts, a standard account
                  and contact together represent an individual shopper. A business account shopper
                  always has a standard account and contact.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">PricebookEntry</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">
                  <p>The price of a product in a price book. Salesforce Order Management doesn't use
                    this object, but because order products require them, it creates dummy price
                    book-entry records. When you create products to represent delivery methods, you
                    must also add dummy price book-entry records.</p>
                  <p style="margin-bottom:0;">Note: If the Optional Price Books feature is turned on, then Order Management
                    doesn’t create price book-entry records, and you don’t have to add them to
                    delivery method products.</p>
                </td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">OrderDeliveryGroup</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">This defines a group of order products, belonging to one order, to be fulfilled
                  using the same delivery method and delivered to the same recipient. In Order
                  Management, you usually interact with order delivery group summaries instead of
                  order delivery groups.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">OrderDeliveryGroupSummary</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">This defines a group of order product summaries, belonging to one order
                  summary, to be fulfilled using the same delivery method and delivered to the same
                  recipient. An order delivery group summary is used to create one or more fulfillment
                  orders.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">FulfillmentOrder</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A fulfillment request or shipper's instruction that can be sent to a
                  fulfillment location. This represents a group of products and delivery charges on a
                  single order that have the same fulfillment location, delivery method, and
                  recipient. They can be included in one shipment or split into multiple shipments. A
                  fulfillment order is associated with one order summary. For BOFIS flows, the status can be updated using standard SFOMS PATCH endpoints or custom Platform Events depending on your SFOMSConfig settings.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">Location</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A location that fulfills orders, such as a warehouse or retail store.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">CardPaymentMethod</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A credit card or debit card.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">OrderDeliveryMethod</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">The Order Management uses an order delivery method record together with a
                  product record to represent a delivery method. The product record is added to an
                  order to represent a charge for that delivery method.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">SalesChannel</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A source of orders, such as a web storefront, physical store, marketplace, or
                  mobile app. If you use Salesforce B2C Commerce, we recommend creating a sales
                  channel record for each site in your B2C Commerce implementation.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">PaymentGroup</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A group of payment transactions processed for an order.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">PaymentAuthorization</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A single payment authorization.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">OrderAdjustmentGroup</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">This defines a related set of price adjustments to order products on one order.
                  In Order Management, you usually interact with order adjustment group summaries
                  instead of order adjustment groups.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">OrderAdjustmentGroupSummary</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">This defines a related set of price adjustments on order product summaries
                  belonging to one order summary. The integration with Salesforce B2C Commerce assigns
                  an order adjustment group summary for each storefront promotion to the adjustments
                  that belong to that promotion.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">Payment</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A single payment capture or sale.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">PaymentMethod</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A payment method, such as a credit card, cash, or digital wallet.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">DigitalWallet</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A digital payment method.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">Shipment</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A single package that is associated with one fulfillment order.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">PaymentGateway</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A connection to an external payment gateway.</td>

              </tr>
              <tr class="">
                <td data-label="SObject" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e376 ">Product2</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e379 ">A product that a merchant sells or has sold. A product can also represent
                  delivery charges for one or more order delivery methods.</td>

              </tr>
            </tbody>
          </table>

Reference: [Order Management Objects](https://help.salesforce.com/articleView?id=om_order_objects.htm&type=5&language=en_US)

**Cancel Order**

`/services/data/<apiVersion>/commerce/order-management/order-summaries/%s/actions/submit-cancel`

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:50%">
              <col style="width:50%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e615">HTTP Method</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e618">POST</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e615 ">URL</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e618 "><code>/commerce/order-management/order-summaries/orderSummaryId/actions/submit-cancel</code></td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e615 ">Request</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e618 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>
{
  "changeItems": [
    {
      "orderItemSummaryId": "10uxx0000004FYDAA2",
      "quantity": 1.0,
      "reason": "Wrong Item",
      "shippingReductionFlag": true
    }
  ]
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e615 ">Response</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e618 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>
{
  "changeItems": [
    {
      "orderItemSummaryId": "10uxx0000004FYDAA2",
      "quantity": 1.0,
      "reason": "Wrong Item",
      "shippingReductionFlag": true
    }
  ]
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e615 ">Reference</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e618 "><a href="https://developer.salesforce.com/docs/atlas.en-us.order_management_developer_guide.meta/order_management_developer_guide/connect_resources_sfom_order_summaries_submit_cancel.htm" target="_blank"><u>Salesforce Order Management Developer Guide -
                      Order Summaries, Submit Cancel</u></a></td>

              </tr>
            </tbody>
          </table>

**Return Order Items**

`/services/data/<apiVersion>/commerce/order-management/order-summaries/%s/actions/submit-return`

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:50%">
              <col style="width:50%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e690">HTTP Method</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e693">POST</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e690 ">URL</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e693 ">/commerce/order-management/order-summaries/orderSummaryId/actions/submit-return</td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e690 ">Request</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e693 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
  "changeItems": [
    {
      "orderItemSummaryId": "10uxx0000004FYDAA2",
      "quantity": 1.0,
      "reason": "Wrong Item",
      "shippingReductionFlag": true
    }
  ]
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e690 ">Response</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e693 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
  "changeItems": [
    {
      "orderItemSummaryId": "10uxx0000004FYDAA2",
      "quantity": 1.0,
      "reason": "Wrong Item",
      "shippingReductionFlag": true
    }
  ]
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e690 ">Reference</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e693 "><a href="https://developer.salesforce.com/docs/atlas.en-us.order_management_developer_guide.meta/order_management_developer_guide/connect_resources_sfom_order_summaries_submit_return.htm" target="_blank"><u>Salesforce Order Management Developer Guide - Order Summaries, Submit Return</u></a></td>

              </tr>
            </tbody>
          </table>

**Cancel Order Item**

`/services/data/<apiVersion>/commerce/fulfillment/fulfillment-orders/%s/actions/cancel-item`

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:50%">
              <col style="width:50%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e765">HTTP Method</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e768">POST</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e765 ">URL</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e768 "><code>/commerce/fulfillment/fulfillment-orders/fulfillmentOrderId/actions/cancel-item</code></td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e765 ">Request</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e768 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
"fulfillmentOrderLineItemsToCancel" : [
  {   
    "fulfillmentOrderLineItemId" : "0a4xx00000000W0001",
    "quantity":1
  },
  {   
    "fulfillmentOrderLineItemId" : "0a4xx00000000W0002",
    "quantity":2
  }
]
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e765 ">Response</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e768 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
"fulfillmentOrderLineItemsToCancel" : [
  {   
    "fulfillmentOrderLineItemId" : "0a4xx00000000W0001",
    "quantity":1
  },
  {   
    "fulfillmentOrderLineItemId" : "0a4xx00000000W0002",
    "quantity":2
  }
]
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e765 ">Reference</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e768 "><a href="https://developer.salesforce.com/docs/atlas.en-us.order_management_developer_guide.meta/order_management_developer_guide/connect_resources_sfom_fulfillment_orders_cancel_items.htm" target="_blank"><u>Salesforce Order Management Developer Guide -
                      Fulfillment Orders, Cancel Item</u></a></td>

              </tr>
            </tbody>
          </table>

**Create Credit Memo**

`/commerce/order-management/order-summaries/orderSummaryId/actions/create-credit-memo`

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:50%">
              <col style="width:50%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e840">HTTP Method</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e843">POST</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e840 ">URL</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e843 "><code>/commerce/order-management/order-summaries/orderSummaryId/actions/create-credit-memo</code></td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e840 ">Request</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e843 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{ "changeOrderIds": [ "801R0000000EAAkIAO" ]</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e840 ">Response</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e843 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
  "creditMemoId": "50gR000000000JNIAY"
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e840 ">Reference</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e843 "><a href="https://developer.salesforce.com/docs/atlas.en-us.order_management_developer_guide.meta/order_management_developer_guide/connect_resources_sfom_order_summaries_ensure_refunds_async.htm" target="_blank"><u>Salesforce Order Management Developer Guide -
                      Order Summaries, Ensure Refunds Async</u></a></td>

              </tr>
            </tbody>
          </table>

**Create Credit Memo**

`/commerce/order-management/order-summaries/orderSummaryId/async-actions/ensure-refunds-async`

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:50%">
              <col style="width:50%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e916">HTTP Method</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e919">POST</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e916 ">URL</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e919 "><code>/commerce/order-management/order-summaries/orderSummaryId/async-actions/ensure-refunds-async</code></td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e916 ">Request</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e919 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
  "creditMemoId": "50gR000000000JNIAY"
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e916 ">Response</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e919 ">
                  <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
"background​OperationId":"21212121",
"success" : true
}
</code></pre>
                </td>

              </tr>
              <tr class="">
                <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e916 ">Reference</td>

                <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e919 "><a href="https://developer.salesforce.com/docs/atlas.en-us.order_management_developer_guide.meta/order_management_developer_guide/connect_resources_sfom_order_summaries_ensure_refunds_async.htm" target="_blank"><u>Salesforce Order Management Developer Guide -
                      Order Summaries, Ensure Refunds Async</u></a></td>

              </tr>
            </tbody>
          </table>

**Update Order Details (Change Order Summary)**

Use this API to submit changes to an existing order summary, such as edits to order item summary details, through Salesforce Order Management. This API supports API version 66.0 and later.

Before you use this API, complete these prerequisites.

- Make sure that Salesforce OMS is the system of record. After you post an order to Salesforce OMS, submit updates through OMS actions on the order summary. Don't edit the base order records directly.
- Enable the `OrgPermissions.changeOrderSummary` org permission in your Salesforce OMS org. This permission gives you access to the Change Order Summary API.
- Add a change reason code, such as `POS Edit Order`, to the Reason field on the Order Product Summary Change object (`OrderItemSummaryChange`). Your change requests need a valid reason.

`/services/data/v66.0/commerce/order-management/order-summaries/%s/actions/submit-change`

 
| HTTP Method | POST |
| --- | --- |
| URL | `/services/data/v66.0/commerce/order-management/order-summaries/orderSummaryId/actions/submit-change` |

### Salesforce OMS Event Listener

**BOPIS / BOFIS** - For Omni orders that are to be picked or fulfilled from stores, Point of Sale leverages the Salesforce Fulfilment Order Subscription Channel.

`/event/FOStatusChangedEvent`

Streaming API (CometD) is used for long polling and real-time streaming.

Reference: [Developer Documentation](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_fostatuschangedevent.htm)

**Custom Platform Events for BOFIS** - For Buy Online Fulfill In Store (BOFIS) orders that need custom status update handling, you can use custom Platform Events to receive updates from the POS system.

`Fulfillment_Status_Change__e`

This custom Platform Event enables POS to send fulfillment status changes for BOFIS orders, particularly for SHIPPED status updates. When configured, the POS system posts events to this endpoint to trigger status updates in Salesforce OMS.

Example endpoint: `/services/data/v52.0/sobjects/Fulfillment_Status_Change__e`

**Custom Field: Quantity\_Fulfilled\_\_c** - For tracking fulfilled quantities on individual fulfillment order line items during BOFIS flows, add the custom field `Quantity_Fulfilled__c` to the FulfillmentOrderLineItem object. This field tracks the quantity fulfilled for each line item when POS sends PATCH requests to update fulfillment status.

For a list of events that Point of Sale can stream, refer to [Point of Sale Data Exports](https://help.salesforce.com/s/articleView?id=commerce.rt_adv_config_export_events_streamed.htm&language=en_US).

### Salesforce OMS to Point of Sale OMS Object Mapping

This diagram explains the object mapping. For a detailed field-level mapping, see [POS Fields](https://help.salesforce.com/s/articleView?id=commerce.rt_adv_config_sf_int_sfoms.htm&release=264.0.0&type=5) in [Configure the Salesforce (SF) Order Management System (OMS) in CMS](https://help.salesforce.com/s/articleView?id=commerce.rt_adv_config_sf_int_sfoms.htm&release=264.0.0&type=5 "Discover the steps to configure the Salesforce Order Management System (OMS) in CMS. Point of Sale platform has an inbuilt Salesforce OMS connector. The connector is built on the best practices and collaboration with the Salesforce team.").![An object diagram illustrates the relationship between Salesforce and Point of Sale objects.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_details_obj_map.png)

 
| OMS Object | Point of Sale Object |
| --- | --- |
| Fulfillment Order | Order |
| Fulfillment Order Line Item | Order Detail. For BOFIS flows that require tracking fulfilled quantities, add the custom field `Quantity_Fulfilled__c` to this object. |
| Fulfillment Order Item Adjustment | Order Item Price Adjustment |
| Fulfillment Order Item Tax | Order Detail Tax |
| Invoice | Order Payment Details |
| Payment Line Invoice | Order Payment Details |
| Refund Line Payment | Order Refund Payment Details |
| Refund | Order Refund Payment Details |

### POS Posting Flows

Understand POS Posting Flows including the flow diagram for creating order objects, SObject details, and special data mapping. Visualize the process of creating order objects within SF OMS. Verify accurate and efficient transfer of data, reduce errors, and improve overall data quality.

After completing a sale on the app, the Point of Sale platform synchronously pushes the order information to the Salesforce OMS system using a composite graph API. As a fallback to primary posting in case of any errors, orders are pushed using an order export job process which can be scheduled via CMS.![A flowchart shows POS flowing to PS Cloud, which flows to SF OMS.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_pos_flows.png)

#### Flow Diagram for Creating Order Objects in SF OMS

This uses a Composite Graph API.

![A flowchart shows an integration for in-store and endless aisles.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_pos_flows_sequence.png)

#### SObject Details

The following Salesforce objects are used duringthe order creation process.

Account

Point of Sale looks up an account by the customer email and if it isn't found, it falls back to the default account. If a default account isn't found, Point of Sale creates one during runtime.

Get Account Details By Customer Email:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1303">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1306">GET</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1303 ">URL</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1306 "><code>/services/data/v49.0/query/?q=</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1303 ">Request</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1306 ">
                    <p style="margin-bottom:0;"><code>SELECT+Id+FROM+Account+WHERE+PersonEmail+%3D+%27a-manda.freeman@predictspring.com%27</code></p>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1303 ">Response</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1306 "><code>{"totalSize":1,"done":true,"records":[{"attributes":{"type":"Account","url":"/services/data/v49.0/sobjects/Account/00-105000005tmJFAAY"},"Id":"00105000005tmJFAAY"}]}</code></td>

                </tr>
              </tbody>
            </table>

Get Default Account Details:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1364">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1367">GET</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1364 ">URL</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1367 "><code>/services/data/v49.0/query/?q=</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1364 ">Request</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1367 "><code>SELECT+Id+FROM+Account+WHERE+Name+%3D+%27SHOPNOW20140910-en_US-US%27</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1364 ">Response</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1367 ">
                    <p style="margin-bottom:0;"><code>{"totalSize":1,"done":true,"records":[{"attributes":{"type":"Account","url":"/services/data/v49.0/sobjects/Account/00105000005tmJFAAY"},"Id":"00105000005tmJFAAY"}]}</code></p>
                  </td>

                </tr>
              </tbody>
            </table>

Create Default Account:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1425">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1428">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1425 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1428 "><code>/services/data/v49.0/sobjects/Account</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1425 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1428 "><code>{“Name”:”SHOPNOW20140910-en_US-US”}</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1425 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1428 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
"id" : "00105000009frZPAAY",
"success" : true,
"errors" : [ ]
}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

Pricebook2

Point of Sale looks up the price book by the merchant ID, locale, and region (MerchantID-Locale-Region). If it isn't found, Point of Sale creates one during run time.

Get Pricebook Details:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1491">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1494">GET</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1491 ">URL</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1494 "><code>/services/data/v49.0/query/?q=</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1491 ">Request</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1494 ">
                    <p style="margin-bottom:0;"><code>SELECT+Id+FROM+Pricebook2+WHERE+Name+%3D+%27SHOPNOW20140910-en_US-US%27
                    Response</code></p>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1491 ">Response</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1494 ">
                    <p style="margin-bottom:0;"><code>{"totalSize":1,"done":true,"records":[{"attributes":{"type":"Pricebook2","url":"/services/data/v49.0/sobjects/Pricebook2/01s-050000004X86AAE"},
                    "Id":"01s050000004X86AAE"}]}</code></p>
                  </td>

                </tr>
              </tbody>
            </table>

Create Pricebook Account:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1555">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1558">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1555 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1558 "><code>/services/data/v49.0/sobjects/Pricebook2</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1555 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1558 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{“Name”:”SHOPNOW20140910-en_US-US”, “Description”:”SHOPNOW20140910-en_US-US”, “IsActive”: true}</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1555 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1558 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
"id" : "01s050000004p3HAAQ",
"success" : true,
 "errors" : [ ]
}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

SalesChannel

Point of Sale looks up the sales channel with the name “POS”. If it isn't found, the system falls back to the default sales channel named MerchantId-Locale-Region-POS. If a default sales channel isn't found, Point of Sale creates it during run time.

Get:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1621">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1624">GET</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1621 ">URL</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1624 ">/services/data/v49.0/query/?q=</td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1621 ">Request</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1624 "><code>SELECT+Id+FROM+SalesChannel+WHERE+SalesChannel+%3D+%27POS%27</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1621 ">Response</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1624 ">
                    <p style="margin-bottom:0;"><code>{"totalSize":1,"done":true,"records":[{"attributes":{"type":"Pricebook2","url":"/services/data/v49.0/sobjects/SalesChannel/0-1s050000004X86AAE"},"Id":"01s050000004X86AAE"}]}</code></p>
                  </td>

                </tr>
              </tbody>
            </table>

Create:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1681">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1684">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1681 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1684 "><code>/services/data/v49.0/sobjects/SalesChannel</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1681 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1684 "><code>{“SalesChannelName”:”SHOPNOW20140910-en_US-US-POS”}</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1681 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1684 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
 "id" : "01s050000004p3HAAA",
"success" : true,
"errors" : [ ]
}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

OrderDeliveryMethod

DeliveryMethodName is derived as FulfillmentType-FulfillmentSubType. See the "OrderDeliveryMethod by order type" section below for details.

Get:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1747">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1750">GET</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1747 ">URL</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1750 "><code>/services/data/v49.0/query/?q=</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1747 ">Request</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1750 ">
                    <p style="margin-bottom:0;"><code>SELECT+Id+FROM+OrderDeliveryMethod+WHERE+Name+%3D+%27IN_STORE-DEFAULT%27</code></p>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1747 ">Response</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1750 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"totalSize":1,"done":true,"records":[{"attributes":{"type":"OrderDeliveryMethod","url":"/services/data/v49.0/sobjects/OrderDelivery-Method/01s050000004X86AAE"},"Id":"01s050000004X86AAE"}]}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

Create:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1808">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1811">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1808 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1811 "><code>/services/data/v49.0/sobjects/OrderDeliveryMethod</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1808 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1811 "><code>{“Name”:”IN_STORE-DEFAULT”}</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1808 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1811 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
 "id" : "01s050000004p3HAAA",
"success" : true,
"errors" : [ ]
}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

OrderDeliveryGroup

Create:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1871">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1874">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1871 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1874 "><code>/services/data/v49.0/sobjects/OrderDeliveryGroup</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1871 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1874 "><code>{"SourceObjectId":"80105000000283dAAA"}</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1871 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1874 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
 "id" : "01s050000004p3HAAA",
"success" : true,
 "errors" : [ ]
}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

PaymentGroup

Create:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1933">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e1936">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1933 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1936 ">/services/data/v49.0/sobjects/PaymentGroup</td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1933 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1936 ">{"SourceObjectId":"80105000000283dAAA"}</td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1933 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e1936 ">
                    <p>{</p>
                    <p> "id" : "01s050000004p3HAAA",</p>
                    <p> "success" : true,</p>
                    <p> "errors" : [ ]</p>
                    <p style="margin-bottom:0;">}</p>
                  </td>

                </tr>
              </tbody>
            </table>

CardPaymentMethod

CardPaymentMethod and Payment are created with the processing mode as “External” as the payment is completed in the POS.

Note: As part of the 8.10.1 app build, PaymentGatewayID was added to the CardPaymentMethod object to support payment capture in OM.

Create:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2014">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2017">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2014 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2017 "><code>/services/data/v49.0/sobjects/CardPaymentMethod</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2014 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2017 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"PaymentGatewayId":"0b0050000004C9IAAU", "PaymentGroupId":"9zx050000004PCeAAM","PaymentMethodId":"03O050000-0005CbEAI","ProcessingMode":"External","Status":"Processed","Amount":6.10,"AccountId":"00-105000005tmJFAAY","Type":"Sale"}</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2014 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2017 "><code>{"id":"03O0500000005CbEAI","success":true,"errors":[]}</code></td>

                </tr>
              </tbody>
            </table>

DigitalWallet

CardPaymentMethod and Payment are created with processing mode as “External” as the payment is completed in the external system.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2077">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2080">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2077 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2080 "><code>/services/data/v49.0/sobjects/DigitalWallet</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2077 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2080 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"PaymentGatewayId":"0b0050000004C9IAAU","ProcessingMode":"External", "Status":"Active","AccountId":"00105000005tmJFAAY","Type":"Cash"}</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2077 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2080 "><code>{"id":"1DW05000000028qGAA","success":true,"errors":[]}</code></td>

                </tr>
              </tbody>
            </table>

Payment

Payment status is “Processed” as the payment is processed at the POS Register.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2139">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2142">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2139 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2142 "><code>/services/data/v49.0/sobjects/Payment</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2139 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2142 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"PaymentGatewayId":"0b0050000004C9IAAU","PaymentGroupId":"9zx050000004P7PAAU", "PaymentMethodId":"1DW05000000028qGAA","ProcessingMode":"External", "Status":"Processed","Amount":10.17,"AccountId":"00105000005tmJFAAY","Type":"Sale"}</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2139 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2142 "><code>{"id":"0aQ0500000003SwEAI","success":true,"errors":[]}</code></td>

                </tr>
              </tbody>
            </table>

PriceBookEntry

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2198">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2201">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2198 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2201 "><code>/services/data/v49.0/sobjects/PricebookEntry</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2198 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2201 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"Pricebook2Id":"01s050000004X86AAE","Product2Id":"01t05000000VsvzAAC", "UnitPrice":20.00,"UseStandardPrice":false}</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2198 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2201 "><code>{"id":"01u05000001meKDAAY","success":true,"errors":[]}</code></td>

                </tr>
              </tbody>
            </table>

OrderItem - Create

When processing in-store orders via SF OMS Connector, there may be inconsistencies in the LineNumber value, which uniquely identifies items within an order. This is due to differences in the way LineNumbers are generated in SF OMS, using an indexing system rather than the OrderItemId.

During the return order posting process, two distinct methods can be employed:

- SF OMS Connector: Utilizes externalOrderItemId for return processing and preserves the original LineNumber (_LineNumber: 1 -> LineNumber: 1_)
- Point of Sale Order SPI: Point of Sale handles complete return orders and SF OMS updates the LineNumber according to the OrderItemId (_LineNumber: 1 -> LineNumber: 2_)

Point of Sale does not support dual-mode order postings, for example, SF OMS and SPI. It is recommended to either go with a full SPI or full SF OMS approach.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2288">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2291">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2288 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2291 "><code>/services/data/v49.0/sobjects/OrderItem</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2288 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2291 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"OrderDeliveryGroupId":"2Dg050000004PY6CAM","OrderId":"80105000000-28FxAAI", "PricebookEntryId":"01u05000001meKIAAY","LineNumber":1,"Quan-tity":1,"UnitPrice":20.00,"Type":"Order Product"}</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2288 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2291 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"id":"80205000000W5qoAAC","success":true,"errors":[]}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

12\. OrderItemTaxLineItem

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2348">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2351">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2348 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2351 "><code>/services/data/v49.0/sobjects/OrderItemTaxLineItem</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2348 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2351 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"Name":"HST","Amount":0.90,"Rate":13.0,"TaxEffectiveDate":"2021-01-03T19:48:20.790Z","OrderItemId":"80205000000Vy7ZAAS","Type":"Actual"}</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2348 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2351 "><code>{"id":"0au050000004HpLAAU","success":true,"errors":[]}</code></td>

                </tr>
              </tbody>
            </table>

OrderItemAdjustmentLineItem

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col style="width:50%">
                <col style="width:50%">
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2407">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2410">POST</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2407 ">URL</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2410 "><code>/services/data/v49.0/sobjects/OrderItemAdjustmentLineItem</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2407 ">Request</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2410 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{"Name":"PRICE_OVERRIDE_abn-petrowhat-rio-15ml","OrderId":"8010500000022A3AAI","Type":"Header","Descript-ion":"PRICE_OVERRIDE_abn-petrowhat-rio-15ml"}</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2407 ">Response</td>

                  <td data-label="POST" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2410 "><code>{"id":"3qZ050000004CVJEA2","success":true,"errors":[]}</code></td>

                </tr>
              </tbody>
            </table>

OrderDeliverMethod By Order Type

This information is configurable in the CMS:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small "><colgroup><col style="width:50%"> <col style="width:50%"></colgroup><tbody><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Order Type</td><td class="slds-cell-wrap" style="vertical-align:top;">OrderDeliveryMethod</td></tr><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">In-Store Sales (Take With)</td><td class="slds-cell-wrap" style="vertical-align:top;">OrderDeliveryMethod for in-store sales orders is IN_STORE-DEFAULT</td></tr><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">In-Store Sales (Pickup Later)</td><td class="slds-cell-wrap" style="vertical-align:top;">If a merchant supports pickup later (for example, picking up a bigger item using my pick-up truck later next week), OrderDeliveryMethod for in-store sales order is IN_STORE-PICKUP_LATER.</td></tr><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Endless Aisle Order</td><td class="slds-cell-wrap" style="vertical-align:top;">For endless aisle orders, the OrderDeliveryMethod is ONLINE-DEFAULT</td></tr></tbody></table>

#### Special Data Mapping

 
| Field | Specification |
| --- | --- |
| Payment.PaymentGatewayId | For cash payments, if a merchant needs specific payment gateway name to be used, it can be configured in PS OMS Configuration (OMSConfig.OmsCashPaymentGatewayName) |

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/images/icon_note.png)

Note After the order is “Activated”, the Salesforce process flow can be triggered to perform custom workflows. Typically, this workflow creates the necessary fulfillment order and related objects.

### BOPIS / BOFIS

The BOPIS (Buy Online, Pickup In Store) and BOFIS (Buy Online, Fulfill In Store) integration enables efficient order fulfillment and cancellation processes. By fetching fulfillment orders and pushing pick, pack, and shipped events into Salesforce Order Management System (OMS), businesses gain real-time visibility into their inventory and order status. Advanced cancellation features and scheduled jobs further streamline operations. Understand the key distinctions between BOPIS and BOFIS to optimize your fulfillment strategy.

![A diagram illustrates a BOPIS order flow.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_bopis_bofis_interaction.png)

- The customer places a BOPIS order through Salesforce Commerce.
- Salesforce Heroku Job is triggered.
- Heroku job exports customer orders to SF OMS.
- Salesforce Process flow creates order fulfillment objects in SF OMS.
- Payment captured in SF OMS.
- Salesforce triggered streaming API notification to Point of Sale.
- Point of Sale imports order details into the Point of Sale platform.
- Point of Sale sends notifications to the store regarding new BOPIS order
- Store associate picks & packs the order.
- POS notifies that order is packed and ready for customer pickup.
- Update SF OMS Fulfillment Order object with a status of Pickpack.
- SFMC sends the email.
- The customer picks up the order at the store.
- POS notified Point of Sale about the pickup.
- Point of Sale updates SF OMS about the order being picked up by the customer.

#### Fetch fulfillment orders

Point of Sale subscribed to FOStatusChangedEvent of SF OMS. This triggers an order import process as soon as the fulfillment order is in an appropriate state.

![A flowchart outlines the data flow between PS Cloud, SF OMS, and PS DB.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_bopis_bofis_fetch_flow.png)

There are a set of configurable conditions that are available to control when a fulfillment order can be imported into Point of Sale.

Here is the flow that shows the objects that are pulled in for a BOPIS order:

![A diagram illustrates an integration.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_bopis_bofis_seq.png)

#### Pick / Pack / Shipped Events Push Into SF OMS

![A flowchart shows a systems integration process with statuses.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_bopis_bofis_pick_seq.png)

API to update the fulfillment order status:

 
| HTTP Method | PATCH |
| --- | --- |
| URL | `/services/data/v49.0/sobjects/FulfillmentOrder/<Fulfillment Id>` |
| Request | `{"Status": "<StatusValue>"}` |
| Response | HTTP Code 204 |

#### Cancel Events Push Into OMS

![A flow chart outlines an integration between PS Cloud and SF OMS.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_bopis_bofis_cancel_seq.png)

API to update the fulfillment order status:

 
| HTTP Method | PATCH |
| --- | --- |
| URL | `/services/data/v49.0/sobjects/FulfillmentOrder/<Fulfillment Id>` |
| Request | `{"Status": "<StatusValue>"}` |
| Response | HTTP Code 204 |

#### Advanced Cancellation:

There can be line item cancellation and also order-level cancellation. The Cancel API is used along with the Cancel Event to support line item level cancellations.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col>
                <col>
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2818">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2821">PATCH</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2818 ">URL</td>

                  <td data-label="PATCH" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2821 "><code>/commerce/fulfillment/fulfillment-orders/fulfillmentOrderId/actions/cancel-item</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2818 ">Request</td>

                  <td data-label="PATCH" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2821 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{ "fulfillmentOrderLineItemsToCancel" :
[ {
 "fulfillmentOrderLineItemId" : "0a4xx00000000W0001",
 "quantity":1 },
{ "fulfillmentOrderLineItemId" : "0a4xx00000000W0002",
"quantity":2 }
] }</code></pre>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2818 ">Response</td>

                  <td data-label="PATCH" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2821 ">HTTP Code 200</td>

                </tr>
              </tbody>
            </table>

#### Scheduled Jobs:

1\. If the order is not packed in intervals of X minutes the fulfillment order is canceled. This job is scheduled to run on Point of Sale.

#### BOFIS Differences:

Store associates generate the FedEx receipt, capture the tracking number, and pass it to OMS. Send this tracking number to OMS when the status is updated to "delivered".

### BORIS

Search orders, process returns and cancellations, and manage refunds within your system. Connecting BORIS streamlines order management, providing a centralized platform for handling the entire order lifecycle. This integration enhances efficiency and accuracy in fulfilling customer requests related to their orders. With BORIS, you can optimize order-related processes.

#### Order Search

- Search the order using SOQL REST API.
- Example query: SELECT id FROM Order WHERE Name LIKE 'Amanda Freeman%’.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col>
                <col>
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2926">HTTP Method</th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e2929">GET</th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2926 ">URL</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2929 "><code>/services/data/v49.0/query/</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2926 ">Request</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2929 ">
                    <p><code>?q=SELECT%20Name%20FROM%20Order%20WHERE%20Name%20LIKE%20%-</code></p>
                    <p style="margin-bottom:0;"><code>27Testingca%25%27%0A</code></p>
                  </td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2926 ">Response</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e2929 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{ "totalSize" : 1, "done" : true, "records" : [ { "attributes" : { "type" : "Order", "url" : "/services/data/v50.0/sobjects/Order/801050000001XEXAA2" }, "Name" : "testingca big zenkraft" } ]}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

**Tip:** For details on the support capability for BORIS returns to credit card payments, please refer to this [article](https://help.salesforce.com/s/articleView?id=commerce.rt_pos_boris_overview.htm&release=264.0.0&type=5 "Point of Sale offers flexible methods for processing BORIS returns, including referenced and unreferenced refunds, and tender remapping. These options are tailored to merchants using SPIs, Salesforce Order Management, or NetSuite connectors, ensuring alignment with specific business needs.").

#### Order Return / Cancellations

![A diagram shows SF OMS integration for returns and cancellations.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_boris_seq.png)

#### Refunds

For orders originating from PS OMS, Point of Sale performs refunds. For orders originating from SF OMS, SF OMS performs refunds.

![A flowchart displays an order search from PS Cloud to SF OMS and an import order from SF OMS to PS DB.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-commerce-retail-264-0-0-production-enus/17d647fb-8988-49fb-9add-c4f4cc79c9e4/retail/images/rt_adv_config_sf_int_oms_boris_flow.png)

### Customer 360 - Order History

Learn about order search in Customer 360.

#### Order Search

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
              <colgroup>
                <col>
                <col>
              </colgroup>
              <thead class="slds-text-title_caps ">
                <tr class="">
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e3055"><strong>HTTP Method</strong></th>
                  <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e3059"><strong>GET</strong></th>
                </tr>
              </thead>
              <tbody>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3055 ">URL</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3059 "><code>/services/data/v49.0/query/</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3055 ">Request</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3059 "><code>?q=SELECT%20Name%20FROM%20Order%20WHERE%20Name%20LIKE%20%27T-estingca%25%27%0A</code></td>

                </tr>
                <tr class="">
                  <td data-label="HTTP Method" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3055 ">Response</td>

                  <td data-label="GET" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3059 ">
                    <pre class="line-numbers slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium slds-scrollable_x"><code>{
"totalSize" : 1
"done" : true,
"records" : [ {
 "attributes" : {
"type" : "Order",
"url" : "/services/data/v50.0/sobjects/Order/801050000001XEXAA2"
},
 "Name" : "testingca big zenkraft"
} ]
}</code></pre>
                  </td>

                </tr>
              </tbody>
            </table>

- Search the order using SOQL REST API.
- Example query: SELECT id FROM Order WHERE Name LIKE 'Amanda Freeman%’.
- Supported search fields: OrderNumber, FirstName, LastName, BillingEmailAddress, BillToContactId.
- Response fields: emailId, OrderID, Total, orderDate, count, OrderstatusText.

### PS OMS Configuration - Declarative Model

These elements are configurable using PS OMS Configuration for Salesforce:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col>
              <col>
              <col>
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e3150">Field</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e3153">Description</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d149489e3156">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">Service</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">Service Provider. For salesforce, it should be “LIGHTNING”</td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">LIGHTNING</td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">UrlBase</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">
                  <p>Salesforce org base URL. For example, https://ps--uat.my.salesforce.com/</p>
                  <p style="margin-bottom:0;">This should end with “my.salesforce.com”</p>
                </td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">https://ps--uat.my.salesforce.com/</td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">Username</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">Username to connect to Salesforce instance</td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">psintegration@predictspring.com</td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">Password</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">Password to connect to Salesforce instance</td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">hgj6576AhgA^=@8</td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">ApiVersion</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">
                  <p>Provides ability to configure the SF OMS API version.</p>
                  <p>For example, v49.0</p>
                  <p>This value is used in URL construction. This has to match to the exact API version
                    as defined by SF API. For example: </p>
                  <p style="margin-bottom:0;">/services/data/<strong>v49.0</strong>/query/</p>
                </td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">v49.0</td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">QueryApiVersion</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">Provides ability to configure the SF OMS Query API version.Ideally ApiVersion and
                  QueryApiVersion should be the same. In rare cases, if needed, this version could be
                  different from ApiVersion.</td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">v49.0</td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">OMSCustomField</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">
                  <p>Defines custom field mapping from Salesforce objects to Point of Sale object.</p>
                  <p>The primary use case is to identify the store that should be fulfilling a BOPIS
                    order.</p>
                  <p>A field mapping for ORDER_STORE_ID must be present to support BOPIS flow.</p>
                  <p>For Salesforce OMS Integration, supported posField is ORDER_STORE_ID only - This is
                    where the BOPIS order will be fulfilled from.Only SF object it applies to is
                    LOCATION - This is the SF object that holds the store ID information.</p>
                  <p style="margin-bottom:0;">omsFieldName: This varies by merchant. In this example, warehouseID__c custom field
                    holds the store ID from which the item will be fulfilled. This store ID value should
                    match storeID in Stores Feed.</p>
                </td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">
                  <p>[</p>
                  <p> {</p>
                  <p> "omsFieldName": "warehouseID__c",</p>
                  <p> "posField": "ORDER_STORE_ID",</p>
                  <p> "applyTo": [</p>
                  <p> "LOCATION"</p>
                  <p> ]</p>
                  <p> }</p>
                  <p style="margin-bottom:0;">]</p>
                </td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">FilterQuery</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">
                  <p>Custom filter applied to identify the fulfillment orders to be imported.</p>
                  <p style="margin-bottom:0;">For example, to import fulfillment orders that have delivery method name of ‘Store
                    Pickup’, filter query is defined as below DeliveryMethod.Name = 'Store Pickup CAD' </p>
                </td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">DeliveryMethod.Name = 'Store Pickup CAD'</td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">OMSStatusCanceledValue</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">Status value used when an order is cancelled. By default, Point of Sale sets this
                  to Cancelled. Merchants may use a custom process flow, which expects a different value
                  before marking the order as cancelled. In those cases, the expected value could be
                  configured here - for example ‘Processing Cancel’</td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">Processing Cancel </td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">OMSCashPaymentGatewayName</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">If merchants need a specific payment gateway to use for cash payment so that
                  there could be a custom workflow which skips payment authorization steps, this can be
                  used. For example, set this to CashPOS. If this field isn't set, then
                  DigitalWallet.paymentGatewayId isn't set in case of cash payment.</td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">CashPOS</td>

              </tr>
              <tr class="">
                <td data-label="Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3150 ">OMSStatusesToProcess</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3153 ">Array of OMS Status Values that should be processed during Streaming event
                  processing from Salesforce. This allows us to ignore other status fields that are not
                  of interest. If we want to process only the fulfillment orders in “Invoice Paid”
                  status, configure this as ["Invoice Paid"]</td>

                <td data-label="Example" class="slds-cell-wrap" style="vertical-align:top;" headers="d149489e3156 ">["Invoice Paid"]</td>

              </tr>
            </tbody>
          </table>