Retail Cloud API, SPI, and Webhook Overview

Retail Cloud supports common POS workflows with APIs, SPIs, and Webhooks. Retail Cloud provides a set of APIs for merchants to provide, update, or read data in the Retail Cloud system. Retail Cloud's backend systems hook into these APIs to complete the POS integration. Retail Cloud's SPIs provide extensibility and the opportunity to leverage outside systems for POS workflows.

See Retail Cloud API Specifications for all Retail Cloud APIs, SPIs, and webhooks.

  • Environment: Used to determine URLs for OAuth2 and Retail Cloud API. Possible values: Production, Staging
  • Retail Cloud secret: Used as header PredictSpring-Secret while calling Retail Cloud API
  • x-api-key: Used as header x-api-key while calling Retail Cloud API
  • OAuth2 client ID: Used for OAuth2 token generation
  • OAuth2 client secret: Used for OAuth2 token generation

See Retail Cloud SPI Error Handling.

These tables provide a comprehensive list of Retail Cloud API endpoints along with their usage descriptions.

Create, search, update, and delete CMS users from Retail Cloud.

APIDescription
GET/merchant/{version}/usersRetrieves all CMS users.
PUT/merchant/{version}/usersUpdates a CMS user.
POST/merchant/{version}/usersCreates CMS users.
DELETE/merchant/{version}/usersDeletes a CMS user.
GET/merchant/{version}/users/{userId}Retrieves CMS user by userID.

Manage inventory in Retail Cloud, including interactions related to cycle counts and receivings.

APIDescription
POST/merchant/{version}/ims/inventory/asnCreates ASN in the Inventory Management System (IMS).
PUT/merchant /{version} /ims /inventory/cyclecount/cancelCancels a specified cycle. count
POST/merchant /{version} /ims /inventory/cyclecount/fullCreates a full cycle count (complete inventory of products in a store can only be counted through a full cycle count).
POST/merchant/{version}/ims/inventory/cyclecount/manualCreates a manual cycle count (allows counting of a specific set of products).
POST/merchant/{version}/ims/inventory/cyclecount/partialCreates a partial cycle count for a particular group of products included in a category, brand, or other product attribute specified in the request.

Send notifications directly to specific app users.

APIDescription
POST/merchant/{version}/notificationsSchedules immediate notifications of certain events (for example, an order ships or a cart is abandoned) to send to one or more specified target devices. App used of target device(s) can be referenced in the API via installation ID or email address, which maps to an installation ID in Retail Cloud if captured when the user logged into the app.

Create, update, and delete products in Retail Cloud.

APIDescription
PUT/merchant/{version}/productsUpdates products.
POST/merchant/{version}/productsCreates products.
DELETE/merchant/{version}/productsDeletes products.

Create, update, retrieve, and delete promotions in Retail Cloud.

APIDescription
GET/merchant/{version}/promotionsRetrieves all promotions.
PUT/merchant/{version}/promotionsUpdates promotions.
POST/merchant/{version}/promotionsCreates promotions.
GET/merchant/{version}/promotions/download/reportDownloads a report of all CMS-created promotions (inactive and active).
POST/merchant/{version}/promotions/uploadUploads promotions via JSON file.
GET/merchant/{version}/promotions/{promotionId}Retrieves a promotion by its promotion ID.
DELETE/merchant/{version}/promotions/{promotionId}Deletes a promotion by its promotion ID.
GET/merchant /{version} /promotions /{promotionId} /supcRetrieves list of Single Use Promotion Codes (SUPC) in a promotion from Retail Cloud.
PUT /merchant /{version} /promotions /{promotionId} /supcUpdates the redemption status of SUPCs in a promotion that were redeemed by an external system.
POST/merchant/{version}/promotions/{promotionId}/supcCreates/sends new valid SUPCs in a promotion to Retail Cloud.

Create, search, update, and deactivate store associates from Retail Cloud.

