Skip to content

Keeta Menu Management API (v.1.0.0)

This API provides comprehensive menu management capabilities for Keeta platform integration, including menu synchronization, product status management, and real-time notifications.

Download OpenAPI description
Overview
Keeta Developer Website

https://developers.mykeeta.com/

Languages
Servers

https://open.mykeeta.com/api/open/

Operations
Webhooks
Operations

Request

  1. Get all valid products in store.

Rate limit: 50 QPS by appId dimension.

Bodyapplication/jsonrequired
shopIdinteger(int64)required

store id in KeeTa

Example: 25381
curl -i -X POST \
  https://open.mykeeta.com/api/open/product/spu/list \
  -H 'Content-Type: application/json' \
  -d '{
    "shopId": 25381
  }'

Responses

Successful returns product list.

Bodyapplication/json
codeintegerrequired

A numeric status identifier indicating the result of the interface call, used to determine whether the operation executed successfully.

Enum ValueDescription
0

The request was executed successfully.

Non-zero value

The request execution failed. Specific error details can be viewed in the message field.

Example: 0
messagestringrequired

Text description corresponding to the status code, explaining the operation result or error cause to users.

Example: "Success"
dataArray of objects(SPU)

Spu data model

Response
application/json
{ "code": 0, "message": "Success", "data": [ {} ] }

Request

  1. Get a specific product info through ID, this is far more fast comparing to query products list.

Rate limit: 100 QPS by appId dimension.

Bodyapplication/jsonrequired
shopIdinteger(int64)required

store id in KeeTa

Example: 25381
spuIdinteger(int64)required

spuId in KeeTa

Example: 2
curl -i -X POST \
  https://open.mykeeta.com/api/open/product/spu/detail \
  -H 'Content-Type: application/json' \
  -d '{
    "shopId": 25381,
    "spuId": 2
  }'

Responses

Successful returns product detail.

Bodyapplication/json
codeintegerrequired

A numeric status identifier indicating the result of the interface call, used to determine whether the operation executed successfully.

Enum ValueDescription
0

The request was executed successfully.

Non-zero value

The request execution failed. Specific error details can be viewed in the message field.

Example: 0
messagestringrequired

Text description corresponding to the status code, explaining the operation result or error cause to users.

Example: "Success"
dataobject(SPU)
Response
application/json
{ "code": 0, "message": "Success", "data": { "id": 12345, "name": "Spicy Chicken Burger", "sourceLanguageType": "en", "nameTranslation": "辣雞腿漢堡", "targetLanguageType": "zh-HK", "nameTranslateType": 1, "status": 1, "description": "Spicy Chicken Burger description", "descSourceLanguageType": "en", "descriptionTranslation": "辣雞腿漢堡描述", "descTargetLanguageType": "zh-HK", "descriptionTranslateType": 1, "shopCategoryList": [], "pictureList": [], "propertyList": [], "skuList": [], "availableTime": {}, "isSpecialty": 0, "openItemCode": "SPU#10001", "shopCategoryOpenItemCodeList": [], "userGetModeList": [] } }

Request

  1. Product data that can be transmitted in one batch should not exceed 200. If there are more products, please create them in batches.
  2. The interface supports partial synchronization success and partial synchronization failure. However, if there is a parameter format error, all will fail.
  3. You can not create "ShopCategory" or "ChoiceGroup" through this interface, please make sure all the ShopCategory.id and ChoiceGroup.id are already exist in store.
  4. Regarding the product image related Field, please use the "Image upload API" to upload the image to the KeeTa system first, than get the image URL and pass into the Picture.url field.
  5. If it is a tobacco and alcohol product, please be sure to fill in the relevant attributes in the [Product Attributes] field to avoid regulatory issues.
  6. If a Spu contains only one Sku, then the Sku.spec field is allowed to remain empty, otherwise the Sku.spec in a specific Spu need to be filled.
  7. The Sku.price is required and supports up to two decimal places.
  8. Spu.avaliableTime is required.
  9. "Specialty" dish can not exceed 15 in a store.

Rate limit: 10 QPS by appId dimension.

Bodyapplication/jsonrequired
shopIdinteger(int64)required

store id in KeeTa

Example: 25381
spuListArray of objects(SPU)required

Spu data model

spuList[].​idinteger(int64)

Unique SPU ID generated by Keeta. Not required in OpenItemCode-based APIs. Required for updates in Keeta ID-based APIs. See "Menu Development Guide" for details.

Example: 12345
spuList[].​namestringrequired

Product name

Example: "Spicy Chicken Burger"
spuList[].​sourceLanguageTypestringrequired

Language code for name field (refer to Menu Integration Guide)

Example: "en"
spuList[].​nameTranslationstring

Localized name translation

Example: "辣雞腿漢堡"
spuList[].​targetLanguageTypestring

