---
schema_version: "1"
id: 02bd2cf38cc1746aa5c7b84b4156d7a3b41cbf6a6f92565867448e242205e342
title: Store Fulfillment Event Webhook
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/commerce-cloud/retail-cloud/reference/generated-api-specs/store-fulfillment-event-webhook.md
canonical_url: https://developer.salesforce.com/docs/commerce/retail-cloud/references/store-fulfillment-event-webhook
source_site: developer.salesforce.com
content_type: documentation
content_hash: 360914722cb60e54c11ac1e49a3d2b0e46e2792096992adf2814f214f24afba6
products:
  - Point of Sale for Developers
  - Salesforce APIs
---
Store Fulfillment Event Webhook

# Store Fulfillment Event Webhook

[Download specification](https://developer.salesforce.com/static/commercecloud/retail-cloud/store-fulfillment-event-webhook/store-fulfillment-event-webhook-oas-public.yaml)

The specification to implement a webhook in the merchant's system to export store fulfillment events from the POS to the merchant's downstream system.

The store fulfillment events are listed below and are related to BOPIS and BOFIS orders:

1.  BOPIS Order
    
    1.  PACK: Order is ready and items are packed by store associate.
    2.  DELIVERED: Items are picked up by the pickup person.
    3.  CANCELED: Items are canceled by store associate.
2.  BOFIS Order
    
    1.  PACK: Order is ready and items are packed by store associate.
    2.  SHIPPED: Items are shipped by store associate from the store.
    3.  CANCELED: Items are canceled by store associate.

**Version:** 2.3.4

## Tags

### Store Fulfillment Event Webhook

[Download specification](https://developer.salesforce.com/static/commercecloud/retail-cloud/store-fulfillment-event-webhook/store-fulfillment-event-webhook-oas-public.yaml)

The specification to implement a webhook in the merchant's system to export store fulfillment events from the POS to the merchant's downstream system.

The store fulfillment events are listed below and are related to BOPIS and BOFIS orders:

1.  BOPIS Order
    
    1.  PACK: Order is ready and items are packed by store associate.
    2.  DELIVERED: Items are picked up by the pickup person.
    3.  CANCELED: Items are canceled by store associate.
2.  BOFIS Order
    
    1.  PACK: Order is ready and items are packed by store associate.
    2.  SHIPPED: Items are shipped by store associate from the store.
    3.  CANCELED: Items are canceled by store associate.

## Operations

### POST Export BOFIS events.

`POST /merchant/webhook/sa/sample/endpoint/to/export/bofis/events/to/external/system`

Operation ID: `exportBofis`. Tags: Store Fulfillment Event Webhook.

Export BOFIS events from merchant's system. Merchants must implement the endpoint per this specification and then configure it in CMS under **CMS** > **Store Management** > **Integration** > **Custom API Connectors** > **Create**. Make sure to create the endpoint in CMS with the following details:

1.  Under **API Config**:
    *   **API Key:** `BOFIS_EXPORT`
    *   **API Endpoint:** Provide the external endpoint to get the order
2.  Under **JSON Config**:
    *   **Integration Type:** `HTTP_GET`
    *   **JSON Headers:** Provide the header for the API. Headers can be Content-Type, Authorization attributes like clientId/password, for example: {"Content-Type":"application/json","client\_id":"myClientId","client\_secret":"myClientSecret"}.

#### Request body

Media type: `application/json`. Schema: `FulfillmentEvent`.

#### Responses

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

### POST Export BOPIS events.

`POST /merchant/webhook/sa/sample/endpoint/to/export/bopis/events/to/external/system`

Operation ID: `exportBopis`. Tags: Store Fulfillment Event Webhook.

Export BOPIS events from merchant's system. Merchants must implement the endpoint per this specification and then configure it in CMS under **CMS** > **Store Management** > **Integration** > **Custom API Connectors** > **Create**. Make sure to create the endpoint in CMS with the following details:

1.  Under **API Config**:
    *   **API Key:** `BOPIS_EXPORT`
    *   **API Endpoint:** Provide the external endpoint to get the order
2.  Under **JSON Config**:
    *   **Integration Type:** `HTTP_GET`
    *   **JSON Headers:** Provide the header for the API. Headers can be Content-Type, Authorization attributes like clientId/password, for example: {"Content-Type":"application/json","client\_id":"myClientId","client\_secret":"myClientSecret"}.

#### Request body

Media type: `application/json`. Schema: `FulfillmentEvent`.

#### Responses

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

## Schemas

### FulfillmentEvent

*   `orderId` (_string_, required) Order Id.
*   `orderType` (_string_, required) Order type. It can be either: 1. Store Fulfillment: order is fulfilled by a store. 2. Store Pickup: order is available for pickup at a store.  
    Allowed values: `STORE_PICKUP`, `STORE_FULFILLMENT`, `LAYAWAY`, `MIXED_MODE`, `ONLINE`, `ONLINE_RESERVE`.
*   `productList` (_array of FulfillmentProduct_, required) Item list.
*   `status` (_string_, required) Store Fulfillment Status. 1. PACK: BOPIS, BOFIS, or ROPIS item is packed by store associate. 2. DELIVERED: BOPIS item is picked up by the customer or pickup person. 3. CANCELED: BOPIS or BOFIS item is canceled by store associate. 4. SHIPPED: BOFIS item is shipped by store associate. 5. READY: When importing a fulfillment order into POS, it must have a 'READY' status.  
    Allowed values: `PACK`, `DELIVERED`, `CANCELED`, `SHIPPED`, `READY`.
*   `storeId` (_string_, required) Store ID from where the item(s) are picked or fulfilled.
*   `deliveryGroupList` (_array of ShipmentDetail_, nullable) The shipping details of the items for store fulfillment order. Each delivery group has shipping address and corresponding shipping method. Each delivery item from productList is associated with its delivery group using productList\[\].deliveryGroupId. Note: It is available only if the CMS Property - 'Allow multiple shipments per cart/order' is enabled. This is a CMS setting and can be found in **CMS** > **Store Management** > **Store Setting** > **Store** fulfillment > Omni settings. If the property is disabled, refer to shipment.
*   `shipment` (_ShipmentDetail_)
*   `pickupDetail` (_PickupDetail_)
*   `note` (_string_) Note provided by associate during pack, pick, or shipment.

### SpiPSResponse

*   `errorMessage` (_string_, nullable) Error message shown to the user.  
    Example: `Invalid request. Please check the request and try again.`.
*   `errorCode` (_string_, nullable) Error code shown to the user.  
    Example: `INTERNAL_ERROR`.
*   `error` (_boolean_)

### FulfillmentProduct

Item list.

*   `productId` (_string_, required) Product Id.  
    Example: `N0345123`.
*   `orderItemId` (_string (The value should be numeric in string format)_, required) Item sequence/system generated item ID assigned to this line item. Must be unique within this order.  
    Example: `It can have values like 1, 2, 3, etc... which represents line item number within the order.`.
*   `itemStatus` (_string_, required) Store fulfillment status. Possible values are: 1. **PACK**: The BOPIS, BOFIS, or ROPIS item is packed by a store associate. 2. **DELIVERED**: The BOPIS item is picked up by the customer or a designated pickup person. 3. **CANCELED**: The BOPIS or BOFIS item is canceled by a store associate. 4. **SHIPPED**: The BOFIS item is shipped by a store associate. 5. **READY**: When importing a fulfillment order into POS, it must have a **READY** status.  
    Allowed values: `PACK`, `DELIVERED`, `CANCELED`, `SHIPPED`, `READY`. Example: `PACK`.
*   `name` (_string_, required) Item name.  
    Example: `White Shirt`.
*   `quantity` (_integer (int32)_, required) Item quantity. This represents the original quantity. If the store setting `treatEachItemInCartAsSeparateLineItem` is enabled in CMS, then the quantity should be 1 per line item. This setting can be found in: **CMS** > **Store Management** > **Store Settings** > **OMS** > **Advanced**.  
    Example: `1`.
*   `price` (_number_, required) Item price.  
    Example: `12.05`.
*   `total` (_number_, required) Item total after discount and taxes.  
    Example: `14`.
*   `adjustedQuantity` (_integer (int32)_, required, read-only) Packed quantity for a PACK event, picked-up quantity for a DELIVERED event, and shipped quantity for a SHIPPED event.

### ShipmentDetail

Shipping details applicable for store fulfillment order. If CMS flag 'Allow multiple shipments per cart/order' is enabled, the shipment will be populated. Refer to deliveryGroupList for more details on this CMS flag.

*   `shipmentId` (_string_, required) Shipment ID. Unique number.
*   `trackingNumber` (_string_, required) Shipment tracking number entered by store associate during fulfillment from the store.
*   `shippingMethodId` (_string_, required) Shipping method ID used during placing order. Mandatory.
*   `shippingName` (_string_) Shipping name. Optional.  
    Example: `Express shipping`.
*   `shippingDescription` (_string_) Shipping description. Optional.  
    Example: `Express shipping arrives in 2-3 business days`.
*   `shippingCarrier` (_string_, required) Shipping carrier code. Mandatory.  
    Example: `UPS`.
*   `shippingServiceLevel` (_string_) Shipping service level. Optional.  
    Example: `3 Business Days`.
*   `price` (_number_, required) Shipping Cost. Mandatory.
*   `deliveryDate` (_integer (int64)_) Delivery date in epoch.
*   `deliveryTimeSlot` (_string_, required) Expected delivery time slot.
*   `items` (_array of DeliveryItem_) List of items in this shipment. This can be a subset of the product list provided at the order level.
*   `shippingAddress` (_Address_, required)
*   `expectedShippingDate` (_integer (int64)_) Expected shipping date in epoch. Used for SLA calculation in BOFIS orders.

### PickupDetail

Pickup information for store pickup order.

*   `storeId` (_string_) Store Id.
*   `firstName` (_string_) First name of pickup person.
*   `lastName` (_string_) Last name of pickup person.
*   `email` (_string_, nullable) Email of pickup person.
*   `phone` (_string_, nullable) Phone of pickup person.
*   `pickupDate` (_integer (int64)_, nullable) Customer pickup date & time. Milliseconds since epoch.

### DeliveryItem

List of items in this shipment. This can be a subset of the product list provided at the order level.

*   `productId` (_string_, required) Product ID.
*   `quantity` (_integer (int32)_, required) Number of items.
*   `orderItemId` (_string_) Item sequence/system generated item ID assigned to this line item. Must be unique within this order.  
    Example: `It can have values like 1, 2, 3, etc... which represents line item number within the order.`.

### Address

Address **Billing Address:** It contains first and last name of billing person. It is applicable if order is associated with signed-in customer or if an order requires billing address. Note: If item level shipping method or item level shipping address is enabled, use the shippingAddress from deliveryGroups. For more details, see:.

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