APIDescription
GET/merchant/{version}/associatesRetrieves active/inactive store associates based on query parameters storeId and associateId.
PUT/merchant/{version}/associatesUpdates store associate in Retail Cloud.
POST/merchant/{version}/associatesCreates store associate in Retail Cloud.
DELETE/merchant/{version}/associatesDeactivates the store associate specified by the associateId query parameter. This method sets the active field on the associate to false.
GET/merchant/{version}/associates/{associateId}Retrieves store associate details by associateId.

Manage store inventory.

APIDescription
PUT/merchant/{version}/storeproductsUpdates store product details by updating item's list price, sale price, quantity and promo banner text.
GET/merchant/{version}/storeproducts/inventoryReturns store inventory details for queried store and product ID(s). This endpoint accepts multiple product or store IDs in a single call.
- productIds: (required): Comma-separated list of up to 20 product IDs.
- storeIds: Comma-separated list of up to 1,000 store IDs. If empty or null, defaults to all stores.
PUT/merchant/{version}/storeproducts/inventoryUpdates store or E-comm inventory of products.
POST/merchant/{version}/storeproducts/inventoryCreates store or E-comm inventory of products.
Note: This endpoint performs an incremental inventory upload to Retail Cloud. For a full inventory, use a feed instead. For more information, see Store Inventory & Pricing Feed in Salesforce Help.
GET/merchant/{version}/storeproducts/inventory/{storeId}Provides the URL for a CSV file containing store inventory.

Create, search, retrieve, and repost orders from Retail Cloud.

APIDescription
POST/merchant/{version}/sa/ordersCreates order data based on customer order data in payload.
POST/merchant/{version}/sa/orders/repostReposts orders to an external system as specified by a list of order IDs.
POST/merchant/{version}/sa/orders/searchSearches and retrieves orders based on input parameters.
GET/merchant/{version}/sa/orders/{id}Retrieves order data based on order ID.

SPIs are outbound API calls made from Retail Cloud that expect a response from the customer system and alter the behavior of the transaction journey for an associate. On the merchant side, they are hosting a web server that listens to this API request and handles the same. In response, Retail Cloud expects a full JSON response that is used to update the cart or customer data (for example, Clienteling API, promotion calculation, etc.).

To implement the Retail Cloud SPI, provide both a staging (sandbox) environment for testing and a production environment. Requests to the SPI APIs take these forms.

https://<staging_path>/<api_version>/<api_path>?api_key={API_KEY}&<additional_request_parameters>

Example:

https://**staging.mycompany.com/spi**/1.0/customer/1234?api_key=ibafw4ehb2vhibdsih3vbadv

https://<production_path>/<api_version>/<api_path>?api_key={API_KEY}&<additional_request_parameters>

Example:

https://**www.mycompany.com/spi**/1.0/customer/1234?api_key=zmcnv9lzjkxn2vcl8nzcx

api_version is appended to the path for each request, and is based on the version of the Retail Cloud SPI APIs that are implemented. api_version must be consistent across all API requests made to a particular SPI implementation. For example, you can make all requests with api_version 1.0 or 1.1, but not a mix of 1.0 and 1.1.

To implement the Retail Cloud SPI, provide an authentication mechanism for accessing the SPI APIs through the use of an API key. Retail Cloud provides suitable API keys (one for staging and one for production) to validate, and all SPI API requests contain an api_key request parameter.

If an invalid API key is supplied, the API must respond with a 401 Unauthorized response containing an empty response body.

Sample Request with Authentication
Sample Authentication Failure Response
  1. In CMS, go to Store Management > Integrations > Custom Connectors.
  2. Click Create.
  3. For Connector Type, select SPI.
  4. For Endpoint Name, select an endpoint. For example, CREATE_CUSTOMER.
  5. Set the API Endpoint to an external endpoint for the SPI. For example, https://sample/external/endpoint/to/create/customer.
  6. Select or enter the integration type. For example, HTTP_POST.
  7. Set the header for the API in JSON Headers. Headers can be Content-Type or Authorization attributes (clientId or password). For example:

Retail Cloud's Custom Connection supports NetSuite's OAuth authentication, ensuring secure access and synchronization of customer data while reducing the risk of authentication errors. This setup is configured directly in the CMS.

Before proceeding, make sure that an ERP configuration is properly set up in the CMS. Without this configuration, the SPI fails to process and results in an error within the CMS.

  1. In CMS, go to Store Management > Integrations > Custom Connectors.
  2. Edit an existing configuration or create a new one.
  3. Turn on NetSuite OAuth for the OAuth Config. This automatically retrieves the necessary OAuth credentials from the ERP configuration.
  4. Save your changes.

blobid0.png

You can define custom attributes to be passed in a product's SPI response. For example, when integrating with the Delivery Group SPI define custom attributes in the spiCustomProductAttributes setting, and these attributes are included in the SPI response.

  1. In CMS, go to Store Management > Store Settings > Product and
  2. Go to Merchant-specific product attributes to be provided in SPI request (spiCustomProductAttributes) and enter a comma-separated list of case-insensitive attributes from the product collection (For exampel, variantGroupId, salePrice, manufacturer, brand).

mceclip0b.png

These tables provide a comprehensive list of Retail Cloud SPIs along with their usage descriptions.

Create, search, update, and retrieve details of a specific customer from an external system rather than from Retail Cloud’s system of record.

SPIDetails
POST/merchant/spi/sample/endpoint/sa/customersCreates a customer based on customer data entered in the POS

Endpoint Name: CREATE_CUSTOMER
Integration Type: HTTP_POST
GET/merchant/spi/sample/endpoint/sa/customersRetrieves customer's interaction history

Endpoint Name: CUSTOMER_INTERACTION_HISTORY
Integration Type: HTTP_GET

Important: This is a legacy custom connector, please do not use.
PUT/merchant/spi/sample/endpoint/sa/customersUpdates an existing customer. The existing customer ID is provided under the object labeled 'profile.customerId'

Endpoint Name: UPDATE_CUSTOMER
Integration Type: HTTP_PUT
GET/merchant/spi/sample/endpoint/sa/customers/{customerId}Retrieves customer data based on the customer ID

Endpoint Name: GET_CUSTOMER
Integration Type: HTTP_GET
GET/merchant/spi/sample/endpoint/sa/customersRetrieves customer's order history

Endpoint Name: GET_ORDER_LIST
Integration Type: HTTP_GET

Important: This is a legacy custom connector, please do not use.
GET/merchant/spi/sample/endpoint/sa/customersSearches and retrieves customers based on the input parameters. For details and examples on utilizing this SPI, please refer to SPI Customer Search Layout

Endpoint Name: SEARCH_CUSTOMERS
Integration Type: HTTP_GET

Customer Address

Used to create, search, update, and delete a customer's address from an external system rather than from Retail Cloud’s system of record

SPIDetails
GET/merchant/spi/sample/endpoint/sa /customer/addressRetrieves a list of addresses for a customer by customer ID

Endpoint Name: GET_CUSTOMER_ADDRESSES
Integration Type: HTTP_GET
PUT/merchant/spi/sample/endpoint/sa /customer/addressUpdate customer address by customer id and address id.

Endpoint Name: UPDATE_CUSTOMER_ADDRESS
Integration Type: HTTP_PUT
POST/merchant/spi/sample/endpoint/sa /customer/addressAdd new address for a customer

Endpoint Name: CREATE_CUSTOMER_ADDRESS
Integration Type: HTTP_POST
DELETE/merchant/spi/sample/endpoint/sa /customer/addressDelete customer address by customer ID and address ID

Endpoint Name: DELETE_CUSTOMER_ADDRESS
Integration Type: HTTP_DELETE

Inventory

Used for retrieving inventory count of products online or in-store from an external system rather than from Retail Cloud’s system of record, and for reverting reserved inventory