Language code for nameTranslation (required if translation exists), please refer to Menu API Integration Guide

Example: "zh-HK"
spuList[].​nameTranslateTypeinteger

Source of name translation. When the value equals 1, it indicates that the name translation was provided by the merchant.

Example: 1
spuList[].​statusintegerrequired

Product availability status:

Enum ValueDescription
0

indicates the SPU is unavailable

1

indicates the SPU is available

Example: 1
spuList[].​descriptionstring

Product description

Example: "Spicy Chicken Burger description"
spuList[].​descSourceLanguageTypestring

Language code for description (required if description exists), please refer to Menu API Integration Guide

Example: "en"
spuList[].​descriptionTranslationstring

Localized description translation

Example: "辣雞腿漢堡描述"
spuList[].​descTargetLanguageTypestring

Language code for descriptionTranslation (required if translation exists), please refer to Menu API Integration Guide

Example: "zh-HK"
spuList[].​descriptionTranslateTypeinteger

Source of description translation. When the value equals 1, it indicates that the description translation was provided by the merchant.

Example: 1
spuList[].​shopCategoryListArray of objects(ShopCategory)

Menu categories this SPU belongs to. The 'id' field is required when not using menuSync API. For all interfaces using this struct except menuSync, the id field in ShopCategory struct is required to associate SPUs with category.

spuList[].​pictureListArray of objects(Picture)

Product image URLs

spuList[].​propertyListArray of objects(CategoryProperty)

SPU specifications (e.g., "Size" options for pizza)

spuList[].​skuListArray of objects(SKU)required

A list includes all SKUs under this SPU

spuList[].​skuList[].​idinteger(int64)

Unique SKU ID generated by Keeta system. Not required in OpenItemCode-based APIs. Required for updates in Keeta ID-based APIs. For details, see "Menu Development Guide" for details.

Example: 12345
spuList[].​skuList[].​specstring

Specification name (optional for single-spec products)

Example: "Large"
spuList[].​skuList[].​sourceLanguageTypestring

Language code for name field (refer to Menu Integration Guide)

Example: "en"
spuList[].​skuList[].​specTranslationstring

Localized specification translation

Example: "大份"
spuList[].​skuList[].​targetLanguageTypestring

Language code for specTranslation (required if translation exists), please refer to Menu API Integration Guide

Example: "zh-HK"
spuList[].​skuList[].​specTranslateTypestring

Source of spec translation. When the value equals 1, it indicates that the spec translation was provided by the merchant.

Example: "1"
spuList[].​skuList[].​pricestring

Delivery price (supports 3 decimal places, e.g. "12.33")

Example: "28.0"
spuList[].​skuList[].​pickPricestring

Pickup price (supports 3 decimal places)

Example: "28.0"
spuList[].​skuList[].​canteenPricestring

Dine-in price (supports 3 decimal places)

Example: "28.0"
spuList[].​skuList[].​currencystring

Currency code (refer to "Currency Symbols" enum). Defaults to merchant's currency if empty.

Example: "HKD"
spuList[].​skuList[].​choiceGroupListArray of objects(ChoiceGroup)

List of ChoiceGroups associated with this SKU. Not used for menuSync API.

spuList[].​skuList[].​openItemCodestringrequired

Developer-provided SKU identifier. Mandatory and unique in OpenItemCode-based APIs. Optional for Keeta-based ID APIs.

Example: "SKU#10001"
spuList[].​skuList[].​choiceGroupOpenItemCodeListArray of strings

OpenItemCodes of associated ChoiceGroups. Required for menuSync API.

spuList[].​skuList[].​nutritionalInfoobject

Nutritional components (refer to "Nutritional Elements" enum)

spuList[].​skuList[].​allergensArray of strings

Allergen information (refer to "Allergens" enum)

spuList[].​availableTimeobjectrequired

Selling time slots for this product

spuList[].​availableTime.​codeintegerrequired

Selling time type indicator:

Enum ValueDescription
0

indicates all-day availability

1

indicates weekly schedule

2

indicates specific date ranges

Example: 0
spuList[].​availableTime.​valuesArray of strings

Required when code=1. Contains 7 strings representing daily time slots (Sunday to Saturday). Empty string means unavailable.

spuList[].​availableTime.​availableArray of objects(Availability)

Defines specific date ranges and time windows. Required when code=2.

spuList[].​isSpecialtyintegerrequired

Signature dish indicator:

Enum ValueDescription
0

indicates a regular item

1

indicates a signature dish

Example: 0
spuList[].​openItemCodestringrequired

Developer-provided SPU identifier. Mandatory and unique in OpenItemCode-based APIs.

Example: "SPU#10001"
spuList[].​shopCategoryOpenItemCodeListArray of stringsrequired

