{"templateId":"markdown","versions":[{"version":"opendelivery","label":"Open Delivery API","link":"/apis/opendelivery/docs/webhook","default":true,"active":false,"folderId":"58c9a61d"},{"version":"standard","label":"Standard Keeta API","link":"/apis/standard/docs/webhook","default":false,"active":false,"folderId":"58c9a61d"},{"version":"grocery","label":"Grocery Keeta API","link":"/apis/grocery/docs/webhook","default":false,"active":true,"folderId":"58c9a61d"}],"sharedDataIds":{"sidebar":"sidebar-apis/@grocery/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Webhook","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"webhook","__idx":0},"children":["Webhook"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1-overview","__idx":1},"children":["1. Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Keeta actively pushes various notifications to service provider applications via webhook, including:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Order"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Store Status"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Menu Synchronization Result"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2-configuring-webhook-url","__idx":2},"children":["2. Configuring Webhook URL"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Please choose ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["one"]}," of the following methods:"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"21-method-1-official-website-configuration","__idx":3},"children":["2.1 Method 1: Official Website Configuration"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Log in to your developer account on Keeta's official website"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Navigate to Application Management"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Configure your webhook URL in the designated section"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"22-method-2-api-configuration","__idx":4},"children":["2.2 Method 2: API Configuration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Configure via Keeta API:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"JSON","header":{"controls":{"copy":{}}},"source":"// Demo\ncurl -X POST 'https://open.mykeeta.com/api/open/base/callback/url/set' \\\n-H 'Content-Type: application/json' \\\n--data-raw '{\n    \"appId\": 2061048026,\n    \"timestamp\": \"1723001797\",\n    \"sig\": \"e12ae63e917752bca3fd5d0eceec42337f2338f4d9303ac30e3eb4856900b07c\",\n    \"eventId\": 1001,\n    \"url\": \"https://<vendor'\\''s url>\",\n    \"isTest\": 1\n}'\n","lang":"JSON"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3-webhook-message-definition","__idx":5},"children":["3. Webhook Message Definition"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field Key"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Field Key"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Type"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Description"]}]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["sig"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["String"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A string calculated according to specific rules (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/apis/grocery/docs/author"},"children":["Authorization Guide"]}," for details). Developers must use this signature to verify whether the request originates from Keeta, thereby guaranteeing message security and accuracy."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["eventId"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Integer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Code representing the message type"]},". Please refer to the event code enumeration later in this document."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["appId"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["long"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Application ID"]},", unique identifier assigned by the system when the application is created."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["messageId"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["String"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Unique identifier"]}," for the message."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["shopId"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Long"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Keeta store ID"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["message"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["String"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Message content"]}," regarding orders, stores, or products. For specific definitions, refer to the API reference chapter."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["timestamp"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Long"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Message push timestamp"]}," in seconds (Unix epoch time)."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Message example:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"JSON","header":{"controls":{"copy":{}}},"source":"// Demo\n{\n  \"sig\": \"6d2581a5e71cdddc6f8770d0e84b2aa02ec72158190b39d97df2e5d5c314b7a0\",\n  \"eventId\": 1002,\n  \"appId\": 3762772727,\n  \"messageId\": \"1930106161957212198\",\n  \"shopId\": 145541,\n  \"message\": \"{\\\"opTime\\\":1749008143025,\\\"orderViewId\\\":553440887574627,\\\"shopId\\\":145541,\\\"status\\\":30}\",\n  \"timestamp\": 1749008143\n}\n","lang":"JSON"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"4-webhook-request-protocol","__idx":6},"children":["4. Webhook Request Protocol"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhook requests use the HTTPS protocol, employ the POST method, have a Content-Type of \"application/json\", and use UTF-8 encoding."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhooks must support Keeta's heartbeat detection. During heartbeat detection, Keeta sends an empty packet. Developers must handle empty packet requests and return a success response."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After processing, the response should be in JSON format. The specific format can be found in the following description:"]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"JSON","header":{"controls":{"copy":{}}},"source":"// Webhook repsonse\n{\n  \"code\": 0,\n  \"message\": \"success\"\n  \"data\": {}\n}\n","lang":"JSON"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field Key"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Field Key"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Type"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Requirement"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Requirement"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Description"]}]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["code"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Integer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Mandatory"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["A code value of 0 indicates successful acceptance"]},". ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Any non-zero code value indicates processing failure"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["message"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["String"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Supplementary explanation of the code value."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["data"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Object"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Additional error details for failure scenarios."]}]}]}]}]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":4},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pushed messages contain signatures. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Developers must verify message signatures."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["All APIs provided by developers must support idempotency."]}," In the event of a request failure or network timeout, the Keeta platform will automatically retry, typically up to 3 times with 1-minute intervals, to ensure that multiple identical requests have the same effect as a single request."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["How to determine if a message is a retry:"]}," Developers can filter based on order data. For example, when Keeta retries a paid order notification, developers should check whether the order ID has already been processed. If the message has been processed, it should be ignored."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"5-enumeration-of-event-id-extract","__idx":7},"children":["5. Enumeration of Event ID (Extract)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["For configuration details, refer to the 'Edit Application' in Developer Portal."]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":""},"children":[]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"eventId"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["eventId"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Event Description"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Event Description"]}]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1001"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Order Placement Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1002"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Order Acceptance Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1003"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Order Completion Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1004"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Order Cancellation Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1005"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Refund Initiation Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1006"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivery Status Update Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1007"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Partial Refund Initiation Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1101"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Store Business Hours Change Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1102"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Store Status Change Notification"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1201"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Batch Product Image Binding Result Notification"]}]}]}]}]}]},"headings":[{"value":"Webhook","id":"webhook","depth":1},{"value":"1. Overview","id":"1-overview","depth":2},{"value":"2. Configuring Webhook URL","id":"2-configuring-webhook-url","depth":2},{"value":"2.1 Method 1: Official Website Configuration","id":"21-method-1-official-website-configuration","depth":3},{"value":"2.2 Method 2: API Configuration","id":"22-method-2-api-configuration","depth":3},{"value":"3. Webhook Message Definition","id":"3-webhook-message-definition","depth":2},{"value":"4. Webhook Request Protocol","id":"4-webhook-request-protocol","depth":2},{"value":"5. Enumeration of Event ID (Extract)","id":"5-enumeration-of-event-id-extract","depth":2}],"frontmatter":{"seo":{"title":"Webhook"}},"lastModified":"2026-07-15T11:32:09.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/apis/grocery/docs/webhook","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}