SPIDetails
POST/merchant/spi/sample/endpoint/sa /inventoryService/revertAllows the merchant's system to revert reserved inventory for the specified products in the provided cart. Merchants should implement this endpoint to ensure reserved inventory is properly reverted in scenarios such as a payment failure during checkout.

Endpoint Name: INVENTORY_SERVICE
Integration Type: HTTP_POST
POST/merchant/spi/sample/endpoint/sa/inventory /to/check/inventory/from/external/systemChecks the external system for the availability of given products by checking their inventory count (online only, not applicable for in-store). Merchant will receive the product ID or GTIN in the response

Endpoint Name: ONLINE_ITEM_INVENTORY_CHECK
Integration Type: HTTP_POST
POST/merchant/spi/sample/endpoint /product/getInventoryOverviewChecks the external system for the availability of a given product. Response will be displayed on the existing inventory overview widget, showing availability for all stores or just a text indicating availability when a zip code is included in the request

Endpoint Name: GET_PRODUCT_INVENTORY_OVERVIEW
Integration Type: HTTP_POST

Loyalty

Used for retrieving loyalty points redeemed in a transaction and the available rewards for a customer.

SPIDetails
POST/merchant/spi/sample/endpoint/sa /getLoyaltyPointsThis SPI retrieves the number of loyalty points redeemed in a transaction from an external system at the time of tendering to make available for printing on receipts.

Important: This only applies to orders placed by customers with loyalty profiles.

Endpoint Name: LOYALTY_POINTS_EARNED
Integration Type: HTTP_POST
POST/merchant/spi/sample/endpoint /reward/lookupThis SPI retrieves the available rewards for a customer that can be applied as a tender. Reward lookup is done based on the Customer Account (CustomerId, Card Acquisition Token, etc.)

Endpoint Name: REWARD_LOOKUP
Integration Type: HTTP_POST

Orders

Used to retrieve, search, and export orders from an external system rather than from Retail Cloud’s system of record

Important: Starting in June 2024, Retail Cloud has updated the order SPIs. Specifically, the JSON schema has been modified to use the transaction data model for exporting and importing store transactions, including sales, returns, and exchanges. The documentation is available in Retail Cloud API Specifications.

SPIDetails
GET /merchant/spi/sample/endpoint/sa/orders/to/get/order/from/external/system/{orderId}Fetches a specified order from an external system during BORIS flow with SPI as the order master for all orders. The merchant's system is expected to handle the return processing.

Important: If enabling delivery grouping with this SPI, you'll need to send "DeliveryGroup" list in the SPI response. Learn More

Endpoint Name: GET_ORDER_DETAIL
Integration Type: HTTP_GET
GET /merchant/spi/sample/endpoint/sa/orders/to/get/order/from/external/system/{orderId}Fetches a specified order from an external system during BORIS flow with SPI as the order master for all orders. The merchant's system is expected to handle the return processing.

Important: If enabling delivery grouping with this SPI, you'll need to send "DeliveryGroup" list in the SPI response.

Endpoint Name: GET_ORDER_DETAIL
Integration Type: HTTP_GET
GET /merchant/spi/sample/endpoint/sa/orders/to/get/boris/order/from/external/system/{orderId}Fetches a specified order from an external system during BORIS flow with Retail Cloud as the order master for in-store placed orders. The merchant's system is expected to handle the return processing.

Endpoint Name: BORIS_GET_ORDER_DETAIL
Integration Type: HTTP_GET
POST /merchant/spi/sample/endpoint/sa/orders/to/search/orders/from/external/systemSearches orders from the merchant's system based on the provided filter criteria and then display it on the Order History screen of Retail Cloud POS

Endpoint Name: SEARCH_ORDERS
Integration Type: HTTP_POST
POST /merchant/spi/sample/endpoint/sa/orders/to/export/return/order/to/external/systemPosts the sale transaction to the merchant's external system (e.g., BORIS). This will also pull online orders if this endpoint is connected to a system that has online orders. The aim of this SPI is to provide an interface where merchants can choose what orders to send back.