This field contains the OpenItemCodes that correspond to menu categories in Keeta's system. When calling the menu synchronization (menuSync) API, this field becomes mandatory. The OpenItemCodes are provided by developers and maintain a one-to-one relationship with Keeta's internal menu category IDs. The Keeta platform will verify whether these OpenItemCodes actually exist in the merchant's store.

Example: ["2$33419","3$34747"]
spuList[].​userGetModeListArray of stringsrequired

This field specifies the supported order fulfillment modes, with case-sensitive values. By default, all products support "delivery" mode. To enable "pickup" mode, the following conditions must be satisfied: First, every SKU in the skuList must have a valid pickPrice value specified. Second, all options within every choice group associated with these SKUs must also have pickPrice values defined. The system recognizes two mode values: "delivery" for standard food delivery services "pickup" for customer self-collection scenarios

Example: ["delivery","pickup"]
curl -i -X POST \
  https://open.mykeeta.com/api/open/product/spu/batchcreate \
  -H 'Content-Type: application/json' \
  -d '{
    "shopId": 25381,
    "spuList": [
      {
        "id": 12345,
        "name": "Spicy Chicken Burger",
        "sourceLanguageType": "en",
        "nameTranslation": "辣雞腿漢堡",
        "targetLanguageType": "zh-HK",
        "nameTranslateType": 1,
        "status": 1,
        "description": "Spicy Chicken Burger description",
        "descSourceLanguageType": "en",
        "descriptionTranslation": "辣雞腿漢堡描述",
        "descTargetLanguageType": "zh-HK",
        "descriptionTranslateType": 1,
        "shopCategoryList": [
          {
            "id": 12345,
            "name": "Happy Meal",
            "sourceLanguageType": "en",
            "nameTranslation": "開心樂園餐",
            "targetLanguageType": "zh-HK",
            "nameTranslateType": 1,
            "type": 0,
            "description": "Happy Meal description",
            "descSourceLanguageType": "en",
            "descriptionTranslation": "開心樂園餐描述",
            "descTargetLanguageType": "zh-HK",
            "descriptionTranslateType": 1,
            "openItemCode": "SHOP_CATEGORY#10001",
            "availableTime": {
              "code": 0,
              "values": [
                "string"
              ],
              "available": [
                {}
              ]
            }
          }
        ],
        "pictureList": [
          {
            "url": "string"
          }
        ],
        "propertyList": [
          {
            "propertyId": 9999,
            "propertyName": "",
            "propertyType": 1,
            "minValueNumber": 0,
            "maxValueNumber": 0,
            "customizable": 0,
            "propertyValueList": [
              {
                "valueId": 9999,
                "valueName": ""
              }
            ]
          }
        ],
        "skuList": [
          {
            "id": 12345,
            "spec": "Large",
            "sourceLanguageType": "en",
            "specTranslation": "大份",
            "targetLanguageType": "zh-HK",
            "specTranslateType": "1",
            "price": "28.0",
            "pickPrice": "28.0",
            "canteenPrice": "28.0",
            "currency": "HKD",
            "choiceGroupList": [
              {
                "id": 0,
                "name": "Sauces",
                "sourceLanguageType": "en",
                "nameTranslation": "選擇醬料",
                "targetLanguageType": "zh-HK",
                "nameTranslateType": 1,
                "minNumber": 0,
                "maxNumber": 3,
                "choiceGroupSkuList": [
                  null
                ],
                "openItemCode": "GROUP#10001",
                "repeatable": 0
              }
            ],
            "openItemCode": "SKU#10001",
            "choiceGroupOpenItemCodeList": [
              "string"
            ],
            "nutritionalInfo": {
              "property1": 0,
              "property2": 0
            },
            "allergens": [
              "string"
            ]
          }
        ],
        "availableTime": {
          "code": 0,
          "values": [
            "string"
          ],
          "available": [
            {
              "startTimestamp": 1735660800000,
              "endTimestamp": 1736956799000
            }
          ]
        },
        "isSpecialty": 0,
        "openItemCode": "SPU#10001",
        "shopCategoryOpenItemCodeList": [
          "2$33419",
          "3$34747"
        ],
        "userGetModeList": [
          "delivery",
          "pickup"
        ]
      }
    ]
  }'

Responses

Batch creation result.

Bodyapplication/json
codeintegerrequired

A numeric status identifier indicating the result of the interface call, used to determine whether the operation executed successfully.

Enum ValueDescription
0

The request was executed successfully.

Non-zero value

The request execution failed. Specific error details can be viewed in the message field.

Example: 0
messagestringrequired

Text description corresponding to the status code, explaining the operation result or error cause to users.

Example: "Success"
dataArray of objects(SPU)

successful Spu data model

errorListArray of objects(ErrorSpu)

failed Spu informations

Response
application/json
{ "code": 0, "message": "Success", "data": [ {} ], "errorList": [ {} ] }
Operations