# Release Notes

This document tracks notable updates to the Keeta Open Platform APIs and documentation. It is not intended to be a comprehensive list of all changes.

## [Added] Store Status Now Differentiates Delivery and Pickup Services

**June 23, 2026**

Store status management has been enhanced to support independent tracking of delivery and pickup service availability. Previously, the store status only reflected a single overall operational state. Now, each service line has its own status, enabling more granular visibility into a store's operations.

**Get Store Details** now returns two additional fields:

- `deliveryRestStatus`: indicates whether the store's delivery service is available, unavailable, or not enabled.
- `pickupRestStatus`: indicates whether the store's pickup (self-collection) service is available, unavailable, or not enabled.


The existing overall `status` field remains and is now derived from the combination of these sub-statuses: the store is considered Open when either service is available, and Closed only when both are unavailable.

**Store Status Update Notification** (Event ID: 1102) now includes four additional fields in the webhook payload:

- `fromDeliveryRestStatus` / `toDeliveryRestStatus`
- `fromPickupRestStatus` / `toPickupRestStatus`


The webhook fires whenever any sub-status changes, even if the overall store status does not.

**Suspend Store** and **Reactivate Store** continue to operate on the store as a whole, suspending or restoring both delivery and pickup simultaneously. During a platform-managed override (e.g., severe weather), the Reactivate endpoint cannot restore a service that the platform has suspended. See the Store Status Management guide for details on platform override behavior.

A new **Store Status Management** guide has been published to help developers understand how delivery and pickup statuses interact, how platform overrides work.

See [Get Store Details](https://api-docs.mykeeta.com/apis/standard/shop/endpoints/getstoredetails) · [Suspend Store](https://api-docs.mykeeta.com/apis/standard/shop/endpoints/suspendstore) · [Reactivate Store](https://api-docs.mykeeta.com/apis/standard/shop/endpoints/reactivatestore) · [Store Status Update Notification](https://api-docs.mykeeta.com/apis/standard/shop/webhooks/storestatusupdatenotification)

## [New] Cash on Delivery (COD) Support

**January 04, 2026**

Keeta now supports Cash on Delivery (COD) orders. The following updates have been made across the Order API and Webhooks:

**Get Order Details**

- Added `payType` field to indicate the payment method. When `payType` is `Cash`, the order is a COD order.
- Added `payTypeDesc` field as the description of the `payType` field.
- Updated the description of `status` enum value `10` (Order Submitted): removed "and paid for" to accommodate unpaid COD orders at the time of submission.


**Cancel Order**

- Added error code `2090001015`: COD orders do not support partial refunds by the merchant.
- Added error code `2090001016`: COD orders do not support merchant cancellation after the rider has picked up the order.


**Order Webhooks**

- Added `payType` and `payTypeDesc` fields to the Order Placed Notification webhook payload.


See [Get Order Details](https://api-docs.mykeeta.com/apis/standard/order/endpoints/getorderdetails) · [Cancel Order](https://api-docs.mykeeta.com/apis/standard/order/endpoints/cancelorder) · [Order Placed Notification](https://api-docs.mykeeta.com/apis/standard/order/webhooks/orderplacednotification)

## [New] Nested ChoiceGroups for Non-listed Modifiers

**September 29, 2025**

The OpenItemCode-Based Menu Synchronization API now supports multi-layer ChoiceGroups for modifiers (ChoiceGroupSku) that are not sold separately on the menu.

Previously, multi-layer ChoiceGroups could only be built by binding a ChoiceGroupSku to an existing SKU via the `relatedSkuOpenItemCode` field. This required the modifier to also be a listed item on the menu.

A new field `choiceGroupOpenItemCodeList` (Array of strings) has been added under `choiceGroupList[].choiceGroupSkuList[]`, allowing a second layer of ChoiceGroups to be attached directly to non-listed ChoiceGroupSku entities. The ChoiceGroupSku must not share the same name as any other SPU on the menu.

See OpenItemCode-Based Menu Sync API · [Menu API Integration Guide](https://api-docs.mykeeta.com/apis/standard/docs/menuintegrationguide)