Endpoint Name: RETURN
Integration Type: HTTP_POST

Other

Used to verify employee status, retrieve delivery/pickup dates, validate cart, etc.

SPIDetails
**POST/**merchant/spi/sample/endpoint/sa/cartValidationUsed to perform custom cart validations and can also be utilized to reserve inventory

Endpoint Name: CART_VALIDATION
Integration Type: HTTP_POST
**POST/**merchant/spi/sample/endpoint/sa/datetime/ slots/from/external/systemRetrieves delivery/pickup dates and time slots for applicable items in an order

Endpoint Name: DATE_PICKER
Integration Type: HTTP_POST
POST/merchant/spi/sample/endpoint/sa/employee /verification/to/verify/employee/from/external/systemVerifies employee information when applying employee discounts on POS app

Endpoint Name: VERIFY_EMPLOYEE
Integration Type: HTTP_POST

Shipping Methods

Used for receiving applicable shipping methods from an external system rather than from Retail Cloud’s system of record

SPIDetails
POST/merchant/spi/sample/endpoint/sa/shipping/methodsMerchant-provided SPI that takes in cart items that are marked for shipping/delivery, customerId, address, etc. as input and provides applicable shipping options

Endpoint Name: Dependent on the implementation and should be provided by the merchant
Integration Type: HTTP_POST

Taxes

Used to calculate taxes, retrieve tax exemptions, and download tax rates

SPIDetails
POST/merchant/spi/sample/endpoint/taxEngine/calculateTaxCalculates the tax based on the rules defined in the merchant's system

Endpoint Name: TAX_SERVICE
Integration Type: HTTP_POST
GET/merchant/spi/sample/endpoint/taxEngine/downloadTaxRatesRetrieves a list of tax rates to be used for offline transactions

Endpoint Name: TAX_SERVICE
Integration Type: HTTP_GET
POST/merchant/spi/sample/endpoint/taxEngine/finalizeTaxSubmissionUsed to finalize the taxes applied to sale transactions

Endpoint Name: TAX_SERVICE
Integration Type: HTTP_POST
GET/merchant/spi/sample/endpoint/taxEngine/getTaxExemptionsRetrieves a list of tax exemptions supported on the merchant's side

Endpoint Name: TAX_SERVICE
Integration Type: HTTP_GET
  • For product details, there are two fields orderProductList and productList. orderProductList contains a list of products sold while productList is a subset (if there have been any returns/exchanges) and it contains a list of products sold with returned products/quantities removed/adjusted. For example, productList gives you the remaining products in the order which are not returned. If mapping to an ERP system, orderProductList and returnProductList should be used instead of productList to simplify the ingestion logic.
  • For fulfillment details, there are two fields omniFulfillmentType and fulfillmentType. If mapping to an ERP system for cash/carry/charge, fulfillmentType and fulfillmentSubType should be used instead of omniFulfillmentType

Webhooks are outbound API calls made from Retail Cloud to an external system when specified events are triggered on POS.

  1. In CMS, go to Store Management > Integrations > Custom Connectors.
  2. Click Create in the upper right.
  3. Under Connector Type, select "Webhook".
  4. Under Endpoint Name, select an endpoint (e.g., "CREATE_CUSTOMER").
  5. Under API Endpoint, provide an external endpoint for the webhook (e.g., "https://sample/external/endpoint/to/create/customer").
  6. Under Integration Type, select or enter the type of integration (e.g., "HTTP_POST").
  7. Under JSON Headers, provide the header for the API. Headers can be Content-Type or Authorization attributes i.e., clientId/password. See example below:

Retail Cloud's Custom Connection supports NetSuite's OAuth authentication, ensuring secure access and synchronization of customer data while reducing the risk of authentication errors. This setup can be configured directly in the CMS.

Important: Before proceeding, ensure that an ERP configuration is properly set up in the CMS. Without this configuration, the SPI will fail to process and result in an error within the CMS.

  1. In CMS, go to Store Management > Integrations > Custom Connectors.
  2. Edit an existing configuration or create a new one.
  3. Under OAuth Config, enable NetSuite OAuth. This will automatically retrieve the necessary OAuth credentials from the ERP configuration.
  4. Save your changes.

blobid0a.png

Retail Cloud offers the ability to manually repost failed webhook events.

  1. In CMS, go to Store Management > Reporting and Analytics > Repost Failed Webhook Events.
  2. Search for the failed webhook event by configuring the search query parameters.
  3. Click View Details to view the details of the payload inside the selected webhook event.
  4. Click Repost to manually trigger a webhook event repost.

The table below provides a comprehensive list of all available Retail Cloud webhooks along with their usage descriptions.

E-Receipt

Used for sending order details for email purposes

WebhookDetails
Receive eReceiptInstead of using Retail Cloud's email service, merchants can use their own email service by providing an endpoint to receive the order details.

Endpoint Name: ERECEIPT_CUSTOMER
Integration Type: HTTP_POST

Inventory Events

Used for sending inventory data to an external system

WebhookDetails
Send inventory Transfer dataEndpoint Name: Select one of the following values:
• INVENTORY_EXPORT_ASN
• INVENTORY_EXPORT_STS
• INVENTORY_EXPORT_RTV
• INVENTORY_EXPORT_CTS
• INVENTORY_EXPORT_BLD

Events: Select the subscribed event's data to be sent out, available events:
• ASN_RECEIVED_EVENT
• ASN_PARTIALLY_RECEIVED_EVENT
• ASN_RECEIVE_COMPLETED_EVENT

Integration Type: HTTP_POST

For a full list of events, see Retail Cloud API Specifications
Send inventory adjustment dataEndpoint Name: INVENTORY_EXPORT_INA

Events:
• INVENTORY_ADJUSTMENT
• INVENTORY_BUCKET_ADJUSTMENT

Integration Type: HTTP_POST
Send inventory bucket adjustment dataEndpoint Name: INVENTORY_EXPORT_INBA

Events: INVENTORY_BUCKET_ADJUSTMENT

Integration Type: HTTP_POST
Send cycle count dataEndpoint Name: INVENTORY_EXPORT_CYC

Events: Select the subscribed event's data to be sent out, available events:
• CYC_COUNT_CREATED_EVENT
• CYC_COUNT_STARTED_EVENT
• CYC_COUNT_COMPLETED_EVENT
• CYC_COUNT_CANCELED_EVENT

Integration Type: HTTP_POST
Send purchase order dataEndpoint Name: INVENTORY_EXPORT_PO

Events: Select the subscribed event's data to be sent out, available events:
• PO_TRANSFER_STARTED_EVENT
• PO_TRANSFER_COMPLETED_EVENT
• PO_TRANSFER_ERRORED_EVENT

Integration Type: HTTP_POST
Send sales dataIndicates that an item (or items) has been sold. When this event is triggered, the expectation is that the inventory for the specified item(s) should decrease.

Endpoint Name: SALE_INVENTORY
Integration Type: HTTP_POST
Send return dataIndicates that an item (or items) has been returned or exchanged. When this event is triggered, the inventory for the specific item(s) should increase or adjust in some manner if it's an exchange.

Endpoint Name: RETURN_INVENTORY
Integration Type: HTTP_POST

Orders

Used for sending order posting-related data to an external system

WebhookDetails
Export SaleProvides export details of sale transactions to an external system.

Endpoint Name: ORDER
Integration Type: HTTP_POST
Order UpdateProvides export details of updated sale transactions to an external system.

Endpoint Name: ORDER_UPDATE
Integration Type: HTTP_POST
BOPIS ExportProvides export details of Buy Online Pickup In Store (BOPIS) transactions to an external system.

Endpoint Name: BOPIS_EXPORT
Integration Type: HTTP_POST
BOFIS ExportProvides export details of Buy Online Fulfill In Store (BOFIS) transactions to an external system.

Endpoint Name: BOFIS_EXPORT
Integration Type: HTTP_POST
ROPIS ExportProvides export details of Reserve Online Pickup in Store (ROPIS) transactions to an external system.

Endpoint Name: ROPIS_EXPORT
Integration Type: HTTP_POST
Return ExportPosts the sale transaction to the merchant's external system (e.g., BORIS). This will also pull online orders if this endpoint is connected to a system that has online orders. The aim of this SPI is to provide an interface where merchants can choose what orders to send back.

Learn More: Return Export Documentation

Endpoint Name: RETURN
Integration Type: HTTP_POST
Return ExportPosts the sale transaction to the merchant's external system (e.g., BORIS). This will also pull online orders if this endpoint is connected to a system that has online orders. The aim of this SPI is to provide an interface where merchants can choose what orders to send back.

Learn More: Return Export Documentation

Endpoint Name: RETURN
Integration Type: HTTP_POST

Others

Used for sending non-categorized data (e.g., void carts) to an external system

WebhookDetails
Void CartProvides real-time details when a cart is voided, which can be used to store and refer to in Loss Prevention audits.

Endpoint Name: VOID_CART
Integration Type: HTTP_POST

Note: When the app is in offline mode, voided carts will be queued and pushed to Retail Cloud Services once the app regains online connectivity.
Suspend CartProvides real-time details when a cart is suspended, which can be used to store and refer to in Loss Prevention audits.

Endpoint Name: SUSPEND_CART
Integration Type: HTTP_POST
Register CrashesProvides real-time details of register crashes, covering: relevant app, device, and store information such as version numbers, OS, device model, store and register IDs, installation ID, environment, and region.

Endpoint Name: POS_CRASH_DATA
Integration Type: HTTP_POST
Register VitalsProvides real-time details of register vitals, covering: network connectivity, associate sign-in/out, peripheral device status and connectivity, order syncs, and offline data feed syncs.

Endpoint Name: POS_VITALS
Integration Type: HTTP_POST
Monitor IntegrationsProvides real-time monitoring of integration health, covering: SPI and webhook errors (HTTP 4xx/5xx), latency threshold breaches, and overall performance issues.

Endpoint Name: EXPORT_MONITORING_EVENTS
Integration Type: HTTP_POST or HTTP_PUT

The API spec schema indicates that dates are represented with an integer data type. What is the expected date format we should use when passing dates to the API? Additionally, can you provide a sample date along with its transformed value as an example?

Dates are expected in epoch times, represented as integers (measured in milliseconds). Epoch time is the number of milliseconds that have elapsed since January 1, 1970, 00:00:00 UTC. See example:

  • Example Date: 2023-01-15 08:30:00
  • Epoch Time (in milliseconds): 1642246200000

See example with currentLoyatlyProfile. currentTier.expiryDate::

Can Multi-Region Feeds Be Managed Through the Product API?

Our platform supports Multi-Region Feeds, allowing the master region to run the product feed while enabling other countries to inherit the product metadata, with specific pricing and sizing data provided for each country. However, this capability does not extend directly through the Product API.

  • For Multi-Region Pricing Updates: Currently, we do not offer a dedicated pricing API. For multi-region operations, pricing updates must be conducted through the CMS feed mechanism, allowing for regional-level adjustments.
  • For Single-Region Pricing Updates: In a single-region setup, the Product API can be utilized to update pricing information. However, for multi-region scenarios, the Product API lacks a "region" field in its specifications (as observed in this guide).
  • Workaround for Pricing Updates: Given the absence of a pricing API, pricing information must be included within POST and PUT calls when managing product data. If operating with a single instance per region, the Product API can facilitate pricing updates effectively.\

Do you offer GraphQL for precise querying?

GraphQL is not available externally. It is used exclusively for the POS app and CMS, and is not accessible to customers via the API specification.

How can I search by credit card number using the search order SPI?

To search by credit card number using the search order SPI, you need to map the card number to the appropriate fields in the payload. The card number should be included under the payment card section. Hotwax will then read this information, search for orders, and return the results.

Does Retail Cloud support query parameters for all of our SPIs?

No, Retail Cloud does not support dynamically populating query parameters. However, we do support setting up endpoints with static query parameters.

When we make a call to an endpoint, we use the provided URL exactly as it is configured. This means that merchants can receive the configured locale (e.g., cb-en-us) and store type (e.g., stores) as part of the URL. We do not apply any special handling or logic to these static query parameters; we simply call the URL as it is.

If merchants are comfortable with the static nature of the query parameters, they can configure them accordingly. This allows them to add conditional processing on their side. Additionally, merchants can use static query parameters to receive authentication codes.

Note: Dynamically populating query parameters is not supported.

For all SPIs, when error fields are returned with a 200 HTTP response code, should non-nullable fields still be included in the response? For example, in the customer detail API response, the loyaltyProfile field is not nullable and the profile field, while nullable, is required. Please confirm the expected behavior.

Non-nullable fields or any fields not needed in the response should be left out of the response entirely. Instead of inserting a null value for any field not being passed, it is recommended to exclude the field from the response.

In scenarios where a resource is not found and we would normally return a 404 status, should we return a 200 with error fields populated instead? For instance, if an associate tries to look up a return item based on a registry ID, and the registry ID is invalid, should we return a 200 with an error message instead of a 404?

If returning a 200 status code in a scenario with an empty result string and an error message, we should display no results and the error message. If returning a 400 status code, a generic error message will be displayed in the app, and the specific error message will be captured in the logs.

What is the expected response payload for the order webhook when the status code indicates success? What HTTP status code should we return, and what values should be included in the response fields as indicated in the Swagger documentation?

The current schema does not indicate any required fields, but we will update this. As of now, only a status code response is expected.

If the Address SPI setup, will the POS always trigger the endpoint and disregard the data in the customer SPI addressList object?

The POS utilizes the POST address SPI (CREATE_CUSTOMER_ADDRESS) to add an address from the cart's "Select Shipping Address" screen. Once the address is added, the POS relies on the addressList provided by CREATE_CUSTOMER_ADDRESS for the checkout process.

What triggers an Order to flow into the Repost Failed Webhook Report?

An order will be categorized as a failure and appear in the Repost Failed Webhook report if specific criteria are met during the order export process:

  1. HTTP Response Status Code: The order export will fail if the HTTP response status code is in the 4xx or 5xx range, indicating a client or server error.
  2. HTTP Response Payload: Even with a successful HTTP status code in the 2xx range, the order export will still be considered a failure if the response payload includes either or both of the following attributes:
    • errorMessage
    • errorCode
    • Example: If the HTTP status code is 200, but the payload contains an error message like the following, the order will be marked as a failure:

Is the eReceipt webhook qued in offline mode so that it can be sent once the POS returns to online mode?
The eReceipt webhook is triggered when the app calls the eReceipt API. No emails are sent when an order is synced. However, if automatic receipt emails are configured in the store settings, eReceipts will be sent for all orders, even in offline mode. Currently, no customer has automatic receipt emails enabled.

What happens if automatic eReceipts are enabled in offline mode?
If automatic eReceipt emails are configured, the system will generate and send eReceipts during offline sync for every transaction. In this case, it is recommended to remove the email CTA from the order confirmation layout.

Which settings should be enabled to ensure eReceipts are sent automatically in both online and offline modes?
The following settings in CMS need to be enabled:

  • sendOrderConfirmationEmailAutomatically
  • sendRefundEmailAutomatically
  • HideReceiptEmailShare

Please note there is no option to send an email only when requested by the customer in offline mode once these settings are enabled.