openapi: 3.0.3 info: termsOfService: https://developer.grab.com/pages/terms-of-use title: GrabFood version: 1.1.3 servers: - description: Staging Environment url: https://partner-api.grab.com/grabfood-sandbox - description: Production Environment url: https://partner-api.grab.com/grabfood tags: - name: scopes x-displayName: Scopes - name: api-env x-displayName: API Environments - name: api-endpoints x-displayName: API Endpoints - name: api-best-practices x-displayName: | Best Practices: API - name: integration-requirements x-displayName: Integration Requirements - name: http-resp-codes x-displayName: | HTTP response codes - name: self-serve-activation-intro x-displayName: Introduction - name: create-self-serve-journey x-displayName: Create self-serve journey - name: push-grab-menu-webhook x-displayName: Push Grab menu webhook - name: push-integration-status-webhook x-displayName: Push integration status webhook - name: sdk-intro x-displayName: GrabFood SDK - name: go x-displayName: Go - name: java x-displayName: Java - name: node.js x-displayName: Node.js - name: python x-displayName: Python - name: php x-displayName: PHP - name: get-oauth-grab x-displayName: Get GrabFood access token - name: get-oauth-partner-webhook x-displayName: Get partner access token webhook - name: get-menu-webhook x-displayName: Get food menu webhook - name: update-menu-record x-displayName: Update menu record - name: update-menu-notification x-displayName: Update menu notification - name: menu-sync-state-webhook x-displayName: Menu sync state webhook - name: trace-menu-sync x-displayName: Trace menu sync - name: sync-flow x-displayName: Menu sync flow - name: submit-order-webhook x-displayName: Submit order webhook - name: accept-reject-order x-displayName: Accept/reject orders - name: list-orders x-displayName: List orders - name: edit-order x-displayName: Edit orders - name: push-order-state-webhook x-displayName: Push order state webhook - name: mark-order-ready x-displayName: Mark orders ready - name: update-delivery-state x-displayName: Update delivery state - name: update-order-ready-time x-displayName: Update order ready time - name: check-order-cancelable x-displayName: Check if order is cancelable - name: cancel-order x-displayName: Cancel order - name: pause-store x-displayName: Temporarily pause store - name: campaign-type x-displayName: Campaign type - name: create-campaign x-displayName: Create campaigns - name: update-campaign x-displayName: Update campaigns - name: list-campaign x-displayName: List campaigns - name: delete-campaign x-displayName: Delete campaigns - name: troubleshooting x-displayName: Troubleshooting - name: faqs x-displayName: Frequently asked questions (FAQs) - name: changelog x-displayName: Changelog - name: order-types x-displayName: Order Types - name: get-store-hour x-displayName: Get Store Hours - name: get-store-status x-displayName: Get Store Status - name: update-store-delivery-hour x-displayName: Update Store Delivery Hours - name: update-store-dine-in-hour x-displayName: Update Store Dine-in Hours - name: update-store-special-hour x-displayName: Update Store Special Hours - name: partner-loyalty-native x-displayName: Partner Loyalty Program (Native) - name: partner-loyalty-webview x-displayName: Partner Loyalty Program (Webview) - name: bind-membership-native x-displayName: Bind membership - name: register-membership-native x-displayName: Register membership - name: notify-membership-webview x-displayName: Notify membership - name: unbind-membership-native x-displayName: Unbind membership - name: unlink-membership-webview x-displayName: Unlink membership - name: get-membership-native x-displayName: Get membership detail - name: get-membership-webview x-displayName: Get membership detail - name: get-reward-native x-displayName: Calculate reward points - name: activation-best-practices x-displayName: | Best Practices: Activation - name: menu-best-practices x-displayName: | Best Practices: Menu - name: order-best-practices x-displayName: | Best Practices: Order - name: campaign-best-practices x-displayName: | Best Practices: Campaign - name: pay-bill x-displayName: Pay Bill - name: scan-to-order x-displayName: Scan To Order - name: scan-to-order-best-practices x-displayName: | Best Practices: Scan To Order - name: loyalty-webview-best-practices x-displayName: | Best Practices: Loyalty (Webview) - name: sync-pos-order x-displayName: Sync POS Order - name: refund-order x-displayName: Refund Order - name: generate-sto-qr-code x-displayName: Generate STO QR Code paths: /partner/v1/self-serve/activation: post: operationId: create-self-serve-journey parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateSelfServeJourneyRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/CreateSelfServeJourneyResponse' description: Success summary: Create self serve journey tags: - create-self-serve-journey /partner/v2/merchants/{merchantID}/store/special-opening-hour: put: operationId: update-store-special-hour parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The merchant's ID that is in GrabFood's database. explode: false in: path name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateSpecialHourRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/UpdateSpecialHourResponse' description: Success "401": description: Unauthorized. The access token is invalid. "5XX": description: All other unexpected errors. summary: Update Store Special Hours tags: - update-store-special-hour x-codeSamples: - lang: cURL label: CLI source: | curl -L -X PUT 'https://partner-api.grab.com/grabfood/partner/v2/merchants/1-C3VEJY6CMEEGUE/store/special-opening-hour' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/json' \ -d '{ "specialOpeningHours": [ { "startDate": "2024-05-01", "endDate": "2024-09-04", "metadata": { "description": "Holiday Season Special Hours" }, "openingHours": { "openPeriodType": "Period", "periods": [ { "startTime": "09:00", "endTime": "12:00" }, { "startTime": "13:00", "endTime": "18:00" } ] } }, { "startDate": "2024-09-05", "endDate": "2024-09-10", "metadata": { "description": "New Year Special Hours" }, "openingHours": { "openPeriodType": "OpenAllDay" } } ] }' /partner/v1/merchants/{merchantID}/store/dine-in-hours: put: operationId: update-store-dine-in-hour parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The merchant's ID that is in GrabFood's database. explode: false in: path name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateDineInHourRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/UpdateDineInHourResponse' description: Success "401": description: Unauthorized. The access token is invalid. "5XX": description: All other unexpected errors. summary: Update Store Dine-in Hours tags: - update-store-dine-in-hour x-codeSamples: - lang: cURL label: CLI source: | curl -L -X PUT 'https://partner-api.grab.com/grabfood/partner/v1/merchants/1-C3VEJY6CMEEGUE/store/dine-in-hours' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/json' \ -d '{ "dineInHour": { "mon": [ { "startTime": "00:00", "endTime": "00:05" }, { "startTime": "01:00", "endTime": "01:05" } ], "tue": [ { "startTime": "00:00", "endTime": "00:05" } ], "wed": [], "thu": [ { "startTime": "00:00", "endTime": "00:05" } ], "fri": [], "sat": [ { "startTime": "00:00", "endTime": "00:05" } ], "sun": [] } }' /partner/v1/merchants/{merchantID}/store/opening-hours: put: operationId: update-store-delivery-hour parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The merchant's ID that is in GrabFood's database. explode: false in: path name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateDeliveryHourRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/UpdateDeliveryHourResponse' description: Success "401": description: Unauthorized. The access token is invalid. "5XX": description: All other unexpected errors. summary: Update Store Delivery Hours tags: - update-store-delivery-hour x-codeSamples: - lang: cURL label: CLI source: | curl -L -X PUT 'https://partner-api.grab.com/grabfood/partner/v1/merchants/1-C3VEJY6CMEEGUE/store/opening-hours' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/json' \ -d '{ "openingHour": { "mon": [ { "startTime": "00:00", "endTime": "00:05" }, { "startTime": "01:00", "endTime": "01:05" } ], "tue": [ { "startTime": "00:00", "endTime": "00:05" } ], "wed": [], "thu": [ { "startTime": "00:00", "endTime": "00:05" } ], "fri": [], "sat": [ { "startTime": "00:00", "endTime": "00:05" } ], "sun": [], "force": true } }' /partner/v1/merchants/{merchantID}/store/status: get: operationId: get-store-status parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The merchant's ID that is in GrabFood's database. explode: false in: path name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/StoreStatusResponse' description: Success "401": description: Unauthorized. The access token is invalid. "5XX": content: application/json: schema: $ref: '#/components/schemas/Error' description: All other unexpected errors. summary: Get Store Status tags: - get-store-status x-codeSamples: - lang: cURL label: CLI source: | curl -L -X GET 'https://partner-api.grab.com/grabfood/partner/v1/merchants/1-C3VEJY6CMEEGUE/store/status' \ -H 'Authorization: Bearer ' /partner/v2/merchants/{merchantID}/store/hours: get: operationId: get-store-hour parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The merchant's ID that is in GrabFood's database. explode: false in: path name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/StoreHourResponse' description: Success "401": description: Unauthorized. The access token is invalid. "5XX": content: application/json: schema: $ref: '#/components/schemas/Error' description: All other unexpected errors. summary: Get Store Hours tags: - get-store-hour x-codeSamples: - lang: cURL label: CLI source: | curl -L -X GET 'https://partner-api.grab.com/grabfood/partner/v2/merchants/1-C3VEJY6CMEEGUE/store/hours' \ -H 'Authorization: Bearer ' /grabid/v1/oauth2/token: post: operationId: get-oauth-grab parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/GrabOauthRequest' description: "" required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/GrabOauthResponse' description: The API request is successfully processed. servers: - description: Staging Environment url: https://api.grab.com - description: Production Environment url: https://api.grab.com summary: Get Oauth access token tags: - get-oauth-grab x-codeSamples: - lang: cURL label: CLI source: | curl -X POST https://api.stg-myteksi.com/grabid/v1/oauth2/token \ -H 'Content-Type: application/json' \ -d '{ "client_id": "", "client_secret": "", "grant_type": "client_credentials", "scope": "food.partner_api" }' /partner/v1/menu: put: operationId: update-menu parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/update_menu_request' description: "" required: true responses: "204": description: Successful. No Content returned. summary: Update menu record tags: - update-menu-record x-codeSamples: - lang: cURL label: Update menu item source: | curl -X PUT \ https://partner-api.grab.com/grabfood/partner/v1/menu \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "merchantID": "1-C3VEJY6CMEEGUE", "field": "ITEM", "id": "111", "price": 123, // 1.23 Dollar "availableStatus": "", "maxStock": 10, "advancedPricings": [ { "key": "Delivery_Scheduled_GrabApp", "price": 110 } ], "purchasabilities": [ { "key": "Delivery_Scheduled_GrabApp", "purchasable": true } ] }' - lang: cURL label: Update menu modifier source: | curl -X PUT \ https://partner-api.grab.com/grabfood/partner/v1/menu \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "merchantID": "1-C3VEJY6CMEEGUE", "field": "MODIFIER", "id": "111", "price": 123, // 1.23 Dollar "availableStatus": "", "name": "caramel sauce", "isFree": false, "advancedPricings": [ { "key": "Delivery_Scheduled_GrabApp", "price": 110 } ] }' /partner/v1/batch/menu: put: operationId: batch-update-menu parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/BatchUpdateMenuItem' description: "" required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/BatchUpdateMenuResponse' description: The API request is successfully processed. Refer to status and errors for more info. "400": description: | invalid_argument | Description | | ----------- | | Invalid parameter | | Batch update menu support at most 200 items | "409": description: | conflict. BatchUpdate ITEM xxx too frequently, retry after 10 seconds "429": description: | Too Many Requests summary: Batch Update Menu tags: - update-menu-record x-codeSamples: - lang: cURL label: Batch update menu item source: | curl -X PUT \ https://partner-api.grab.com/grabfood/partner/v1/batch/menu \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "merchantID": "1-C3VEJY6CMEEGUE", "field": "ITEM", "menuEntities": [ { "id": "111", "price": 123, // 1.23 Dollar "availableStatus": "AVAILABLE|UNAVAILABLE|UNAVAILABLETODAY", "maxStock": 10, "advancedPricings": [ { "key": "Delivery_Scheduled_GrabApp", "price": 110 } ], "purchasabilities": [ { "key": "Delivery_Scheduled_GrabApp", "purchasable": true } ] }, { "id": "222", "price": 456, // 1.23 Dollar "availableStatus": "UNAVAILABLE" } ] }' /partner/v1/merchant/menu/notification: post: operationId: update-menu-notification parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateMenuNotifRequest' description: "" required: true responses: "204": description: Successful. No Content returned. headers: x-job-id: description: "Uniquely identifies a menu sync job. Please mention this\ \ value while raising any issues on [Menu sync state webhook](#tag/menu-sync-state-webhook)." example: 36bb8bb8-4aef-4eca-bed9-fd5ae1e4dc11 explode: false schema: type: string style: simple "4XX": content: application/json: schema: $ref: '#/components/schemas/Error' description: | invalid_argument Fail example with code and reason. | Code | Reason | Message | | -----| --------------- | -------------------------------------------------- | | 409 | invalid_argument | sync menu too frequently, retry after 120 seconds | > Note: A distributed interval lock mechanism with a default duration of 120 seconds is in place for the same requests sent. The lock duration is customizable and may vary across different partners. summary: Notify Grab of updated menu tags: - update-menu-notification x-codeSamples: - lang: cURL label: Update Menu Notification source: | curl -X POST \ https://partner-api.stg-myteksi.com/grabfood-sandbox/partner/v1/merchant/menu/notification \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "merchantID": "1-C3VEJY6CMEEGUE" }' /partner/v1/merchant/menu/trace: get: operationId: trace-menu-sync parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The merchant's ID that is in GrabFood's database. explode: true in: query name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/MenuSyncResponse' description: Sync success or fail "4xx": content: application/json: schema: $ref: '#/components/schemas/Error' description: Common error summary: Trace menu sync tags: - trace-menu-sync x-codeSamples: - lang: cURL label: CLI source: | curl -L -X GET 'https://partner-api.stg-myteksi.com/grabfood-sandbox/partner/v1/merchant/menu/trace?merchantID=1-C3VEJY6CMEEGUE' \ -H 'Authorization: Bearer ' /partner/v1/order/prepare: post: operationId: accept-reject-order parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/AcceptOrderRequest' description: "" required: true responses: "204": description: Successful. No content returned. summary: Manually accept/reject orders tags: - accept-reject-order x-codeSamples: - lang: cURL label: CLI source: | curl -X POST \ https://partner-api.stg-myteksi.com/grabfood-sandbox/partner/v1/order/prepare \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "orderID": "123-CYNKLPCVRN5", "toState": "Accepted" }' /partner/v1/orders: get: operationId: list-orders parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The merchant's ID that is in GrabFood's database. explode: true in: query name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: form - explode: true in: query name: date required: false schema: $ref: '#/components/schemas/date' style: form - description: Specify the page number for the report. Required if orderIDs is not provided. example: 1 explode: true in: query name: page required: false schema: type: integer style: form - description: "List of order IDs. If provided, date and page are not required." example: - 123-CYNKLPCVRN5 - 456-PCVRN5CYNKL explode: true in: query name: orderIDs required: false schema: items: type: string maxItems: 10 type: array style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListOrdersResponse' description: Sync success summary: List orders tags: - list-orders x-codeSamples: - lang: cURL label: CLI by date source: | curl -X GET \ https://partner-api.grab.com/grabfood/partner/v1/orders?merchantID=1-C3VEJY6CMEEGUE&date=2020-01-20&page=0 \ -H 'Authorization: Bearer ' - lang: cURL label: CLI by orderIDs source: | curl -X GET \ https://partner-api.grab.com/grabfood/partner/v1/orders?merchantID=1-C3VEJY6CMEEGUE&orderIDs=123-CYNKLPCVRN5&orderIDs=456-PCVRN5CYNKL \ -H 'Authorization: Bearer ' /partner/v1/orders/{orderID}: put: deprecated: true operationId: edit-order-v1 parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - explode: false in: path name: orderID required: true schema: $ref: '#/components/schemas/orderID' style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/EditOrderRequest' required: true responses: "204": description: Successful. No content returned. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: "invalid_argument\n| Code | Reason | Message \ \ | Description \ \ \ \ | \n| ---- | ---------------- | ------------------------------------------\ \ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 400 | invalid_argument | nothing changed \ \ | The items struct is empty \ \ |\n| 400 | invalid_argument\ \ | can't remove all items | we don't allow clean\ \ all the items \ \ |\n| 400 | invalid_argument | externalItemID not supported\ \ for this status | externalItemID not supported for this status \ \ |\n| 400 | invalid_argument\ \ | externalItemID only allowed for ADDED item status | externalItemID\ \ only allowed for ADDED item status \ \ |\n| 400 | invalid_argument | invalid price, price can't\ \ be negative | DepositAmountInMin is negative, OfflinePOSDiscountInMin\ \ is negative |\n| 400 | invalid_argument\ \ | params must include all items | params must include all\ \ items in the order \ \ |\n| 400 | invalid_argument | exceed basket limit \ \ | Total price exceed basket limit \ \ |\n| 400 |\ \ invalid_argument | exceed max price amount limit | Total\ \ price exceed limit:
• SG: S$1000
• ID: Rp10,000,000
• PH:\ \ ₱15,000
• VN: ₫15,000,000
• TH: ฿300,000
• MY: RM1,500 |\n\ | 400 | invalid_argument | recalculate failed \ \ | recalculate failed \ \ |\n| 400 | invalid_argument\ \ | submit edit failed | submit edit failed \ \ \ \ |\n| 400 | invalid_argument | exceed price increase\ \ limit | exceed price increase limit \ \ |\n| 400\ \ | invalid_argument | negative weight | negative\ \ weight \ \ |\n| 400 | invalid_argument | fraud check\ \ error | fraud check error \ \ \ \ |\n| 400 | invalid_argument | externalItemID inactive or out of selling\ \ time | externalItemID inactive or out of selling time \ \ |\n| 400 | invalid_argument\ \ | added item invalid | added item invalid \ \ \ \ |\n" "403": content: application/json: schema: $ref: '#/components/schemas/Error' description: "forbidden\n| Code | Reason | Message | Description\ \ \ \ | \n| ---- | --------- | ------------ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 403 | forbidden | not editable | not editable \ \ \ \ |\n" "404": content: application/json: schema: $ref: '#/components/schemas/Error' description: "not_found\n| Code | Reason | Message | Description\ \ \ \ | \n| ---- | --------- | --------------------\ \ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 404 | not_found | not found order | The orderID is not found\ \ grab status. \ \ |\n| 404 | not_found | invalid order | The order\ \ status is wrong for edit action. \ \ |\n| 404 | not_found | not found item \ \ | The itemID doesn't match with isExternalItemID and can't be found\ \ from grab system. |\n| 404 | not_found | Invalid\ \ item status | The item status isn't correct. Eg, there is no item in\ \ the order but want to delete it. |\n| 404 | not_found\ \ | order detail abnormal | order detail abnormal \ \ |\n| 404\ \ | not_found | get merchant failed | get merchant failed \ \ \ \ |\n" summary: Edit Order V1 tags: - edit-order x-codeSamples: - lang: cURL label: CLI source: | curl --location --request PUT 'https://partner-api.grab.com/grabfood/partner/v1/orders/91725890-C25KME4ZVP2FLX' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer ' --data-raw '{ "orderID":"91725890-C25KME4ZVP2FLX", "items":[ { "itemID":"IDGFSTI000004qy1490868132306763533#0", "status":"DELETED", "quantity": 3, "isExternalItemID": false }, { "itemID":"IDGFSTI000004qy1490868121450639138#0", "status":"UPDATED", "quantity": 2, "isExternalItemID": false }, { "itemID":"Burger_2", "status":"ADDED", "quantity": 3, "isExternalItemID": true, "modifiers": [ { "id": "MOD_A", "quantity": 1 } ] } ], "onlyRecalculate": false }' /partner/v2/orders/{orderID}: put: operationId: edit-order-v2 parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - explode: false in: path name: orderID required: true schema: $ref: '#/components/schemas/orderID' style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/EditOrderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/EditOrderV2Response' description: The API request is successfully processed. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: "invalid_argument\n| Code | Reason | Message \ \ | Description \ \ \ \ | \n| ---- | ---------------- | ------------------------------------------\ \ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 400 | invalid_argument | nothing changed \ \ | The items struct is empty \ \ |\n| 400 | invalid_argument\ \ | can't remove all items | we don't allow clean\ \ all the items \ \ |\n| 400 | invalid_argument | externalItemID not supported\ \ for this status | externalItemID not supported for this status \ \ |\n| 400 | invalid_argument\ \ | externalItemID only allowed for ADDED item status | externalItemID\ \ only allowed for ADDED item status \ \ |\n| 400 | invalid_argument | invalid price, price can't\ \ be negative | DepositAmountInMin is negative, OfflinePOSDiscountInMin\ \ is negative |\n| 400 | invalid_argument\ \ | params must include all items | params must include all\ \ items in the order \ \ |\n| 400 | invalid_argument | exceed basket limit \ \ | Total price exceed basket limit \ \ |\n| 400 |\ \ invalid_argument | exceed max price amount limit | Total\ \ price exceed limit:
• SG: S$1000
• ID: Rp10,000,000
• PH:\ \ ₱15,000
• VN: ₫15,000,000
• TH: ฿300,000
• MY: RM1,500 |\n\ | 400 | invalid_argument | recalculate failed \ \ | recalculate failed \ \ |\n| 400 | invalid_argument\ \ | submit edit failed | submit edit failed \ \ \ \ |\n| 400 | invalid_argument | exceed price increase\ \ limit | exceed price increase limit \ \ |\n| 400\ \ | invalid_argument | negative weight | negative\ \ weight \ \ |\n| 400 | invalid_argument | fraud check\ \ error | fraud check error \ \ \ \ |\n| 400 | invalid_argument | externalItemID inactive or out of selling\ \ time | externalItemID inactive or out of selling time \ \ |\n| 400 | invalid_argument\ \ | added item invalid | added item invalid \ \ \ \ |\n" "403": content: application/json: schema: $ref: '#/components/schemas/Error' description: "forbidden\n| Code | Reason | Message | Description\ \ \ \ | \n| ---- | --------- | ------------ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 403 | forbidden | not editable | not editable \ \ \ \ |\n" "404": content: application/json: schema: $ref: '#/components/schemas/Error' description: "not_found\n| Code | Reason | Message | Description\ \ \ \ | \n| ---- | --------- | --------------------\ \ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 404 | not_found | not found order | The orderID is not found\ \ grab status. \ \ |\n| 404 | not_found | invalid order | The order\ \ status is wrong for edit action. \ \ |\n| 404 | not_found | not found item \ \ | The itemID doesn't match with isExternalItemID and can't be found\ \ from grab system. |\n| 404 | not_found | Invalid\ \ item status | The item status isn't correct. Eg, there is no item in\ \ the order but want to delete it. |\n| 404 | not_found\ \ | order detail abnormal | order detail abnormal \ \ |\n| 404\ \ | not_found | get merchant failed | get merchant failed \ \ \ \ |\n" summary: Edit Order V2 tags: - edit-order x-codeSamples: - lang: cURL label: CLI source: | curl --location --request PUT 'https://partner-api.grab.com/grabfood/partner/v2/orders/91725890-C25KME4ZVP2FLX' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer ' --data-raw '{ "orderID":"91725890-C25KME4ZVP2FLX", "items":[ { "itemID":"IDGFSTI000004qy1490868132306763533", "status":"DELETED", "quantity": 3, "isExternalItemID": false }, { "itemID":"IDGFSTI000004qy1490868121450639138", "status":"UPDATED", "quantity": 2, "isExternalItemID": false }, { "itemID":"Burger_2", "status":"ADDED", "quantity": 3, "isExternalItemID": true } ], "onlyRecalculate": false }' /partner/v1/orders/mark: post: operationId: mark-order-ready parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/MarkOrderRequest' required: true responses: "204": description: Successful. No content returned. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: "invalid_argument\n| Code | Reason | Message |\n| ----- | ------\ \ | ------- |\n| 400 | invalid_argument | invalid order state |\n| 400\ \ | invalid_argument\t| order already marked ready|\n| 400 | invalid_argument\ \ | invalid markStatus: 0|\n" summary: Mark order as ready tags: - mark-order-ready x-codeSamples: - lang: cURL label: CLI source: | curl --location --request POST 'https://partner-api.grab.com/grabfood/partner/v1/orders/mark' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer ' \ --data-raw '{ "orderID": "102445314-C3LWN3CDLCN2JJ", "markStatus": 1 }' /partner/v1/order/delivery: post: operationId: update-delivery-state parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/OrderDeliveryRequest' required: true responses: "204": description: Successful. No content returned. summary: Update delivery state tags: - update-delivery-state x-codeSamples: - lang: cURL label: CLI source: | curl -X POST \ https://partner-api.stg-myteksi.com/grabfood-sandbox/partner/v1/order/delivery \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "orderID": "123-CYNKLPCVRN5", "fromState": "Collected", "toState": "Delivered" }' /partner/v1/order/readytime: put: operationId: update-order-ready-time parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/NewOrderTimeRequest' required: true responses: "204": description: Successful. No content returned. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: | invalid_argument | Code | Reason | Message | | ----- | ----- | ------- | | 400 | invalid_argument | invalid new order ready time | | 400 | invalid_argument | order ready time not allowed to change | summary: Update new order ready time tags: - update-order-ready-time x-codeSamples: - lang: cURL label: CLI source: | curl --location --request PUT 'https://partner-api.grab.com/grabfood/partner/v1/order/readytime' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer ' \ --data-raw '{ "orderID": "102445314-C3LWN3CDLCN2JJ", "newOrderReadyTime": "2019-05-24T05:16:00Z" }' /partner/v1/order/cancelable: get: operationId: check-order-cancelable parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - explode: true in: query name: orderID required: true schema: $ref: '#/components/schemas/orderID' style: form - description: The merchant's ID that is in GrabFood's database. explode: true in: query name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/CheckOrderCancelableResponse' description: The API request is successfully processed. summary: Check order cancelable tags: - check-order-cancelable x-codeSamples: - lang: cURL label: CLI source: | curl --location --request GET 'https://partner-api.stg-myteksi.com/grabfood-sandbox/partner/v1/order/cancelable?orderID=102445314-C3LWN3CDLCN2JJ&merchantID=1-CYNGRUNGSBCCC' \ --header 'Authorization: Bearer ' \ /partner/v1/order/cancel: put: operationId: cancel-order parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/CancelOrderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/CancelOrderResponse' description: The API request is successfully processed. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: invalid_argument "403": content: application/json: schema: $ref: '#/components/schemas/Error' description: | This request is forbidden. For each 403 HTTP response, a detailed reason will be returned. | Type | Message | | -------| ------------| | Invalid order | Order cannot be cancelled via this endpoint as this order does not belong to you. Please contact Grab Support for further assistance. | | Daily limit reached | Order cannot be cancelled via this endpoint as the daily limit for order cancellations has been reached. Please contact Grab Support for further assistance. | | Weekly limit reached | Order cannot be cancelled via this endpoint as the weekly limit for order cancellations has been reached. Please contact Grab Support for further assistance. | | Monthly limit reached | Order cannot be cancelled via this endpoint as the monthly limit for order cancellations has been reached. Please contact Grab Support for further assistance. | | Mix and match order | Order cannot be cancelled via this endpoint as it is part of a GKMM (Grab Kitchen Mix And Match) order. Please contact Grab Support for further assistance. | | Self-pick up order | Order cannot be cancelled via this endpoint as it is a self-pick up order. Please contact Grab Support for further assistance. | | Scheduled order | Order cannot be cancelled via this endpoint as it is a scheduled order. Please contact Grab Support for further assistance. | | Time limit | Order cannot be cancelled via this endpoint as the cancellation time limit has been reached since a driver has been allocated for too long. Please contact Grab Support for further assistance. | | Manual-accept stores | Order cannot be cancelled via this endpoint as only stores on auto-accept can use this endpoint. Please contact Grab Support for further assistance. | | Outdated driver app | Order cannot be cancelled via this endpoint as the driver's Grab app is outdated. Please contact Grab Support for further assistance. | | Unallocated order | Order cannot be cancelled via this endpoint as the order has not been allocated yet. Please contact Grab Support for further assistance. | | Default error (edge case) | Order cannot be cancelled via this endpoint as a default error has occured. Please contact Grab Support for further assistance. | "404": content: application/json: schema: $ref: '#/components/schemas/Error' description: not_found "409": content: application/json: schema: $ref: '#/components/schemas/Error' description: conflict "500": content: application/json: schema: $ref: '#/components/schemas/Error' description: | 5XX error codes are rare and indicate that GrabFood is facing an internal server error. This type of error is applicable to all HTTP response codes in the 500 range, e.g. 500, 504. Retry the operation at a later time with a unique ID. Use an exponential backoff retry mechanism to resend the requests at an increasingly slower interval. It is also a good practice to use a randomized delay (jitter) in your retry schedule. | Type | Message | | -------| ------------| | Get order error | Get order failed. | | Cancel order error | Cancel order failed. | summary: Cancel an order tags: - cancel-order x-codeSamples: - lang: cURL label: CLI source: | curl --location --request PUT 'https://partner-api.stg-myteksi.com/grabfood-sandbox/partner/v1/order/cancel' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer ' \ --data-raw '{ "orderID": "102445314-C3LWN3CDLCN2JJ", "merchantID": "1-CYNGRUNGSBCCC", "cancelCode": 1001 }' /partner/v1/merchant/pause: put: operationId: pause-store parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/PauseStoreRequest' required: true responses: "204": description: Successful. No content returned. summary: Pause store tags: - pause-store x-codeSamples: - lang: cURL label: CLI source: | curl -L -X PUT 'https://partner-api.stg-myteksi.com/grabfood-sandbox/partner/v1/merchant/pause' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ --data-raw '{ "merchantID": "6-CYXYRCMXNEKCVA", "isPause": true, "duration": "30m" }' /partner/v1/campaigns: get: operationId: list-campaign parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The merchant's ID that is in GrabFood's database. explode: true in: query name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListCampaignResponse' description: The API request is successfully processed. summary: List campaigns tags: - list-campaign x-codeSamples: - lang: cURL label: CLI source: | curl -L -X GET 'https://partner-api.grab.com/grabfood/partner/v1/campaigns?merchantID=4-CY4VMFMANYBYJ6' \ -H 'Authorization: Bearer ' post: operationId: create-campaign parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateCampaignRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/CreateCampaignResponse' description: The API request is successfully processed. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: | invalid_argument | Code | Reason | Message | | ---- | ---------------- | ----------------------------------- | | 400 | invalid_argument | items not found | | 400 | invalid_argument | startTime has to be after now | | 400 | invalid_argument | CAMPAIGN_START_TIME_TOO_CLOSE_TO_NOW:failed to create MFC: | | 400 | invalid_argument | CAMPAIGN_DURATION_TOO_LONG:failed to create MFC: | | 400 | invalid_argument | EFFECTIVE_DATE_OVERLAP:failed to create MFC: Item(s) are on multiple promotions in the same promotion period: SGITE2021052909250501859400 (4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295)" | | 400 | invalid_argument | EATER_TYPE_CONDITION_IS_NOT_SUPPORTED:failed to create MFC: This level campaign can't be applied for such eater type | | 400 | invalid_argument | INVALID_QUOTAS:failed to create MFC: | | 400 | invalid_argument | INVALID_DISCOUNT_VALUE:failed to create MFC: | | 400 | invalid_argument | INVALID_PARAMS:failed to create MFC: Order level campaign should have min basket condition | | 400 | invalid_argument | INVALID_BUNDLE_OFFER:failed to create MFC: bundle price invalid | | 400 | invalid_argument | INVALID_BUNDLE_OFFER:failed to create MFC: itemIDs should be between 2 and 20 | | 400 | invalid_argument | NOT_SUPPORT_BUNDLE_SAME_MULTIPLE_ITEMS:failed to create MFC: bundle multiple items is not supported for same item bundle | | 400 | invalid_argument | EXCEED_ACTIVE_CAMPAIGN_MAX_LIMIT:failed to create MFC: number of same campaign level's promotions exceeds maximum limit(100) | summary: Create campaign tags: - create-campaign /partner/v1/campaigns/{campaign_id}: delete: operationId: delete-campaign parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - explode: false in: path name: campaign_id required: true schema: $ref: '#/components/schemas/campaignId' style: simple responses: "204": description: The API request is successfully processed. summary: Delete campaigns tags: - delete-campaign x-codeSamples: - lang: cURL label: CLI source: | curl -L -X DELETE 'https://partner-api.grab.com/grabfood/partner/v1/campaigns/4-CY4VMFMANYBYJ6-C2AGRGBHRCADFA-25547977' \ -H 'Authorization: Bearer ' put: operationId: update-campaign parameters: - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - explode: false in: path name: campaign_id required: true schema: $ref: '#/components/schemas/campaignId' style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateCampaignRequest' required: true responses: "204": description: The API request is successfully processed. summary: Update campaign tags: - update-campaign /partner/v1/dinein/voucher: get: operationId: get-dinein-voucher parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: A short code for the dine-in voucher purchased by the user. Required if `certificateID` is not specified. explode: true in: query name: voucherCode required: false schema: $ref: '#/components/schemas/voucherCode' style: form - description: "This certificateID is decoded from scanning the QR code, and\ \ 1:1 mapping with voucherCode. Required if `voucherCode` is not specified." explode: true in: query name: certificateID required: false schema: $ref: '#/components/schemas/certificateID' style: form - explode: true in: query name: merchantID required: true schema: $ref: '#/components/schemas/merchantID' style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetDineInVoucherResponse' description: The API request is successfully processed. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: "invalid_argument\n| Code | Reason | Message \ \ | Description \ \ | \n| ----\ \ | ---------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------\ \ | \n| 400 | invalid_argument | invalid certificateID \ \ | The certificateID is not valid. \ \ |\n| 400 | invalid_argument | voucherCode\ \ or certificateID not specified | The voucherCode and certificateID are\ \ both empty in params, one of the both must be provided. |\n" "404": content: application/json: schema: $ref: '#/components/schemas/Error' description: "not_found\n| Code | Reason | Message \ \ | Description \ \ | \n| -----| ----------- | ----------------------------\ \ | -----------------------------------------------------------------------------------------------\ \ | \n| 404 | not_found | voucher not found | The voucher\ \ is not found for the specified voucherCode or certificateID. \ \ |\n| 404 | not_found | failed to get store info \ \ | The store is not found for the specified merchantID. \ \ |\n" summary: Get Dine In Voucher tags: - get-dinein-voucher x-codeSamples: - lang: cURL label: CLI source: | curl -L -X GET 'https://partner-api.grab.com/grabfood/partner/v1/dinein/voucher?voucherCode=GV-OQBJDKZH&certificateID=PPD#h9YygDAZhWkZVD50bT_xnM0bEFqTayuOdmHEhqJ4YAeDFPD3OKsEVg==&merchantID=4-C2YEK6CGZMTEX' \ -H 'Authorization: Bearer ' \ /partner/v1/dinein/voucher/redeem: post: operationId: redeem-dinein-voucher parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/RedeemDineInVoucherRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RedeemDineInVoucherResponse' description: The API request is successfully processed. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: "invalid_argument\n| Code | Reason | Message \ \ | Description \ \ \ \ | \n| ---- | ---------------- | ------------------------------------------\ \ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 400 | invalid_argument | invalid certificateID \ \ | The certificateID is not valid. \ \ |\n| 400 | invalid_argument\ \ | not enabled | The QR redemption feature\ \ is not enabled for the merchant, please reach out to the integration\ \ manager |\n" "404": content: application/json: schema: $ref: '#/components/schemas/Error' description: "not_found\n| Code | Reason | Message \ \ | Description \ \ | \n| -----| ----------- | ----------------------------\ \ | -----------------------------------------------------------------------------------------------\ \ | \n| 404 | not_found | voucher not found | The voucher\ \ is not found for the specified voucherCode or certificateID. \ \ |\n| 404 | not_found | failed to get store info \ \ | The store is not found for the specified merchantID. \ \ |\n" "500": content: application/json: schema: $ref: '#/components/schemas/Error' description: "internal\n| Code | Reason | Message \ \ | Description \ \ | \n| -----| ----------- | ----------------------------\ \ | -----------------------------------------------------------------------------------------------\ \ | \n| 500 | internal | redeem failed | Redemption\ \ failed, please try again later. \ \ |\n" summary: Redeem Dine In Voucher tags: - redeem-dinein-voucher x-codeSamples: - lang: cURL label: CLI source: | curl -X POST 'https://partner-api.grab.com/grabfood/partner/v1/dinein/voucher/redeem' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "certificateID": "PPD%23-lQi823X7Te-MCXUW1ynhA7PEpXjeml2xqB2KTIvNdXzu3M_R8mLtA==", "merchantID": "1-C3VEJY6CMEEGUE" }' /partner/v1/pos/order: post: operationId: sync-pos-order parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/SyncPOSOrderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/SyncPOSOrderResponse' description: The API request is successfully processed. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: "invalid_argument\n| Code | Reason | Message \ \ | Description \ \ \ \ | \n| ---- | ---------------- | ------------------------------------------\ \ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 400 | invalid_argument | misconfiguration for oauth partnerID\ \ | oauth partnerID is matched with the one in grab system \ \ |\n| 400 | invalid_argument\ \ | invalid request | The request body is empty\ \ \ \ |\n| 400 | invalid_argument | invalid order \ \ | The order is wrong. Please check:
• order struct\ \ is empty
• orderID is not found in grab system |\n| 400\ \ | invalid_argument | invalid currency | Please\ \ check: The currency struct is empty \ \ |\n| 400 | invalid_argument | invalid action\ \ | The action is wrong \ \ |\n\ | 400 | invalid_argument | merchantID is required \ \ | No merchantID in the request \ \ |\n| 400 | invalid_argument\ \ | failed to get store info | The merchant is not found\ \ in the grab system \ \ |\n| 400 | invalid_argument | invalid merchant \ \ | The merchant is wrong. Please check:
• The merchant\ \ is not found in the grab system
• This order not belong to this\ \ merchant |\n| 400 | invalid_argument | invalid order state \ \ | Invalid order state to trigger complete \ \ |\n| 400 | invalid_argument\ \ | order already completed | order already completed,\ \ no further action needed \ \ |\n| 400 | invalid_argument | invalid pos orderID \ \ | The partnerOrderID is empty \ \ |\n| 400 | invalid_argument\ \ | invalid items | The items size is empty,\ \ invalid item value, missing required fields. Please check:
• For\ \ POS synced order, the item name is empty
• Both itemID and grabItemID\ \ is empty
• Item quantity is zero
• Item quantity is negative\ \ |\n| 400 | invalid_argument | Invalid item price \ \ | Please check:
• The item price is negative
• The item\ \ tax is negative |\n| 400 | invalid_argument\ \ | invalid modifiers | Please check:
• Modifier\ \ ID is empty
• Modifier name is empty
• Modifier quantity is\ \ zero
• Modifier quantity is negative |\n| 400 | invalid_argument\ \ | invalid modifier price | Please check:
• Modifier\ \ price is negative
• Modifier tax is negative \ \ |\n| 400 | invalid_argument | invalid price \ \ | The price-related info is wrong. Please check:
•\ \ price struct is empty
• total = 0
• eaterPayment = 0 |\n\ | 400 | invalid_argument | invalid price, price can't be negative \ \ | Please check:
• eaterPayment is negative
• Subtotal is negative
•\ \ Tax is negative
• depositAmountInMin is negative
• merchantChargeFeeInMin\ \ is negative
• OfflinePosDiscountInMin is negative |\n| 400 | invalid_argument\ \ | invalid price value, can't match with calculation | Subtotal + merchantChargeFeeInMin\ \ - OfflinePosDiscountInMin - depositAmountInMin Is NOT equal to eaterPayment\ \ |\n| 400 | invalid_argument | invalid exceed max price \ \ | eaterPayment exceed limit:
• SG: S$1000
• ID: Rp10,000,000
•\ \ PH: ₱15,000
• VN: ₫15,000,000
• TH: ฿300,000
• MY: RM1,500\ \ |\n| 400 | invalid_argument | invalid dine in info \ \ | dineInInfo is empty \ \ |\n| 400 | invalid_argument\ \ | invalid eater count | Please check:
• eater\ \ count is negative
• eater count is zero
• eater count > 100\ \ |\n| 400 | invalid_argument | invalid table\ \ id | tableID length > 100 \ \ |\n\ | 400 | invalid_argument | invalid too many payments \ \ | Total payments cannot above than 5 \ \ |\n| 400 | invalid_argument\ \ | invalid payment method name | Please check:
• Payment\ \ method is empty
• Payment method length > 20 \ \ |\n| 400 | invalid_argument | invalid payment method\ \ amount | Payment amount is negative \ \ |\n" "404": content: application/json: schema: $ref: '#/components/schemas/Error' description: "not_found\n| Code | Reason | Message \ \ | Description \ \ | \n| -----| ----------- | ----------------------------\ \ | -----------------------------------------------------------------------------------------------\ \ | \n| 404 | not_found | failed to get store info | The store\ \ is not found for the specified merchantID. \ \ |\n" "500": content: application/json: schema: $ref: '#/components/schemas/Error' description: "internal\n| Code | Reason | Message \ \ | Description \ \ | \n| -----| ----------- | ----------------------------\ \ | -----------------------------------------------------------------------------------------------\ \ | \n| 500 | internal | sync pos order failed | sync pos order\ \ failed, please try again later. \ \ |\n" summary: Sync POS order tags: - sync-pos-order x-codeSamples: - lang: cURL label: CLI source: | curl -X POST 'https://partner-api.grab.com/grabfood/partner/v1/pos/order' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "action": "BILL_GENERATED", "order": { "orderID": "123-CYNKLPCVRN5", "partnerOrderID": "partner-order-id", "merchantID": "1-CYNGRUNGSBCCC", "partnerMerchantID": "Partner-ABECU", "orderTime": "2019-05-24T05:06:00Z", "orderState": "COMPLETED", "currency": { "code": "SGD", "symbol": "S$", "exponent": 2 }, "items": [ { "id": "item-1", "grabItemID": "IDGFSTI000004qy1490868132306763533#0", "quantity": 1, "price": 2750, "tax": 250, "modifiers": [ { "id": "modifier-1", "price": 175, "tax": 50, "quantity": 1 } ] }, { "id": "item-2", "grabItemID": "IDGFSTI000004qy149ewes32312421412123#0", "quantity": 1, "price": 1100, "tax": 100, "modifiers": [ { "id": "modifier-2", "price": 200, "tax": 50, "quantity": 1 } ] } ], "price": { "subtotal": 3850, "tax": 300, "merchantChargeFeeInMin": 100, "depositAmountInMin": 200, "offlinePOSDiscountInMin": 550, "eaterPayment": 3200 }, "payments": [ { "method": "Visa", "fundingType": "credit", "amountInMin": 1000 } ], "dineIn": { "tableID": "1", "dinerCount": 2 } } }' /partner/v1/dinein/sto/qrcode: get: operationId: generate-sto-qr-code parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple - explode: true in: query name: merchantID required: true schema: $ref: '#/components/schemas/merchantID' style: form - explode: true in: query name: qrType required: true schema: $ref: '#/components/schemas/qrType' style: form - explode: true in: query name: tableNumber required: true schema: $ref: '#/components/schemas/tableNumber' style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/GenerateSTOQRCodeResponse' description: The API request is successfully processed. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: "invalid_argument\n| Code | Reason | Message \ \ | Description \ \ \ \ | \n| ---- | ---------------- | ------------------------------------------\ \ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 400 | invalid_argument | not enabled \ \ | The generate STO QR code feature is not enabled for the merchant,\ \ please reach out to the integration manager |\n" "404": content: application/json: schema: $ref: '#/components/schemas/Error' description: "not_found\n| Code | Reason | Message \ \ | Description \ \ | \n| -----| ----------- | ----------------------------\ \ | -----------------------------------------------------------------------------------------------\ \ | \n| 404 | not_found | failed to get store info | The store\ \ is not found for the specified merchantID. \ \ |\n" "500": content: application/json: schema: $ref: '#/components/schemas/Error' description: "internal\n| Code | Reason | Message \ \ | Description \ \ | \n| -----| ----------- | ----------------------------\ \ | -----------------------------------------------------------------------------------------------\ \ | \n| 500 | internal | generate QR failed | generate QR failed,\ \ please try again later. \ \ |\n" summary: Generate STO QR code tags: - generate-sto-qr-code x-codeSamples: - lang: cURL label: CLI source: | curl -X POST 'https://partner-api.grab.com/grabfood/partner/v1/pos/order' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "merchantID": "1-CYNGRUNGSBCCC", "qrType": "dynamic", "tableNumber": "B06" }' /partner/v1/orders/refund: post: operationId: refund-order parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/RefundOrderRequest' required: true responses: "204": description: Success. No content returned. "400": content: application/json: schema: $ref: '#/components/schemas/Error' description: "invalid_argument\n| Code | Reason | Message \ \ | Description \ \ \ \ | \n| ---- | ---------------- | ------------------------------------------\ \ | ---------------------------------------------------------------------------------------------------------\ \ | \n| 400 | invalid_argument | INVALID_ORDER \ \ | The orderID is not found in grab, or the order is not a ScanToOrder\ \ or offline POS order |\n| 400 | invalid_argument | ORDER_ALREADY_REFUND\ \ | The order already been refunded \ \ |\n| 400\ \ | invalid_argument | ORDER_WRONG_STATUS_FOR_REFUND | The\ \ order is not in COMPLETED status, can't be refunded \ \ |\n| 400 | invalid_argument | REACH_DAILY_THROTTLE\ \ | Reached daily refund limit \ \ |\n| 400\ \ | invalid_argument | TIME_OUT_REFUND_PERIOD | Exceed\ \ the refund time window \ \ |\n" "404": description: Not Found. Order doesn't exist. "500": description: Internal Server Error. Server encountered an unexpected error that prevented it from serving the API request. summary: Refund Order tags: - refund-order x-codeSamples: - lang: cURL label: CLI source: "curl -X POST 'https://partner-api.grab.com/grabfood/partner/v1/pos/order'\ \ \\\n-H 'Content-Type: application/json' \\\n-H 'Authorization: Bearer\ \ ' \\\n-d '{\n \n }'\n" /partner/v1/membership/notify: post: operationId: notify-membership-webview parameters: - description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple - description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/NotifyMembershipWebviewRequest' required: true responses: "204": description: Success. No content returned. "4xx": description: Failed. summary: Notify Membership tags: - notify-membership-webview x-codeSamples: - lang: cURL label: CLI source: | curl -X POST \ 'https://partner-api.grab.com/grabfood/partner/v1/membership/notify' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "memberID": "A12345689", "grabID": "b2abcd0b-69b0-3369-9603-68345a5f4f0a", "merchantID": "1-CYNGRUNGSBCCC", "action": "LINK" }' components: parameters: Authorization: description: Specify the generated authorization token of the bearer type. explode: false in: header name: Authorization required: true schema: example: Bearer type: string style: simple Content-Type: description: The content type of the request body. You must use `application/json` for this header as GrabFood API currently does not support other formats. explode: false in: header name: Content-Type required: true schema: example: application/json type: string style: simple MerchantID: description: The merchant's ID that is in GrabFood's database. explode: false in: path name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: simple MerchantIDinQuery: description: The merchant's ID that is in GrabFood's database. explode: true in: query name: merchantID required: true schema: example: 1-CYNGRUNGSBCCC type: string style: form schemas: PartnerOauthRequest: description: | Information about GrabFood getting an OAuth access token from partners. properties: client_id: description: The client identifier issued to obtain the OAuth access token. example: maxLength: 32 type: string client_secret: description: The client secret issued to obtain the OAuth access token. example: maxLength: 32 type: string grant_type: description: Refers to the way an application gets OAuth access token. example: client_credentials type: string scope: description: A space delimited list of partner scopes. example: food.partner_api type: string required: - client_id - client_secret - grant_type title: OauthRequestPartner type: object PartnerOauthResponse: properties: access_token: description: The OAuth 2.0 access token issued by the partner. example: eyJhbGciOiJSUzI1NiIsImtpZCI6Il9kZWZhdWx0IiwidHlwIjoiSldUIn0.eyJhdWQiOiI1NWRkNzEyZTViNWY0MDQyYTEzZjVkZTM0ZjM4NmVjMSIsImV4cCI6MTU2MDMwMDgzMSwiaWF0IjoxNTU5Njk2MDMxLCJpc3MiOiJodHRwczovL2lkcC5ncmFiLmNvbSIsImp0aSI6InFJZDB6Wmh1UkhxX0F4STZPdncwekEiLCJuYmYiOjE1NTk2OTU4NTEsInBpZCI6IjIwM2E5MmFmLTJmN2ItNDNjZS1hNTVmLTc5NGE4ZWQzZWE2NyIsInBzdCI6MSwic2NwIjoiW1wiYzE2MWM0NTdlZGVlNGExYmI4YTQwMzZmMDM5ZTYzZDZcIl0iLCJzdWIiOiJUV09fTEVHR0VEX09BVVRIIiwic3ZjIjoiIiwidGtfdHlwZSI6ImFjY2VzcyJ9.DEpeDobxey2YIEiAYWJ4zB5chCwGwc7Fojb8GEjnn4bORqb8-vDD5zQ-X7BRPRxAUv0MVam4q2annB4z4tEBNYYv1PW-w9UiJ-224kR8QJ1lWOsN9ZKibSWRMS6Mt9LN3r0_VSTDQB_X0QzMOOV00EeloMTbf6TKJ-3YQwDuD8GJeK1aNaLFmfcQC6avvyGcfO2VFnDDnLbDLmJ-oYQXn9Xb7SX_GDsnWUukxaOriQFW7PW0JVSvrAmq3lV5C1aioDI_qJD0MV065MJJT9xOVPIf_Myq5R6AHTF5Gon6ga3eA8fAYNpQ9Qbmq2jH-aFYBMcx27fL2-4vIhBCHKnhww type: string token_type: description: The type of token issued which is case insensitive. enum: - Bearer type: string expires_in: description: The access token lifespan in seconds. example: 604799 type: integer title: OauthResponse type: object GetMenuNewResponse: description: "" properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string currency: $ref: '#/components/schemas/currency' sellingTimes: description: "An array of sellingTimes JSON objects. Max 20 allowed. Refer\ \ to [Selling Times](#selling-times) for more information." items: $ref: '#/components/schemas/SellingTime' required: - endTime - id - name - serviceHours - startTime title: sellingTimes type: array categories: description: "An array of category JSON objects. Max 100 allowed. Refer\ \ to [Categories](#categories) for more information." items: $ref: '#/components/schemas/MenuCategory' title: categories type: array required: - categories - currency - sellingTimes title: Selling Time Based type: object GetMenuOldResponse: description: "" properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string currency: $ref: '#/components/schemas/currency' sections: description: "An array of section JSON objects. Max 7 allowed. Refer to\ \ [Sections](#sections) for more information." items: $ref: '#/components/schemas/MenuSection' title: sections type: array required: - currency - sections title: Section Based type: object MenuSyncWebhookRequest: description: | This request pushes the state of a menu sync operation. properties: requestID: description: | An universally unique identifier (UUID) string. Used to uniquely identify a webhook request. Partners should use this value to distinguish between different webhook requests. If two requests contain the same requestID, only the first request should be considered and later requests **must** be ignored or discarded. example: 6b5e362a-caa1-4858-908b-dae145d317bc type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string jobID: description: | An UUID string. Uniquely identifies a menu sync job. This can be found from the [Menu Update Notification](#tag/update-menu-noti) API response header. example: 36bb8bb8-4aef-4eca-bed9-fd5ae1e4dc11 type: string updatedAt: description: | Indicates the time of menu sync status change. This is based on ISO_8601/RFC3339. For example: `2022-07-29T15:55:59Z`. example: 2022-07-29T15:55:59Z type: string status: description: Indicates the state of the menu sync job. enum: - QUEUEING - PROCESSING - SUCCESS - FAILED type: string errors: description: A string array of errors that occurred during processing. items: type: string example: null type: array title: MenuSyncWebhookRequest type: object SubmitOrderRequest: description: | A JSON object containing the order information. This is only applicable for STO order in Push Order State Webhook example: scheduledTime: 2019-05-24T08:26:00Z receiver: address: poiSource: GRAB address: "123, Jalan Eater street, Batu Caves, 12345, Selangor" postcode: "123456" coordinates: latitude: 1.234567 longitude: 3.456789 unitNumber: 3-45 deliveryInstruction: turn left in 2 floor. poiID: poiID virtualContact: expiredAt: 2025-03-14T12:35:00Z phoneNumber: "+6591234567" PIN: "1234" status: ACTIVE name: Prashanth phones: "60122234704" orderID: 123-CYNKLPCVRN5 partnerMerchantID: Partner-ABECU cutlery: true payments: - method: visa fundingType: credit amountInMin: 100 - method: visa fundingType: credit amountInMin: 100 completeTime: 2019-05-24T05:26:00Z membershipID: 12345678Z paymentType: CASH orderState: DELIVERED shortOrderNumber: GF-123 orderTime: 2019-05-24T05:06:00Z submitTime: 2019-05-24T05:16:00Z campaigns: - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 discounts: - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher merchantID: 1-CYNGRUNGSBCCC price: basketPromo: 775 tax: 117 bcrsDepositFeeInMin: 20 merchantEarning: revenue: 200 netEarning: 150 commission: 10 mexFundDiscount: 40 smallOrderFee: 0 total: 2075 deliveryFee: 400 subtotal: 2550 serviceChargeFee: 0 merchantChargeFee: 0 grabFundPromo: 300 merchantFundPromo: 475 eaterPayment: 2175 orderReadyEstimation: maxOrderReadyTime: 2019-05-24T05:16:00Z newOrderReadyTime: 2019-05-24T05:26:00Z estimatedOrderReadyTime: 2019-05-24T05:16:00Z allowChange: true currency: symbol: S$ code: SGD exponent: 2 items: - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item promos: - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 dineIn: eaterCount: 2 tableID: "1" featureFlags: orderType: DeliveredByGrab orderAcceptedType: AUTO isMexEditOrder: false properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string shortOrderNumber: description: "The GrabFood short order number. This is unique for each merchant\ \ per day. Refer to FAQs for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: GF-123 type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string paymentType: description: "The payment method used. Refer to FAQs for more details about\ \ [paymentType](#section/Order/Does-the-paymentType-affect-partners)." enum: - CASH - CASHLESS type: string cutlery: description: "The boolean value to indicate whether cutlery are needed or\ \ not. Refer to FAQs for more details about [cutlery](#section/Order/What-do-the-true-or-false-values-mean-for-cutlery)." type: boolean orderTime: description: "The UTC time that a consumer places the order, based on ISO_8601/RFC3339." example: 2019-05-24T05:06:00Z type: string submitTime: description: "The order submit time, based on ISO_8601/RFC3339. `null` in\ \ Submit Order payload. Only present in the [List Orders](#tag/list-order)\ \ response." example: 2019-05-24T05:16:00Z format: date-time type: string completeTime: description: "The order complete time, based on ISO_8601/RFC3339. `null`\ \ in Submit Order payload. Only present in the [List Orders](#tag/list-order)\ \ response." example: 2019-05-24T05:26:00Z format: date-time type: string scheduledTime: description: "The order scheduled time, based on ISO_8601/RFC3339. Empty\ \ for non-scheduled orders." example: 2019-05-24T08:26:00Z type: string orderState: description: "The state of the order. Empty in Submit Order payload. Only\ \ present in the [List Orders](#tag/list-order) response. Refer to [Order\ \ States](#section/Order-states)." example: DELIVERED type: string currency: $ref: '#/components/schemas/currency' featureFlags: $ref: '#/components/schemas/orderFeatureFlags' items: description: 'The ordered items in an array of JSON Object. ' items: $ref: '#/components/schemas/OrderItem' title: orderItems type: array campaigns: description: | The campaigns that are applicable for the order. `null` when there is no campaign applied. Only campaigns that are funded by merchants will be sent. items: $ref: '#/components/schemas/OrderCampaign' nullable: true title: campaigns type: array promos: description: An array of promotion objects. `null` when there is no promo code applied. Only promotions that are funded by merchants will be sent. items: $ref: '#/components/schemas/OrderPromo' nullable: true title: promos type: array price: $ref: '#/components/schemas/orderPrice' dineIn: $ref: '#/components/schemas/dineIn' receiver: $ref: '#/components/schemas/receiver' orderReadyEstimation: $ref: '#/components/schemas/orderReadyEstimation' membershipID: description: Membership ID for loyalty project. Only present for loyalty program partners. Empty if not applicable. example: 12345678Z type: string discounts: description: | The discounts that are applicable for the paybill order in dineout STO case. `null` when there is no discount applied. This is only applicable for STO order items: $ref: '#/components/schemas/grabDiscount_1' nullable: true title: discounts type: array payments: description: An array of payment objects. `null` when there is no payment info from pos. This is only applicable for STO order items: $ref: '#/components/schemas/payment' nullable: true title: payments type: array required: - currency - cutlery - featureFlags - items - merchantID - orderID - orderTime - paymentType - price - shortOrderNumber title: Order type: object OrderStateRequest: description: | This request pushes the state of an order on GrabFood. properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string state: description: "The current order state. For takeaway orders, only `DELIVERED`\ \ and `CANCELLED` states are pushed." enum: - ACCEPTED - DRIVER_ALLOCATED - DRIVER_ARRIVED - COLLECTED - DELIVERED - BILL_PAID - COMPLETED - REFUNDED - FAILED - CANCELLED example: CANCELLED type: string driverETA: description: The driver's estimated of arrival (ETA) in seconds when the state is `DRIVER_ALLOCATED`. nullable: true type: integer example: null code: description: "The current order's sub-state. This is in free text so you\ \ should only use for reference. Grab may use this for troubleshooting.\ \ If you want some analysis, kindly use `state` instead." example: CANCELLED type: string message: description: Additional information to explain the current order state. May be system status or human entered message. example: We're too busy right now. type: string order: $ref: '#/components/schemas/order' required: - merchantID - orderID - state title: OrderStateRequest type: object BindMembershipNativeRequest: description: | This request submits membership binding request to partner. properties: grabID: description: The id used to identify an unique grab user. example: b2abcd0b-69b0-3369-9603-68345a5f4f0a type: string phoneNumber: description: Grab user phone number used to login. example: "60188888888" type: string required: - grabID title: Bind Membership Request type: object BindMembershipNativeResponse: description: | This response returns membershipID after membership binding is successful. properties: memberID: description: The unique member ID on the partner's database. example: A12345689 type: string required: - memberID title: Bind Membership Response type: object RegisterMembershipNativeRequest: description: | This request submits membership registration request to partner. properties: grabID: description: The id used to identify an unique grab user. example: b2abcd0b-69b0-3369-9603-68345a5f4f0a type: string phoneNumber: description: Grab user's phone number for registration. example: "60188888888" type: string name: description: Grab user's name for registration. example: John Doe type: string email: description: Grab user's email address for registration. example: john.doe8888@gmail.com type: string required: - grabID title: Register Membership Request type: object RegisterMembershipNativeResponse: description: | This response returns membershipID after membership binding is successful. properties: memberID: description: The unique member ID on the partner's database. example: A12345689 type: string required: - memberID title: Bind Membership Response type: object UnbindMembershipNativeRequest: description: | This request submits membership unbind request to partner. properties: memberID: description: The unique member ID on the partner's database. example: A12345689 type: string required: - memberID title: Unbind Membership Request type: object UnlinkMembershipWebviewRequest: description: | This request submits membership unbind request to partner. properties: memberID: description: The unique member ID on the partner's database. example: A12345689 type: string required: - memberID title: Unlink Membership Request type: object GetMembershipRequest: description: | This request submits membership unbind request to partner. properties: memberID: description: The unique member ID on the partner's database. example: A12345689 type: string required: - memberID title: Unbind Membership Request type: object GetMembershipNativeResponse: description: | This response returns membership detail. properties: membershipStatus: description: Status of the memberID. enum: - VALID - INVALID example: VALID type: string pointInfo: $ref: '#/components/schemas/GetMembershipNativeResponse_pointInfo' pointsExpireDate: description: Earliest points expiry date. In `yyyy-mm-dd` format example: 2024-06-24 type: string title: Get Membership (Native) type: object GetMembershipWebviewResponse: description: | This response returns membership detail. properties: membershipStatus: description: Status of the memberID. enum: - VALID - INVALID example: VALID type: string title: Get Membership (Webview) type: object GetRewardNativeRequest: description: | This request submits membership detail and order value to get reward calculation. properties: memberID: description: The unique member ID on the partner's database. example: A12345689 type: string merchantID: description: Grab merchant's ID. example: 1-CYNGRUNGSBCCC type: string items: items: $ref: '#/components/schemas/RewardItem' type: array orderValue: description: The post-discount order value. example: 25 format: int64 type: integer title: Get Reward Request type: object GetRewardNativeResponse: description: | This response returns reward points earn for this order. properties: points: description: The reward points earned in this purchase. example: 10 format: int64 type: integer required: - points title: Get Reward Response type: object PushIntegrationStatusWebhookRequest: description: "" properties: partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string grabMerchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string integrationStatus: description: | The store integration status. - `INACTIVE`: Merchant integration deactivated - `ACTIVE`: Merchant integration activated - `SYNCING`: Merchant integration is syncing - `FAILED`: Merchant integration has failed enum: - INACTIVE - ACTIVE - SYNCING - FAILED example: SYNCING type: string required: - grabMerchantID - integrationStatus - partnerMerchantID title: Integration Status type: object CreateSelfServeJourneyRequest: description: "" example: partner: merchantID: Partner-ABECU properties: partner: $ref: '#/components/schemas/CreateSelfServeJourneyRequest_partner' required: - partner title: Create self-serve journey type: object CreateSelfServeJourneyResponse: description: "" example: activationUrl: https://merchant.grab.com/self-serve-activation/xxxx/activate properties: activationUrl: description: A JSON object containing store information example: https://merchant.grab.com/self-serve-activation/xxxx/activate type: string required: - activationUrl title: Create self-serve journey type: object UpdateSpecialHourRequest: description: Object contains store special hours. example: specialOpeningHours: - metadata: description: New Year Opening Hours endDate: 2024-02-04 openingHours: openPeriodType: Period periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 startDate: 2024-02-01 - metadata: description: New Year Opening Hours endDate: 2024-02-04 openingHours: openPeriodType: Period periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 startDate: 2024-02-01 properties: specialOpeningHours: description: An array of objects contain store special hours. Max. 3 array elements. items: $ref: '#/components/schemas/specialOpeningHour' type: array required: - specialOpeningHours title: UpdateSpecialHourRequest type: object UpdateSpecialHourResponse: description: Object contain update store special hour response example: closeImmediately: false orderCount: 2 scheduledOrderCount: 0 errorReasons: - PendingOrders - PendingOrders properties: errorReasons: description: Error message when updating store delivery hour. `null` indicates no error. items: enum: - PendingOrders type: string nullable: true type: array orderCount: description: Total active order for the day. example: 2 format: int64 type: integer scheduledOrderCount: description: Total scheduled order during store close period. format: int64 type: integer closeImmediately: description: Indicate the store status after updating special hours. example: false type: boolean required: - closeImmediately - orderCount - scheduledOrderCount title: UpdateStoreSpecialHourResponse type: object UpdateDineInHourRequest: description: Object contains store dine-in hours. example: dineInHour: thu: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 properties: dineInHour: $ref: '#/components/schemas/storeHour' required: - dineInHour title: UpdateDineInHourRequest type: object UpdateDineInHourResponse: description: Object contain update store dine-in hour response example: errorReasons: - errorReasons - errorReasons properties: errorReasons: description: Error message when updating store dine-in hour. `null` indicates no error. items: type: string nullable: true type: array title: UpdateStoreDineInHourResponse type: object UpdateDeliveryHourRequest: description: Object contains store delivery hours. example: openingHour: thu: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 force: true properties: openingHour: $ref: '#/components/schemas/storeHour' force: description: To enable force update store delivery hours. Error will be returned if set to false while there is ongoing order. type: boolean required: - force - openingHour title: UpdateDeliveryHourRequest type: object UpdateDeliveryHourResponse: description: Object contain update store delivery hour response example: closeImmediately: false orderCount: 2 scheduledOrderCount: 0 errorReasons: - ClosingHoursIneffective - ClosingHoursIneffective properties: errorReasons: description: Error message when updating store delivery hour. `null` indicates no error. items: enum: - ClosingHoursIneffective - ForceUpdated - PendingScheduledOrders - PendingOrders type: string nullable: true type: array orderCount: description: Total active order for the day. example: 2 format: int64 type: integer scheduledOrderCount: description: Total scheduled order during store close period. format: int64 type: integer closeImmediately: description: Indicate the store status after updating delivery hours. example: false type: boolean required: - closeImmediately - orderCount - scheduledOrderCount title: UpdateStoreDeliveryHourResponse type: object StoreStatusResponse: description: Object contains store status info example: isInSpecialOpeningHourRange: false isOpen: false closeReason: mex_paused properties: closeReason: description: The code of store close reason. Blank indicates store is currently open. enum: - mex_paused - ops_paused - out_of_special_opening_hours - out_of_opening_hours - inactive - ops_paused_without_comm - restricted - suspended - parse_data_fail - "" type: string isInSpecialOpeningHourRange: description: Indicate whether the store is in special opening hour range. example: false type: boolean isOpen: description: Indicate whether the store is open. example: false type: boolean required: - closeReason - isInSpecialOpeningHourRange - isOpen title: StoreStatusResponse type: object Error: example: reason: error_reason message: error detail target: "" properties: target: description: Target of error example: "" type: string reason: description: The type of error. example: error_reason type: string message: description: The details of the error. example: error detail type: string title: Error type: object StoreHourResponse: description: Object contain store hour info example: openingHour: thu: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 specialOpeningHours: - metadata: description: New Year Opening Hours endDate: 2024-02-04 openingHours: openPeriodType: Period periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 startDate: 2024-02-01 - metadata: description: New Year Opening Hours endDate: 2024-02-04 openingHours: openPeriodType: Period periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 startDate: 2024-02-01 dineInHour: thu: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 properties: dineInHour: $ref: '#/components/schemas/storeHour' openingHour: $ref: '#/components/schemas/storeHour' specialOpeningHours: description: The store's special opening hours. items: $ref: '#/components/schemas/specialOpeningHour' type: array title: StoreHourResponse type: object GrabOauthRequest: description: | Information about the GrabFood client getting an OAuth 2.0 access token from partners. example: grant_type: client_credentials scope: food.partner_api client_secret: client_id: properties: client_id: description: The client identifier issued to the client to obtain the OAuth 2.0 access_token. example: maxLength: 32 type: string client_secret: description: The client secret issued to the client to obtain the OAuth 2.0 access_token. example: maxLength: 32 type: string grant_type: description: The grant type for the client to obtain the OAuth 2.0 access_token. example: client_credentials type: string scope: description: The scope for the client to obtain the OAuth 2.0 access_token. example: food.partner_api type: string required: - client_id - client_secret - grant_type - scope title: OauthRequestPartner type: object GrabOauthResponse: example: access_token: eyJhbGciOiJSUzI1NiIsImtpZCI6Il9kZWZhdWx0IiwidHlwIjoiSldUIn0.eyJhdWQiOiI1NWRkNzEyZTViNWY0MDQyYTEzZjVkZTM0ZjM4NmVjMSIsImV4cCI6MTU2MDMwMDgzMSwiaWF0IjoxNTU5Njk2MDMxLCJpc3MiOiJodHRwczovL2lkcC5ncmFiLmNvbSIsImp0aSI6InFJZDB6Wmh1UkhxX0F4STZPdncwekEiLCJuYmYiOjE1NTk2OTU4NTEsInBpZCI6IjIwM2E5MmFmLTJmN2ItNDNjZS1hNTVmLTc5NGE4ZWQzZWE2NyIsInBzdCI6MSwic2NwIjoiW1wiYzE2MWM0NTdlZGVlNGExYmI4YTQwMzZmMDM5ZTYzZDZcIl0iLCJzdWIiOiJUV09fTEVHR0VEX09BVVRIIiwic3ZjIjoiIiwidGtfdHlwZSI6ImFjY2VzcyJ9.DEpeDobxey2YIEiAYWJ4zB5chCwGwc7Fojb8GEjnn4bORqb8-vDD5zQ-X7BRPRxAUv0MVam4q2annB4z4tEBNYYv1PW-w9UiJ-224kR8QJ1lWOsN9ZKibSWRMS6Mt9LN3r0_VSTDQB_X0QzMOOV00EeloMTbf6TKJ-3YQwDuD8GJeK1aNaLFmfcQC6avvyGcfO2VFnDDnLbDLmJ-oYQXn9Xb7SX_GDsnWUukxaOriQFW7PW0JVSvrAmq3lV5C1aioDI_qJD0MV065MJJT9xOVPIf_Myq5R6AHTF5Gon6ga3eA8fAYNpQ9Qbmq2jH-aFYBMcx27fL2-4vIhBCHKnhww token_type: Bearer expires_in: 604799 properties: access_token: description: The OAuth 2.0 access token issued by the partner. example: eyJhbGciOiJSUzI1NiIsImtpZCI6Il9kZWZhdWx0IiwidHlwIjoiSldUIn0.eyJhdWQiOiI1NWRkNzEyZTViNWY0MDQyYTEzZjVkZTM0ZjM4NmVjMSIsImV4cCI6MTU2MDMwMDgzMSwiaWF0IjoxNTU5Njk2MDMxLCJpc3MiOiJodHRwczovL2lkcC5ncmFiLmNvbSIsImp0aSI6InFJZDB6Wmh1UkhxX0F4STZPdncwekEiLCJuYmYiOjE1NTk2OTU4NTEsInBpZCI6IjIwM2E5MmFmLTJmN2ItNDNjZS1hNTVmLTc5NGE4ZWQzZWE2NyIsInBzdCI6MSwic2NwIjoiW1wiYzE2MWM0NTdlZGVlNGExYmI4YTQwMzZmMDM5ZTYzZDZcIl0iLCJzdWIiOiJUV09fTEVHR0VEX09BVVRIIiwic3ZjIjoiIiwidGtfdHlwZSI6ImFjY2VzcyJ9.DEpeDobxey2YIEiAYWJ4zB5chCwGwc7Fojb8GEjnn4bORqb8-vDD5zQ-X7BRPRxAUv0MVam4q2annB4z4tEBNYYv1PW-w9UiJ-224kR8QJ1lWOsN9ZKibSWRMS6Mt9LN3r0_VSTDQB_X0QzMOOV00EeloMTbf6TKJ-3YQwDuD8GJeK1aNaLFmfcQC6avvyGcfO2VFnDDnLbDLmJ-oYQXn9Xb7SX_GDsnWUukxaOriQFW7PW0JVSvrAmq3lV5C1aioDI_qJD0MV065MJJT9xOVPIf_Myq5R6AHTF5Gon6ga3eA8fAYNpQ9Qbmq2jH-aFYBMcx27fL2-4vIhBCHKnhww type: string token_type: description: The type of token issued which is case insensitive. example: Bearer type: string expires_in: description: The access token lifespan in seconds. The token is reused till it expires - default is 604799 (7 days). example: 604799 type: integer title: OauthResponse type: object UpdateMenuItem: description: | Information about the GrabFood client updating their food menu. properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string field: description: The record type that you want to update. enum: - ITEM example: ITEM type: string id: description: "The record's ID on the partner system. For example, the item\ \ id in case type is ITEM." example: ITEM-1 type: string price: description: The record's price in minor unit format. example: 200 format: int64 type: integer availableStatus: description: "The record's availableStatus. \n\nNote: In order to set an\ \ item as \"UNAVAILABLE\", it is required to update both the `availableStatus`\ \ and `maxStock` fields, whereby the `maxStock` value should be set to\ \ 0.\n" enum: - AVAILABLE - UNAVAILABLE - UNAVAILABLETODAY type: string maxStock: description: | Available stocks under inventory for this item. Auto reduce when there is order placed for this item. The value **must not exceed** `9999999`. Note: It is necessary to set `maxStock` to 0 if the `availableStatus` of the item is "UNAVAILABLE". Item will be set to "AVAILABLE" if `maxStock` > 0. example: 10 format: int64 type: integer advancedPricings: description: | Price configuration (in minor unit) for different service, order type and channel combination. If a service type does not have a specified price, it will utilize the default price of the item. items: $ref: '#/components/schemas/UpdateAdvancedPricing' type: array purchasabilities: description: | Purchasability is set to true by default for all service type, unless it is explicitly set to false. Modifier will reuse it’s item’s purchasability. items: $ref: '#/components/schemas/UpdatePurchasability' type: array required: - field - id - merchantID title: Update Item type: object UpdateMenuModifier: description: | Information about the GrabFood client updating their food menu. properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string field: description: The record type that you want to update. enum: - MODIFIER example: MODIFIER type: string id: description: "The record's ID on the partner system. For example, the modifier\ \ id in case type is MODIFIER." example: MODIFIER-1 type: string price: description: The record's price in minor unit format. example: 100 format: int64 type: integer name: description: '**Only required when updating modifiers.** The record''s name. Used as identifier to locate the correct record.' example: modifier-1 type: string availableStatus: description: The record's availableStatus. enum: - AVAILABLE - UNAVAILABLE - UNAVAILABLETODAY type: string isFree: description: | Allows the modifier's price to be explicitly set as zero. Possible values are as follows: * `isFree` && `price == 0` sets the modifier's price to zero. * `isFree` && `price > 0` returns an error message that "price cannot be set to > 0, if modifier is free”. * `!isFree` && `price > 0` sets the modifier's price to the defined price. * `!isFree` && `price == 0` does not update the modifier's price and reuses the existing price. example: false type: boolean advancedPricings: description: | Price configuration (in minor unit) for different service, order type and channel combination. If a service type does not have a specified price, it will utilize the default price of the item. items: $ref: '#/components/schemas/UpdateAdvancedPricing' type: array required: - field - id - merchantID - name title: Update Modifier type: object BatchUpdateMenuItem: description: | Information about the GrabFood client updating their food menu. example: menuEntities: - availableStatus: AVAILABLE advancedPricings: - price: 100 key: Delivery_OnDemand_GrabApp - price: 100 key: Delivery_OnDemand_GrabApp purchasabilities: - purchasable: true key: Delivery_OnDemand_GrabApp - purchasable: true key: Delivery_OnDemand_GrabApp price: 200 maxStock: 10 id: ITEM-1 - availableStatus: AVAILABLE advancedPricings: - price: 100 key: Delivery_OnDemand_GrabApp - price: 100 key: Delivery_OnDemand_GrabApp purchasabilities: - purchasable: true key: Delivery_OnDemand_GrabApp - purchasable: true key: Delivery_OnDemand_GrabApp price: 200 maxStock: 10 id: ITEM-1 field: ITEM merchantID: 1-CYNGRUNGSBCCC properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string field: description: The record type that you want to update. enum: - ITEM example: ITEM type: string menuEntities: description: | The items in an array of JSON Object. items: $ref: '#/components/schemas/MenuEntity' type: array required: - field - merchantID title: Batch Update Item type: object BatchUpdateMenuResponse: example: merchantID: 1-CYNGRUNGSBCCC errors: - errMsg: get food item fail entityID: ITEM-1 - errMsg: get food item fail entityID: ITEM-1 status: properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string status: description: The status of this request. enum: - success - partial success - fail example: type: string errors: description: The error messages when batch update menu record was partial success/fail. `null` when the request was success. items: $ref: '#/components/schemas/MenuEntityError' nullable: true type: array title: Batch Update Menu Record Response type: object UpdateMenuNotifRequest: description: | This request notifies GrabFood about the partner's updated food menu. example: merchantID: 1-CYNGRUNGSBCCC properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string required: - merchantID title: UpdateMenuNotifRequest type: object MenuSyncResponse: description: "" example: updatedTime: 2020-07-09T09:54:01.423512013Z code: Success createdTime: 2020-07-09T09:53:59.783632615Z errors: - error message 1 - error message 1 sections: - serviceHours: errors: - error 1 - error 1 id: section_externalID1 categories: - id: category_externalID1 items: - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 errors: - error 2 - error 2 - id: category_externalID1 items: - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 errors: - error 2 - error 2 errors: - error 1 - error 1 - serviceHours: errors: - error 1 - error 1 id: section_externalID1 categories: - id: category_externalID1 items: - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 errors: - error 2 - error 2 - id: category_externalID1 items: - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 errors: - error 2 - error 2 errors: - error 1 - error 1 properties: createdTime: description: The Unix time the specified menu was created in GrabFood's database. example: 2020-07-09T09:53:59.783632615Z format: date-time type: string updatedTime: description: The Unix time the specified menu was created in GrabFood's database. example: 2020-07-09T09:54:01.423512013Z format: date-time type: string code: description: "The status code for this request. See [Menu sync response\ \ statuses](#section/Menu-sync-response-statuses) for more information." enum: - Success - PartialSuccess - InQueuing type: string errors: description: An array of strings of error message. items: example: error message 1 type: string nullable: true type: array example: null sections: items: $ref: '#/components/schemas/menuSyncFail' nullable: true type: array example: null required: - code - createdTime - updatedTime title: MenuSyncSuccess type: object AcceptOrderRequest: description: | The manual acceptance or rejection of an order on GrabFood. example: toState: Accepted orderID: 123-CYNKLPCVRN5 properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string toState: description: The order's updated state. enum: - Accepted - Rejected type: string required: - orderID - toState title: AcceptOrderRequest type: object date: description: The date of your report. Required if orderIDs is not provided. example: 2020-01-20 title: date type: string ListOrdersResponse: description: "" example: more: true orders: - scheduledTime: 2019-05-24T08:26:00Z receiver: address: poiSource: GRAB address: "123, Jalan Eater street, Batu Caves, 12345, Selangor" postcode: "123456" coordinates: latitude: 1.234567 longitude: 3.456789 unitNumber: 3-45 deliveryInstruction: turn left in 2 floor. poiID: poiID virtualContact: expiredAt: 2025-03-14T12:35:00Z phoneNumber: "+6591234567" PIN: "1234" status: ACTIVE name: Prashanth phones: "60122234704" orderID: 123-CYNKLPCVRN5 partnerMerchantID: Partner-ABECU cutlery: true payments: - method: visa fundingType: credit amountInMin: 100 - method: visa fundingType: credit amountInMin: 100 completeTime: 2019-05-24T05:26:00Z membershipID: 12345678Z paymentType: CASH orderState: DELIVERED shortOrderNumber: GF-123 orderTime: 2019-05-24T05:06:00Z submitTime: 2019-05-24T05:16:00Z campaigns: - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 discounts: - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher merchantID: 1-CYNGRUNGSBCCC price: basketPromo: 775 tax: 117 bcrsDepositFeeInMin: 20 merchantEarning: revenue: 200 netEarning: 150 commission: 10 mexFundDiscount: 40 smallOrderFee: 0 total: 2075 deliveryFee: 400 subtotal: 2550 serviceChargeFee: 0 merchantChargeFee: 0 grabFundPromo: 300 merchantFundPromo: 475 eaterPayment: 2175 orderReadyEstimation: maxOrderReadyTime: 2019-05-24T05:16:00Z newOrderReadyTime: 2019-05-24T05:26:00Z estimatedOrderReadyTime: 2019-05-24T05:16:00Z allowChange: true currency: symbol: S$ code: SGD exponent: 2 items: - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item promos: - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 dineIn: eaterCount: 2 tableID: "1" featureFlags: orderType: DeliveredByGrab orderAcceptedType: AUTO isMexEditOrder: false - scheduledTime: 2019-05-24T08:26:00Z receiver: address: poiSource: GRAB address: "123, Jalan Eater street, Batu Caves, 12345, Selangor" postcode: "123456" coordinates: latitude: 1.234567 longitude: 3.456789 unitNumber: 3-45 deliveryInstruction: turn left in 2 floor. poiID: poiID virtualContact: expiredAt: 2025-03-14T12:35:00Z phoneNumber: "+6591234567" PIN: "1234" status: ACTIVE name: Prashanth phones: "60122234704" orderID: 123-CYNKLPCVRN5 partnerMerchantID: Partner-ABECU cutlery: true payments: - method: visa fundingType: credit amountInMin: 100 - method: visa fundingType: credit amountInMin: 100 completeTime: 2019-05-24T05:26:00Z membershipID: 12345678Z paymentType: CASH orderState: DELIVERED shortOrderNumber: GF-123 orderTime: 2019-05-24T05:06:00Z submitTime: 2019-05-24T05:16:00Z campaigns: - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 discounts: - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher merchantID: 1-CYNGRUNGSBCCC price: basketPromo: 775 tax: 117 bcrsDepositFeeInMin: 20 merchantEarning: revenue: 200 netEarning: 150 commission: 10 mexFundDiscount: 40 smallOrderFee: 0 total: 2075 deliveryFee: 400 subtotal: 2550 serviceChargeFee: 0 merchantChargeFee: 0 grabFundPromo: 300 merchantFundPromo: 475 eaterPayment: 2175 orderReadyEstimation: maxOrderReadyTime: 2019-05-24T05:16:00Z newOrderReadyTime: 2019-05-24T05:26:00Z estimatedOrderReadyTime: 2019-05-24T05:16:00Z allowChange: true currency: symbol: S$ code: SGD exponent: 2 items: - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item promos: - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 dineIn: eaterCount: 2 tableID: "1" featureFlags: orderType: DeliveredByGrab orderAcceptedType: AUTO isMexEditOrder: false properties: more: description: "The boolean value to indicate if there is more order data.\ \ If `true`, you can continue requesting with page+1." type: boolean orders: items: $ref: '#/components/schemas/order' type: array title: ListOrdersResponse type: object orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs for\ \ more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string EditOrderRequest: description: | Information about editing an existing order on GrabFood. example: depositAmountInMin: 100 onlyRecalculate: false orderID: 123-CYNKLPCVRN5 items: - isExternalItemID: false itemID: IDGFSTI000004qy1490868132306763533#0 quantity: 1 modifiers: - quantity: 1 id: MOD_A - quantity: 1 id: MOD_A status: UPDATED - isExternalItemID: false itemID: IDGFSTI000004qy1490868132306763533#0 quantity: 1 modifiers: - quantity: 1 id: MOD_A - quantity: 1 id: MOD_A status: UPDATED offlinePOSDiscountInMin: 200 properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string items: description: "Specify the array of all items in the order, including deleted,\ \ added, updated and unchanged items." items: $ref: '#/components/schemas/EditOrderItem' type: array onlyRecalculate: description: | This parameter specifies whether to recalculate the edited order without submitting it. It is intended for testing purposes only. This parameter is set to false by default, which means the edited order will be recalculated and re-submitted to partners. example: false type: boolean depositAmountInMin: description: The deposit amount in minor unit in POS system. This is only applicable for STO order example: 100 format: int64 type: integer offlinePOSDiscountInMin: description: The POS side discount amount in minor unit. This is only applicable for STO order example: 200 format: int64 type: integer required: - items - orderID title: EditOrderRequest type: object EditOrderV2Response: description: "" example: scheduledTime: 2019-05-24T08:26:00Z receiver: "{}" orderID: 123-CYNKLPCVRN5 partnerMerchantID: Partner-ABECU cutlery: true payments: - payments - payments completeTime: 2019-05-24T05:26:00Z membershipID: 12345678Z paymentType: CASH orderState: DELIVERED shortOrderNumber: GF-123 orderTime: 2019-05-24T05:06:00Z submitTime: 2019-05-24T05:16:00Z campaigns: - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 discounts: - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher merchantID: 1-CYNGRUNGSBCCC price: basketPromo: 775 tax: 117 bcrsDepositFeeInMin: 20 merchantEarning: revenue: 200 netEarning: 150 commission: 10 mexFundDiscount: 40 smallOrderFee: 0 total: 2075 deliveryFee: 400 subtotal: 2550 serviceChargeFee: 0 merchantChargeFee: 0 grabFundPromo: 300 merchantFundPromo: 475 eaterPayment: 2175 orderReadyEstimation: maxOrderReadyTime: 2019-05-24T05:16:00Z newOrderReadyTime: 2019-05-24T05:26:00Z estimatedOrderReadyTime: 2019-05-24T05:16:00Z allowChange: true currency: symbol: S$ code: SGD exponent: 2 items: - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item promos: - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 dineIn: eaterCount: 2 tableID: "1" featureFlags: orderType: DeliveredByGrab orderAcceptedType: AUTO isMexEditOrder: false properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string shortOrderNumber: description: "The GrabFood short order number. This is unique for each merchant\ \ per day. Refer to FAQs for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: GF-123 type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string paymentType: description: "The payment method used. Refer to FAQs for more details about\ \ [paymentType](#section/Order/Does-the-paymentType-affect-partners)." enum: - CASH - CASHLESS type: string cutlery: description: "The boolean value to indicate whether cutlery are needed or\ \ not. Refer to FAQs for more details about [cutlery](#section/Order/What-do-the-true-or-false-values-mean-for-cutlery)." type: boolean orderTime: description: "The UTC time that a consumer places the order, based on ISO_8601/RFC3339." example: 2019-05-24T05:06:00Z type: string submitTime: description: "The order submit time, based on ISO_8601/RFC3339. `null` in\ \ EditOrder V2 response. Only present in the [List Orders](#tag/list-order)\ \ response." example: 2019-05-24T05:16:00Z format: date-time type: string completeTime: description: "The order complete time, based on ISO_8601/RFC3339. `null`\ \ in EditOrder V2 response. Only present in the [List Orders](#tag/list-order)\ \ response." example: 2019-05-24T05:26:00Z format: date-time type: string scheduledTime: description: "The order scheduled time, based on ISO_8601/RFC3339. Empty\ \ for non-scheduled orders." example: 2019-05-24T08:26:00Z type: string orderState: description: "The state of the order. Empty in EditOrder V2 response. Only\ \ present in the [List Orders](#tag/list-order) response. Refer to [Order\ \ States](#section/Order-states)." example: DELIVERED type: string currency: $ref: '#/components/schemas/currency' featureFlags: $ref: '#/components/schemas/orderFeatureFlags' items: description: 'The ordered items in an array of JSON Object. ' items: $ref: '#/components/schemas/OrderItem' title: orderItems type: array campaigns: description: | The campaigns that are applicable for the order. `null` when there is no campaign applied. Only campaigns that are funded by merchants will be sent. items: $ref: '#/components/schemas/OrderCampaign' nullable: true title: campaigns type: array promos: description: An array of promotion objects. `null` when there is no promo code applied. Only promotions that are funded by merchants will be sent. items: $ref: '#/components/schemas/OrderPromo' nullable: true title: promos type: array price: $ref: '#/components/schemas/orderPrice' dineIn: $ref: '#/components/schemas/dineIn' receiver: description: "This field is set to `null` in the EditOrder V2 response.\ \ Refer to the [Submit Order](#tag/submit-order-webhook/operation/submit-order-webhook)\ \ payload for the complete receiver information." type: object orderReadyEstimation: $ref: '#/components/schemas/orderReadyEstimation' membershipID: description: Membership ID for loyalty project. Only present for loyalty program partners. Empty if not applicable. example: 12345678Z type: string discounts: description: | The discounts that are applicable for the paybill order in dineout STO case. `null` when there is no discount applied. This is only applicable for STO order items: $ref: '#/components/schemas/grabDiscount_1' nullable: true title: discounts type: array payments: description: "This field is set to `null` in the EditOrder V2 response.\ \ Refer to the [Submit Order](#tag/submit-order-webhook/operation/submit-order-webhook)\ \ payload for the complete payment details." items: description: TODO default missing array inner type to string type: string type: array title: EditOrderV2Response type: object MarkOrderRequest: description: | This request marks an order as ready for delivery or completed on GrabFood. example: orderID: 123-CYNKLPCVRN5 markStatus: 0 properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string markStatus: description: "The status to be marked accordingly. \n* `1` - mark order\ \ as ready \n* `2` - mark order as completed and only applicable to **dine-in**\ \ orders\n" enum: - 1 - 2 type: integer required: - markStatus - orderID title: MarkOrderRequest type: object OrderDeliveryRequest: description: | This request marks an order as delivered on GrabFood. example: fromState: Collect toState: Delivered orderID: 123-CYNKLPCVRN5 properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string fromState: description: Specify the order's initial state. enum: - Accepted - FindDriver - Collected example: Collect type: string toState: description: Specify the order's new state. enum: - FindDriver - Collected - Delivered example: Delivered type: string required: - fromState - orderID - toState title: OrderDeliveryRequest type: object NewOrderTimeRequest: description: | This request updates an order with a new ready time on GrabFood. example: orderID: 123-CYNKLPCVRN5 newOrderReadyTime: 2019-05-24T05:16:00Z properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string newOrderReadyTime: description: "The new order ready time for this order, based on ISO_8601/RFC3339." example: 2019-05-24T05:16:00Z format: date-time type: string required: - newOrderReadyTime - orderID title: NewOrderTimeRequest type: object CheckOrderCancelableResponse: description: "" example: limitTimes: 0 nonCancellationReason: GKMM (Grab Kitchen Mix & Match) orders cannot be cancelled cancelAble: true limitType: not approaching limit cancelReasons: - reason: Items are unavailable code: 6 - reason: Items are unavailable code: 6 properties: cancelAble: description: The boolean value to indicate whether an order can be cancelled. example: true type: boolean nonCancellationReason: description: The reason for the order to be non-cancelable. enum: - GKMM (Grab Kitchen Mix & Match) orders cannot be cancelled - Self pick-up orders cannot be cancelled - Scheduled orders cannot be cancelled - Daily cancellation limit reached - Weekly cancellation limit reached - Monthly cancellation limit reached - Driver has been allocated for too long - Driver App version is outdated preventing cancellation - Order has not yet been allocated preventing cancellation - The current status of the order does not allow cancellation - Default Error - "" type: string example: null limitType: $ref: '#/components/schemas/cancelOrderLimitType' limitTimes: description: "The remaining cancellation quota for the merchant. A value\ \ is only returned when the nearest remaining cancellation limit is approaching,\ \ else it returns 0." format: int64 title: cancelOrderLimitTimes type: integer cancelReasons: description: An array of cancel order reasons JSON objects. items: $ref: '#/components/schemas/CancelReason' title: cancelReasons type: array title: CheckOrderCancelableResponse type: object CancelOrderRequest: description: | This request cancels an order on GrabFood. example: orderID: 123-CYNKLPCVRN5 merchantID: 1-CYNGRUNGSBCCC cancelCode: 0 properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string cancelCode: $ref: '#/components/schemas/cancelCode' required: - cancelCode - merchantID - orderID title: CancelOrderRequest type: object CancelOrderResponse: description: "" example: limitTimes: 0 limitType: not approaching limit properties: limitType: $ref: '#/components/schemas/cancelOrderLimitType' limitTimes: description: "The remaining cancellation quota for the merchant. A value\ \ is only returned when the nearest remaining cancellation limit is approaching,\ \ else it returns 0." format: int64 title: cancelOrderLimitTimes type: integer title: CancelOrderResponse type: object PauseStoreRequest: description: | This request pauses a store temporarily for (30 minutes/1 hour/24 hours) or unpauses a store on GrabFood. example: duration: 30m merchantID: 1-CYNGRUNGSBCCC isPause: true properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string isPause: description: Boolean value to pause or unpause store. type: boolean duration: description: The duration to pause the store. Only required when `isPause=true`. enum: - 30m - 1h - 24h type: string required: - isPause - merchantID title: PauseStoreRequest type: object ListCampaignResponse: description: "" example: ongoing: - quotas: totalCountPerUser: 2 totalCount: 10 createdBy: Merchant merchantID: 1-CYNGRUNGSBCCC customTag: "" name: $4 off with min $10 order for all users within weekday discount: cap: 5 scope: type: items objectIDs: - - type: percentage value: 10 id: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 conditions: eaterType: all minBasketAmount: 10 startTime: 2021-09-23T03:30:00Z workingHour: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 endTime: 2021-09-23T06:00:00Z bundleQuantity: 0 - quotas: totalCountPerUser: 2 totalCount: 10 createdBy: Merchant merchantID: 1-CYNGRUNGSBCCC customTag: "" name: $4 off with min $10 order for all users within weekday discount: cap: 5 scope: type: items objectIDs: - - type: percentage value: 10 id: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 conditions: eaterType: all minBasketAmount: 10 startTime: 2021-09-23T03:30:00Z workingHour: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 endTime: 2021-09-23T06:00:00Z bundleQuantity: 0 upcoming: - quotas: totalCountPerUser: 2 totalCount: 10 createdBy: Merchant merchantID: 1-CYNGRUNGSBCCC customTag: "" name: $4 off with min $10 order for all users within weekday discount: cap: 5 scope: type: items objectIDs: - - type: percentage value: 10 id: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 conditions: eaterType: all minBasketAmount: 10 startTime: 2021-09-23T03:30:00Z workingHour: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 endTime: 2021-09-23T06:00:00Z bundleQuantity: 0 - quotas: totalCountPerUser: 2 totalCount: 10 createdBy: Merchant merchantID: 1-CYNGRUNGSBCCC customTag: "" name: $4 off with min $10 order for all users within weekday discount: cap: 5 scope: type: items objectIDs: - - type: percentage value: 10 id: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 conditions: eaterType: all minBasketAmount: 10 startTime: 2021-09-23T03:30:00Z workingHour: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 endTime: 2021-09-23T06:00:00Z bundleQuantity: 0 properties: ongoing: items: $ref: '#/components/schemas/campaign' type: array upcoming: items: $ref: '#/components/schemas/campaign' type: array title: ListCampaignResponse type: object CreateCampaignRequest: description: | This request creates a campaign for your GrabFood store. example: quotas: totalCountPerUser: 2 totalCount: 10 merchantID: 1-CYNGRUNGSBCCC customTag: "" name: $4 off with min $10 order for all users within weekday discount: cap: 5 scope: type: items objectIDs: - - type: percentage value: 10 conditions: eaterType: all minBasketAmount: 10 startTime: 2021-09-23T03:30:00Z workingHour: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 endTime: 2021-09-23T06:00:00Z bundleQuantity: 0 properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string name: description: The campaign's name. example: $4 off with min $10 order for all users within weekday maxLength: 256 title: name type: string quotas: $ref: '#/components/schemas/campaignQuotas' conditions: $ref: '#/components/schemas/campaignConditions' discount: $ref: '#/components/schemas/campaignDiscount' customTag: description: Specify the tag for custom bundle offer campaign. Only whitelisted partner is supported as of now. example: "" maxLength: 22 title: customTag type: string required: - conditions - discount - merchantID - name title: CreateCampaignRequest type: object CreateCampaignResponse: description: "" example: id: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 properties: id: description: The campaign's ID. example: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 title: id type: string title: CreateCampaignResponse type: object campaignId: description: The campaign's ID. example: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 title: id type: string UpdateCampaignRequest: description: | This request updates a campaign for your GrabFood store. example: quotas: totalCountPerUser: 2 totalCount: 10 merchantID: 1-CYNGRUNGSBCCC customTag: "" name: $4 off with min $10 order for all users within weekday discount: cap: 5 scope: type: items objectIDs: - - type: percentage value: 10 conditions: eaterType: all minBasketAmount: 10 startTime: 2021-09-23T03:30:00Z workingHour: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 endTime: 2021-09-23T06:00:00Z bundleQuantity: 0 properties: merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string name: description: The campaign's name. example: $4 off with min $10 order for all users within weekday maxLength: 256 title: name type: string quotas: $ref: '#/components/schemas/campaignQuotas' conditions: $ref: '#/components/schemas/campaignConditions' discount: $ref: '#/components/schemas/campaignDiscount' customTag: description: Specify the tag for custom bundle offer campaign. Only whitelisted partner is supported as of now. example: "" maxLength: 22 title: customTag type: string title: CreateCampaignRequest type: object voucherCode: description: A short code for the dine-in voucher purchased by the user. example: GV-OQBJDKZH maxLength: 11 title: voucherCode type: string certificateID: description: "This certificateID is decoded from scanning the QR code, and 1:1\ \ mapping with `voucherCode`." example: PPD#h9YygDAZhWkZVD50bT_xnM0bEFqTayuOdmHEhqJ4YAeDFPD3OKsEVg== title: certificateID type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string GetDineInVoucherResponse: description: "" example: voucherStatus: ACTIVE merchantID: 1-CYNGRUNGSBCCC voucher: discountedPrice: S$1.00 originalPrice: S$10.00 voucherType: CASH descriptionInfo: text: Dine-in cash voucher for use in a transaction. title: S$10.00 Dine-in Voucher campaignID: 1-CYNGRUNGSBCCC-CZNZFFL1G8KKLX-94794295 certificateID: PPD#h9YygDAZhWkZVD50bT_xnM0bEFqTayuOdmHEhqJ4YAeDFPD3OKsEVg== voucherCode: GV-OQBJDKZH properties: certificateID: description: "This certificateID is decoded from scanning the QR code, and\ \ 1:1 mapping with `voucherCode`." example: PPD#h9YygDAZhWkZVD50bT_xnM0bEFqTayuOdmHEhqJ4YAeDFPD3OKsEVg== title: certificateID type: string voucherCode: description: A short code for the dine-in voucher purchased by the user. example: GV-OQBJDKZH maxLength: 11 title: voucherCode type: string voucher: $ref: '#/components/schemas/voucher' voucherStatus: description: The status of the dine-in voucher purchased. Only active voucher is eligible for redemption. enum: - ACTIVE - REDEEMED - EXPIRED - REFUNDED example: ACTIVE type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string campaignID: description: The dine-in voucher campaign's ID in GrabFood's database. example: 1-CYNGRUNGSBCCC-CZNZFFL1G8KKLX-94794295 title: campaignID type: string title: GetDineInVoucherResponse type: object RedeemDineInVoucherRequest: description: | Dine in voucher redemption example: merchantID: 1-CYNGRUNGSBCCC certificateID: PPD#h9YygDAZhWkZVD50bT_xnM0bEFqTayuOdmHEhqJ4YAeDFPD3OKsEVg== properties: certificateID: description: "This certificateID is decoded from scanning the QR code, and\ \ 1:1 mapping with `voucherCode`." example: PPD#h9YygDAZhWkZVD50bT_xnM0bEFqTayuOdmHEhqJ4YAeDFPD3OKsEVg== title: certificateID type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string required: - certificateID - merchantID title: RedeemDineInVoucherRequest type: object RedeemDineInVoucherResponse: description: "" example: merchantID: 1-CYNGRUNGSBCCC voucher: discountedPrice: S$1.00 originalPrice: S$10.00 voucherType: CASH descriptionInfo: text: Dine-in cash voucher for use in a transaction. title: S$10.00 Dine-in Voucher campaignID: 1-CYNGRUNGSBCCC-CZNZFFL1G8KKLX-94794295 certificateID: PPD#h9YygDAZhWkZVD50bT_xnM0bEFqTayuOdmHEhqJ4YAeDFPD3OKsEVg== voucherCode: GV-OQBJDKZH redeemResult: code: "" success: true properties: certificateID: description: "This certificateID is decoded from scanning the QR code, and\ \ 1:1 mapping with `voucherCode`." example: PPD#h9YygDAZhWkZVD50bT_xnM0bEFqTayuOdmHEhqJ4YAeDFPD3OKsEVg== title: certificateID type: string voucherCode: description: A short code for the dine-in voucher purchased by the user. example: GV-OQBJDKZH maxLength: 11 title: voucherCode type: string voucher: $ref: '#/components/schemas/voucher' redeemResult: $ref: '#/components/schemas/redeemResult' merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string campaignID: description: The dine-in voucher campaign's ID in GrabFood's database. example: 1-CYNGRUNGSBCCC-CZNZFFL1G8KKLX-94794295 title: campaignID type: string title: RedeemDineInVoucherResponse type: object SyncPOSOrderRequest: description: The syncPOSOrder API allows POS to sync its order data with Grab and generate a PayBill QR. example: action: BILL_GENERATED order: orderTime: 2019-05-24T05:06:00Z orderID: 106351684-C7LYVB6WGBDUV2 partnerOrderID: POS-123 merchantID: 5-XVGDSSTR34D partnerMerchantID: POS-SVCDGDTA price: depositAmountInMin: 5 subtotal: 0 tax: 6 offlinePOSDiscountInMin: 5 billRoundingInMin: 2 eaterPayment: 7 merchantChargeFeeInMin: 1 payments: - method: visa fundingType: credit amountInMin: 100 - method: visa fundingType: credit amountInMin: 100 currency: symbol: S$ code: SGD exponent: 2 items: - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 name: name tax: 144 id: item-1 modifiers: - quantity: 1 price: 2550 name: name tax: 144 id: id - quantity: 1 price: 2550 name: name tax: 144 id: id - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 name: name tax: 144 id: item-1 modifiers: - quantity: 1 price: 2550 name: name tax: 144 id: id - quantity: 1 price: 2550 name: name tax: 144 id: id dineIn: eaterCount: 2 tableID: "1" orderState: COMPLETED properties: action: description: "This action indicates the target action POS wants to do, eg,\ \ BILL_GENERATED, COMPLETED." enum: - BILL_GENERATED - COMPLETED example: BILL_GENERATED type: string order: $ref: '#/components/schemas/posOrder' required: - action - order title: SyncPOSOrderRequest type: object SyncPOSOrderResponse: description: "The Sync POS Order response, include grab order ID and paybill\ \ QR deeplink" example: orderID: 4234234-GSDFGSS54323D paybillQRCode: https://grab.com?merchantID=xxx properties: orderID: description: The orderID in grab system. example: 4234234-GSDFGSS54323D type: string paybillQRCode: description: The paybill QR Code. example: https://grab.com?merchantID=xxx type: string title: SyncPOSOrderResponse type: object qrType: description: "This qrType that POS wants to generate, eg, dynamic / static." example: dynamic title: qrType type: string tableNumber: description: This table number the eater seats. example: "01" title: tableNumber type: string GenerateSTOQRCodeResponse: description: The STO QR deeplink response example: qrCode: https://grab.com?merchantID=xxx properties: qrCode: description: The deeplink of scan to order QR. example: https://grab.com?merchantID=xxx type: string title: GenerateSTOQRCodeResponse type: object RefundOrderRequest: description: The API is to refund a STO order in dineout flow. example: isFullRefund: true refundAmountInMin: 100 orderID: 4325453-C7A2G3AYGKK3KA merchantID: 4-VREVTMTME24DS properties: orderID: description: This order ID in grab system. example: 4325453-C7A2G3AYGKK3KA type: string merchantID: description: This merchant ID in grab system. example: 4-VREVTMTME24DS type: string isFullRefund: description: currently we only support fully refund. example: true type: boolean refundAmountInMin: description: The total amount the POS want to refund for STO order. example: 100 format: int64 type: integer required: - merchantID - orderID title: RefundOrderRequest type: object NotifyMembershipWebviewRequest: description: | This request submits membership registration request to partner. example: grabID: b2abcd0b-69b0-3369-9603-68345a5f4f0a merchantID: 1-CYNGRUNGSBCCC action: LINK memberID: A12345689 properties: memberID: description: The unique member ID on the partner's database. example: A12345689 type: string grabID: description: The id used to identify an unique grab user. example: b2abcd0b-69b0-3369-9603-68345a5f4f0a type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC type: string action: description: Action completed in partner's webview. enum: - LINK - REGISTER - UNLINK example: LINK type: string title: Register Membership Request type: object order: description: | A JSON object containing the order information. This is only applicable for STO order in Push Order State Webhook example: scheduledTime: 2019-05-24T08:26:00Z receiver: address: poiSource: GRAB address: "123, Jalan Eater street, Batu Caves, 12345, Selangor" postcode: "123456" coordinates: latitude: 1.234567 longitude: 3.456789 unitNumber: 3-45 deliveryInstruction: turn left in 2 floor. poiID: poiID virtualContact: expiredAt: 2025-03-14T12:35:00Z phoneNumber: "+6591234567" PIN: "1234" status: ACTIVE name: Prashanth phones: "60122234704" orderID: 123-CYNKLPCVRN5 partnerMerchantID: Partner-ABECU cutlery: true payments: - method: visa fundingType: credit amountInMin: 100 - method: visa fundingType: credit amountInMin: 100 completeTime: 2019-05-24T05:26:00Z membershipID: 12345678Z paymentType: CASH orderState: DELIVERED shortOrderNumber: GF-123 orderTime: 2019-05-24T05:06:00Z submitTime: 2019-05-24T05:16:00Z campaigns: - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 - level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 discounts: - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher - code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher merchantID: 1-CYNGRUNGSBCCC price: basketPromo: 775 tax: 117 bcrsDepositFeeInMin: 20 merchantEarning: revenue: 200 netEarning: 150 commission: 10 mexFundDiscount: 40 smallOrderFee: 0 total: 2075 deliveryFee: 400 subtotal: 2550 serviceChargeFee: 0 merchantChargeFee: 0 grabFundPromo: 300 merchantFundPromo: 475 eaterPayment: 2175 orderReadyEstimation: maxOrderReadyTime: 2019-05-24T05:16:00Z newOrderReadyTime: 2019-05-24T05:26:00Z estimatedOrderReadyTime: 2019-05-24T05:16:00Z allowChange: true currency: symbol: S$ code: SGD exponent: 2 items: - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item promos: - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 - promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 dineIn: eaterCount: 2 tableID: "1" featureFlags: orderType: DeliveredByGrab orderAcceptedType: AUTO isMexEditOrder: false properties: orderID: description: "The order's ID that is returned from GrabFood. Refer to FAQs\ \ for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: 123-CYNKLPCVRN5 title: orderID type: string shortOrderNumber: description: "The GrabFood short order number. This is unique for each merchant\ \ per day. Refer to FAQs for more details about [orderID and shortOrderNumber](#section/Order/What's-the-difference-between-orderID-and-shortOrderNumber)." example: GF-123 type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string paymentType: description: "The payment method used. Refer to FAQs for more details about\ \ [paymentType](#section/Order/Does-the-paymentType-affect-partners)." enum: - CASH - CASHLESS type: string cutlery: description: "The boolean value to indicate whether cutlery are needed or\ \ not. Refer to FAQs for more details about [cutlery](#section/Order/What-do-the-true-or-false-values-mean-for-cutlery)." type: boolean orderTime: description: "The UTC time that a consumer places the order, based on ISO_8601/RFC3339." example: 2019-05-24T05:06:00Z type: string submitTime: description: "The order submit time, based on ISO_8601/RFC3339. `null` in\ \ Submit Order payload. Only present in the [List Orders](#tag/list-order)\ \ response." example: 2019-05-24T05:16:00Z format: date-time type: string completeTime: description: "The order complete time, based on ISO_8601/RFC3339. `null`\ \ in Submit Order payload. Only present in the [List Orders](#tag/list-order)\ \ response." example: 2019-05-24T05:26:00Z format: date-time type: string scheduledTime: description: "The order scheduled time, based on ISO_8601/RFC3339. Empty\ \ for non-scheduled orders." example: 2019-05-24T08:26:00Z type: string orderState: description: "The state of the order. Empty in Submit Order payload. Only\ \ present in the [List Orders](#tag/list-order) response. Refer to [Order\ \ States](#section/Order-states)." example: DELIVERED type: string currency: $ref: '#/components/schemas/currency' featureFlags: $ref: '#/components/schemas/orderFeatureFlags' items: description: 'The ordered items in an array of JSON Object. ' items: $ref: '#/components/schemas/OrderItem' title: orderItems type: array campaigns: description: | The campaigns that are applicable for the order. `null` when there is no campaign applied. Only campaigns that are funded by merchants will be sent. items: $ref: '#/components/schemas/OrderCampaign' nullable: true title: campaigns type: array promos: description: An array of promotion objects. `null` when there is no promo code applied. Only promotions that are funded by merchants will be sent. items: $ref: '#/components/schemas/OrderPromo' nullable: true title: promos type: array price: $ref: '#/components/schemas/orderPrice' dineIn: $ref: '#/components/schemas/dineIn' receiver: $ref: '#/components/schemas/receiver' orderReadyEstimation: $ref: '#/components/schemas/orderReadyEstimation' membershipID: description: Membership ID for loyalty project. Only present for loyalty program partners. Empty if not applicable. example: 12345678Z type: string discounts: description: | The discounts that are applicable for the paybill order in dineout STO case. `null` when there is no discount applied. This is only applicable for STO order items: $ref: '#/components/schemas/grabDiscount_1' nullable: true title: discounts type: array payments: description: An array of payment objects. `null` when there is no payment info from pos. This is only applicable for STO order items: $ref: '#/components/schemas/payment' nullable: true title: payments type: array required: - currency - cutlery - featureFlags - items - merchantID - orderID - orderTime - paymentType - price - shortOrderNumber title: Order type: object partnerMerchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string specialOpeningHour: example: metadata: description: New Year Opening Hours endDate: 2024-02-04 openingHours: openPeriodType: Period periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 startDate: 2024-02-01 properties: startDate: description: The start date of store special opening hours. example: 2024-02-01 type: string endDate: description: The end date of store special opening hours. example: 2024-02-04 type: string metadata: $ref: '#/components/schemas/specialOpeningHour_metadata' openingHours: $ref: '#/components/schemas/specialOpeningHour_openingHours' type: object storeHour: description: A JSON object that describes the store hour for each day. example: thu: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 properties: mon: description: An array of open periods. Maximum of 3 periods. Blank indicates store close. items: $ref: '#/components/schemas/openPeriod' type: array tue: description: An array of open periods. Maximum of 3 periods. Blank indicates store close. items: $ref: '#/components/schemas/openPeriod' type: array wed: description: An array of open periods. Maximum of 3 periods. Blank indicates store close. items: $ref: '#/components/schemas/openPeriod' type: array thu: description: An array of open periods. Maximum of 3 periods. Blank indicates store close. items: $ref: '#/components/schemas/openPeriod' type: array fri: description: An array of open periods. Maximum of 3 periods. Blank indicates store close. items: $ref: '#/components/schemas/openPeriod' type: array sat: description: An array of open periods. Maximum of 3 periods. Blank indicates store close. items: $ref: '#/components/schemas/openPeriod' type: array sun: description: An array of open periods. Maximum of 3 periods. Blank indicates store close. items: $ref: '#/components/schemas/openPeriod' type: array required: - fri - mon - sat - sun - thu - tue - wed title: storeHour type: object menuSyncFail: example: serviceHours: errors: - error 1 - error 1 id: section_externalID1 categories: - id: category_externalID1 items: - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 errors: - error 2 - error 2 - id: category_externalID1 items: - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 errors: - error 2 - error 2 errors: - error 1 - error 1 properties: id: example: section_externalID1 type: string errors: description: An array of strings of error message. items: example: error 1 type: string type: array serviceHours: $ref: '#/components/schemas/menuSyncFail_serviceHours' categories: items: $ref: '#/components/schemas/MenuSyncFailCategory' type: array type: object currency: description: "A JSON object containing code, symbol, and exponent for a given\ \ currency. Refer to [Country and Currency](#section/Getting-started/Country-and-currency)." example: symbol: S$ code: SGD exponent: 2 properties: code: description: | The three-letter ISO currency code. This is the currency that is associated with the payment amount. enum: - IDR - MYR - PHP - SGD - THB - VND - KHR - MMK example: SGD maxLength: 3 type: string symbol: description: | The currency symbol. enum: - Rp - RM - ₱ - S$ - ฿ - ₫ - ៛ - K - IDR - MYR - PHP - SGD - THB - VND - KHR - MMK example: S$ maxLength: 3 type: string exponent: description: | The log base 10 of the number of times we have to multiply the major unit to get the minor unit. Should be 0 for VN and 2 for other countries (`SG`/`MY`/`ID`/`TH`/`PH`/`KH`/`MM`). example: 2 type: integer required: - code - exponent - symbol title: currency type: object orderFeatureFlags: description: The featureFlag JSON object containing an order's feature related information. example: orderType: DeliveredByGrab orderAcceptedType: AUTO isMexEditOrder: false properties: orderAcceptedType: description: | The acceptance type for the order. Refer to FAQs for more details about [orderAcceptedType](#section/Order/How-do-I-identify-if-a-particular-order-is-auto-or-manual-acceptance). enum: - AUTO - MANUAL type: string orderType: description: | The type of order. enum: - TakeAway - DeliveredByGrab - DeliveredByRestaurant - DineIn - ScanToOrder - TakeAwayOrder - PosDineOutOrder example: DeliveredByGrab type: string isMexEditOrder: description: | A boolean value that indicates if the order is edited or recalculated. It does not necessarily mean the order was edited by the merchant. The changes could have been made by Grab, the Merchant, or the Customer. example: false type: boolean required: - orderAcceptedType - orderType title: orderFeatureFlags type: object orderItems: description: 'The ordered items in an array of JSON Object. ' items: $ref: '#/components/schemas/OrderItem' title: orderItems type: array orderCampaigns: description: | The campaigns that are applicable for the order. `null` when there is no campaign applied. Only campaigns that are funded by merchants will be sent. items: $ref: '#/components/schemas/OrderCampaign' nullable: true title: campaigns type: array promos: description: An array of promotion objects. `null` when there is no promo code applied. Only promotions that are funded by merchants will be sent. items: $ref: '#/components/schemas/OrderPromo' nullable: true title: promos type: array orderPrice: description: A JSON object containing order's price in the minor unit format. example: basketPromo: 775 tax: 117 bcrsDepositFeeInMin: 20 merchantEarning: revenue: 200 netEarning: 150 commission: 10 mexFundDiscount: 40 smallOrderFee: 0 total: 2075 deliveryFee: 400 subtotal: 2550 serviceChargeFee: 0 merchantChargeFee: 0 grabFundPromo: 300 merchantFundPromo: 475 eaterPayment: 2175 properties: subtotal: description: | Total item and modifier price (tax-inclusive) in the minor unit. ``` subtotal = Sum of all (item price * quantity) | 2550*1=2550 example: 2550 format: int64 type: integer tax: description: | GrabFood's tax in the minor unit. Refer to FAQs for more details about [tax](#section/Order/How-is-tax-calculated). ``` tax = (subtotal + merchantChargeFee - merchantFundPromo) * Tax / (1+Tax) | (2550-475)*0.06/1.06=117 example: 117 format: int64 type: integer merchantChargeFee: description: | Any additional fee charged by merchant (tax-inclusive), which is 100% paid out to the merchant. Reach out to your integration support team for the configuration. Eg. Takeaway, packaging costs, dine-in charge. example: 0 format: int64 type: integer serviceChargeFee: description: | Additional service charge fee charged by merchant (tax-inclusive), which is 100% paid out to the merchant. Reach out to your integration support team for the configuration. example: 0 format: int64 type: integer grabFundPromo: description: "GrabFood's promo fund in the minor unit. Calculated based\ \ on funded ratio. Only present when `paymentType:CASH` or `orderType:DeliveredByRestaurant`.\ \ Otherwise, it will be set to `0`." example: 300 format: int64 type: integer merchantFundPromo: description: The merchant's promo fund in the minor unit. Calculated based on funded ratio. example: 475 format: int64 type: integer basketPromo: description: "The total amount promo applied to the basket items only (item\ \ level/order level) in the minor unit, excluding delivery fee. Only present\ \ when `paymentType: CASH` or `orderType: DeliveredByRestaurant`. Otherwise,\ \ it will be set to `0`. \n```\nbasketPromo = (grabFundPromo + merchantFundPromo)\ \ | 300 + 475 = 775\n" example: 775 format: int64 type: integer deliveryFee: description: "The delivery fee in the minor unit. Only present when `paymentType:CASH`\ \ or `orderType:DeliveredByRestaurant`. Otherwise, it will be set to `0`." example: 400 format: int64 type: integer smallOrderFee: description: The fee charged by GrabFood for order that does not meet a certain minimum order value. Only present when `paymentType:CASH` and `orderType:DeliveredByRestaurant`. example: 0 format: int64 type: integer bcrsDepositFeeInMin: description: | The total BCRS (Beverage Container Return Scheme) deposit in the minor unit. A Singapore government-mandated refundable deposit charged to the consumer for eligible beverage containers (plastic bottles and metal cans). This is a non-taxable, non-commissionable pass-through — collected from consumers and not part of net sales. Only present when the order contains BCRS-eligible items; omitted otherwise. example: 20 format: int64 type: integer eaterPayment: description: | The total amount paid by the consumer in the minor unit, excluding some additional fees charged by GrabFood. Only present when `paymentType:CASH` or `orderType:DeliveredByRestaurant`. Otherwise, it will be set to `0`. ``` eaterPayment = (subtotal + merchantChargeFee + deliveryFee + bcrsDepositFeeInMin) - (sum of all promo) | (2550+0+400+0)-775=2175 example: 2175 format: int64 type: integer total: description: "The total merchant-related amount calculated exclusive of\ \ commission charges. Formulae is the same for all delivery method. \n\ ```\ntotal = subtotal + merchantChargeFee - merchantFundPromo | 2550+0-475=2075\n" example: 2075 format: int64 type: integer merchantEarning: $ref: '#/components/schemas/merchantEarning' required: - subtotal title: price type: object dineIn: description: "A JSON object containing order at table information. Only applicable\ \ for dine-in order. `null` if not applicable. Not present in [ListOrder](#tag/list-order/operation/list-orders)\ \ response." example: eaterCount: 2 tableID: "1" nullable: true properties: tableID: description: Table number. example: "1" type: string eaterCount: description: The number of eaters. example: 2 format: int64 type: integer title: dineIn type: object orderReadyEstimation: description: Information related to the order ready time estimation. example: maxOrderReadyTime: 2019-05-24T05:16:00Z newOrderReadyTime: 2019-05-24T05:26:00Z estimatedOrderReadyTime: 2019-05-24T05:16:00Z allowChange: true nullable: true properties: allowChange: description: A boolean value indicating if the order ready time can be changed. example: true type: boolean estimatedOrderReadyTime: description: "The order ready time for this order estimated by GrabFood,\ \ based on ISO_8601/RFC3339." example: 2019-05-24T05:16:00Z format: date-time type: string maxOrderReadyTime: description: "The max allowed order ready time for this order, based on\ \ ISO_8601/RFC3339." example: 2019-05-24T05:16:00Z format: date-time type: string newOrderReadyTime: description: "The new order ready time for this order. Only present after\ \ a new order ready time is set (default will be null), based on ISO_8601/RFC3339." example: 2019-05-24T05:26:00Z format: date-time nullable: true type: string required: - allowChange - estimatedOrderReadyTime - maxOrderReadyTime title: orderReadyEstimation type: object grabDiscount: description: | The discounts that are applicable for the paybill order in dineout STO case. `null` when there is no discount applied. This is only applicable for STO order items: $ref: '#/components/schemas/grabDiscount_1' nullable: true title: discounts type: array cancelOrderLimitType: description: The type of the order cancellation limit. enum: - not approaching limit - approaching the daily limit - approaching the weekly limit - approaching the monthly limit - "" title: cancelOrderLimitType type: string cancelOrderLimitTimes: description: "The remaining cancellation quota for the merchant. A value is\ \ only returned when the nearest remaining cancellation limit is approaching,\ \ else it returns 0." format: int64 title: cancelOrderLimitTimes type: integer cancelReasons: description: An array of cancel order reasons JSON objects. items: $ref: '#/components/schemas/CancelReason' title: cancelReasons type: array cancelCode: description: The cancel code for a specific cancel reason. enum: - 1001 - 1002 - 1003 - 1004 title: cancelCode type: integer campaign: description: A JSON object containing the campaign details for a merchant. Only campaigns that are funded by merchants will be sent. example: quotas: totalCountPerUser: 2 totalCount: 10 createdBy: Merchant merchantID: 1-CYNGRUNGSBCCC customTag: "" name: $4 off with min $10 order for all users within weekday discount: cap: 5 scope: type: items objectIDs: - - type: percentage value: 10 id: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 conditions: eaterType: all minBasketAmount: 10 startTime: 2021-09-23T03:30:00Z workingHour: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 endTime: 2021-09-23T06:00:00Z bundleQuantity: 0 properties: id: description: The campaign's ID. example: 4-CY4VMFMANYBYJ6-CZNZFFL1G8KKLX-94794295 title: id type: string createdBy: description: "The party who created the campaign. Can be created by partners\ \ via API, merchants via the merchant app or Grab." enum: - Grab - Merchant - Partner example: Merchant type: string merchantID: description: The merchant's ID that is in GrabFood's database. example: 1-CYNGRUNGSBCCC title: merchantID type: string name: description: The campaign's name. example: $4 off with min $10 order for all users within weekday maxLength: 256 title: name type: string quotas: $ref: '#/components/schemas/campaignQuotas' conditions: $ref: '#/components/schemas/campaignConditions' discount: $ref: '#/components/schemas/campaignDiscount' customTag: description: Specify the tag for custom bundle offer campaign. Only whitelisted partner is supported as of now. example: "" maxLength: 22 title: customTag type: string required: - createdBy - id - merchantID - name title: campaign type: object campaignName: description: The campaign's name. example: $4 off with min $10 order for all users within weekday maxLength: 256 title: name type: string campaignQuotas: description: The quotas/limits for a particular campaign. example: totalCountPerUser: 2 totalCount: 10 properties: totalCount: description: | The maximum number of redemptions. Default is unlimited if unspecified. example: 10 format: int64 type: integer totalCountPerUser: description: The maximum number of redemptions per user. Default is unlimited if unspecified. example: 2 format: int64 type: integer title: campaignQuotas type: object campaignConditions: description: The conditions to apply to a campaign. example: eaterType: all minBasketAmount: 10 startTime: 2021-09-23T03:30:00Z workingHour: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 endTime: 2021-09-23T06:00:00Z bundleQuantity: 0 properties: startTime: description: "The campaign's start time in UTC format. For example, 2021-09-23T03:30:00Z\ \ means 2021-09-23 11:30:00 (UTC +08:00)." example: 2021-09-23T03:30:00Z format: date-time type: string endTime: description: The campaign's end time in UTC format. example: 2021-09-23T06:00:00Z format: date-time type: string eaterType: description: "The type of eater eligible for the campaign. \n* `all` - campaign\ \ will be applied to everyone. No limitation on campaign type.\n* `new`\ \ - campaign will be applied to consumers who have not ordered from this\ \ store in the last three months. Only applicable to **order-level** campaign.\n" enum: - all - new type: string minBasketAmount: description: The minimum basket amount to be eligible for the campaign. Only applicable to **order-level** campaign but not to item-level discount campaign. example: 10 format: double type: number bundleQuantity: description: Specify the bundle quantity for bundle offer campaign. example: 0 type: integer workingHour: $ref: '#/components/schemas/workingHour' required: - eaterType - endTime - startTime - workingHour title: campaignConditions type: object campaignDiscount: description: The discount detail for a particular campaign when conditions are satisfied. example: cap: 5 scope: type: items objectIDs: - - type: percentage value: 10 properties: type: description: | The type of discount enum: - net - percentage - fixPrice - delivery - freeItem - bundleSameNet - bundleSamePercentage - bundleSameFixPrice - bundleDiffNet - bundleDiffPercentage - bundleDiffFixPrice example: percentage type: string cap: description: | The maximum discount dollar amount. It is **not required** and will be ignored when the `discount.type` is: - `net` - `fixPrice` - `delivery` - `freeItem` - `bundleSameNet` - `bundleSamePercentage` - `bundleSameFixPrice` - `bundleDiffNet` - `bundleDiffPercentage` - `bundleDiffFixPrice` example: 5 format: double type: number value: description: | Specify the discount amount. Decimal number is not supported For VN, ID and TH. For example, `10.5` is not allowed and it should be `10.0`. * Dollar amount value when `discount.type` is `net`, `delivery`, `fixPrice`, `bundleSameNet`, `bundleSameFixPrice`, `bundleDiffNet`, `bundleDiffFixPrice`. * Percentage value (0-100) when `discount.type` is `percentage`, `bundleSamePercentage`, `bundleDiffPercentage`. * **Not required** when `discount.type` is `freeItem`. * The order-level discount given **should not exceed 0.5 * the minimum basket amount**. example: 10 format: double type: number scope: $ref: '#/components/schemas/campaignScope' required: - scope - type title: campaignDiscount type: object customTag: description: Specify the tag for custom bundle offer campaign. Only whitelisted partner is supported as of now. example: "" maxLength: 22 title: customTag type: string voucher: description: A JSON object containing dine-in voucher details. example: discountedPrice: S$1.00 originalPrice: S$10.00 voucherType: CASH descriptionInfo: text: Dine-in cash voucher for use in a transaction. title: S$10.00 Dine-in Voucher properties: title: description: The title of the voucher. example: S$10.00 Dine-in Voucher type: string discountedPrice: description: The amount paid after discount is applied in local currency. example: S$1.00 type: string originalPrice: description: The original amount before discount is applied in local currency. example: S$10.00 type: string descriptionInfo: $ref: '#/components/schemas/voucher_descriptionInfo' voucherType: description: The type of the dine-in voucher. enum: - CASH - ITEM type: string title: voucher type: object dineInVoucher_campaignID: description: The dine-in voucher campaign's ID in GrabFood's database. example: 1-CYNGRUNGSBCCC-CZNZFFL1G8KKLX-94794295 title: campaignID type: string redeemResult: description: A JSON object containing dine-in voucher details. example: code: "" success: true properties: success: description: To indicate whether the dine-in voucher redemption succeeded. example: true type: boolean code: description: | The code for the reason of failed redemption. Empty if the `success` is true. * `VOUCHER_REDEEMED` - The voucher has already been redeemed. * `INVALID_STATE` - The current status of voucher is EXPIRED or REFUNDED. * `REDEEM_FAILED` - Internal service error. * `INVALID_MERCHANT` - Voucher not applicable for this merchant. * `INVALID_ID` - Invalid certificateID. enum: - VOUCHER_REDEEMED - INVALID_STATE - REDEEM_FAILED - INVALID_MERCHANT - INVALID_ID - "" example: "" type: string title: voucher type: object posOrder: description: The POSOrder indicates the detail order information from POS system. example: orderTime: 2019-05-24T05:06:00Z orderID: 106351684-C7LYVB6WGBDUV2 partnerOrderID: POS-123 merchantID: 5-XVGDSSTR34D partnerMerchantID: POS-SVCDGDTA price: depositAmountInMin: 5 subtotal: 0 tax: 6 offlinePOSDiscountInMin: 5 billRoundingInMin: 2 eaterPayment: 7 merchantChargeFeeInMin: 1 payments: - method: visa fundingType: credit amountInMin: 100 - method: visa fundingType: credit amountInMin: 100 currency: symbol: S$ code: SGD exponent: 2 items: - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 name: name tax: 144 id: item-1 modifiers: - quantity: 1 price: 2550 name: name tax: 144 id: id - quantity: 1 price: 2550 name: name tax: 144 id: id - quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 name: name tax: 144 id: item-1 modifiers: - quantity: 1 price: 2550 name: name tax: 144 id: id - quantity: 1 price: 2550 name: name tax: 144 id: id dineIn: eaterCount: 2 tableID: "1" orderState: COMPLETED properties: orderID: description: The long orderID in grab system. example: 106351684-C7LYVB6WGBDUV2 type: string partnerOrderID: description: The orderID in pos system. example: POS-123 type: string merchantID: description: The merchant's ID is the one in GrabFood's database. example: 5-XVGDSSTR34D type: string partnerMerchantID: description: The merchant ID in pos system. example: POS-SVCDGDTA type: string orderTime: description: "The UTC time that a consumer places the order, based on ISO_8601/RFC3339." example: 2019-05-24T05:06:00Z format: date-time type: string orderState: description: "The order state in POS system, eg, COMPLETED." example: COMPLETED type: string currency: $ref: '#/components/schemas/currency' items: description: 'The ordered items in an array of JSON Object. ' items: $ref: '#/components/schemas/POSItem' title: posItems type: array price: $ref: '#/components/schemas/posPriceDetails' dineIn: $ref: '#/components/schemas/dineIn' payments: description: An array of payment objects. `null` when there is no payment info from pos. This is only applicable for STO order items: $ref: '#/components/schemas/payment' nullable: true title: payments type: array title: posOrder type: object sellingTimes: description: "An array of sellingTimes JSON objects. Max 20 allowed. Refer to\ \ [Selling Times](#selling-times) for more information." items: $ref: '#/components/schemas/SellingTime' required: - endTime - id - name - serviceHours - startTime title: sellingTimes type: array categories: description: "An array of category JSON objects. Max 100 allowed. Refer to [Categories](#categories)\ \ for more information." items: $ref: '#/components/schemas/MenuCategory' title: categories type: array sections: description: "An array of section JSON objects. Max 7 allowed. Refer to [Sections](#sections)\ \ for more information." items: $ref: '#/components/schemas/MenuSection' title: sections type: array receiver: description: A JSON object containing the receiver information. example: address: poiSource: GRAB address: "123, Jalan Eater street, Batu Caves, 12345, Selangor" postcode: "123456" coordinates: latitude: 1.234567 longitude: 3.456789 unitNumber: 3-45 deliveryInstruction: turn left in 2 floor. poiID: poiID virtualContact: expiredAt: 2025-03-14T12:35:00Z phoneNumber: "+6591234567" PIN: "1234" status: ACTIVE name: Prashanth phones: "60122234704" nullable: true properties: name: description: The name of the receiver. example: Prashanth maxLength: 64 type: string phones: description: | The receiver's phone number. Only applicable for orders that are delivered by the restaurant. `null` if not applicable. > Note: The `phones` field will be deprecated once the virtualContact feature is fully rolled out. example: "60122234704" type: string address: $ref: '#/components/schemas/address' virtualContact: $ref: '#/components/schemas/virtualContact' title: receiver type: object posPayment: description: An array of payment objects. `null` when there is no payment info from pos. This is only applicable for STO order items: $ref: '#/components/schemas/payment' nullable: true title: payments type: array openPeriod: example: startTime: 11:30 endTime: 21:30 properties: startTime: description: The open start time in 24h format. Local time format is expected. example: 11:30 type: string endTime: description: The open end time in 24h format. Local time format is expected. example: 21:30 type: string required: - endTime - startTime type: object outOfStockInstruction: description: An JSON object that indicates the instructions to be taken by the merchant when the item is out of stock. example: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item nullable: true properties: title: description: The short instruction message. example: Replace item type: string instructionType: description: "Type of out-of-stock instruction chosen by customer. `CONTACT`\ \ is disabled by default, kindly reach out to your integration manager\ \ if you wish to receive this instruction." enum: - REMOVE - CANCEL - SPECIFIC_ITEM - CONTACT example: SPECIFIC_ITEM type: string replacementItemID: description: The preferred item's ID in the partner system. Only applicable when the instructionType is `SPECIFIC_ITEM`. example: ITEM-2 type: string replacementGrabItemID: description: The preferred item's ID in the Grab system. Only applicable when the instructionType is `SPECIFIC_ITEM`. example: IDGFSTI000004qy1490868132303452210 type: string title: outOfStockInstruction type: object orderModifiers: description: An array of JSON objects modifiers. items: $ref: '#/components/schemas/OrderItemModifier' required: - id - price - quantity - tax title: modifiers type: array orderFreeItem: description: Free item information for `freeItem` campaign. example: quantity: 1 price: 10 name: Free tote bag id: item-2 properties: id: description: The free item's externalID in the partner system. Empty if not applicable. example: item-2 type: string name: description: | The name of the free item. Empty if not applicable. example: Free tote bag type: string quantity: description: The item's quantity. Maximum is **1**. example: 1 type: integer price: description: The item's price in minor unit format. example: 10 format: int64 type: integer title: orderFreeItem type: object merchantEarning: description: "A JSON object reflects the real money the merchant receives. Only\ \ applicable for Dine out STO case. `null` if not applicable. Only present\ \ in submitOrder webhook. Not present in [ListOrder](#tag/list-order/operation/list-orders)\ \ response." example: revenue: 200 netEarning: 150 commission: 10 mexFundDiscount: 40 nullable: true properties: revenue: description: The revenue of merchant should receive. revenue = price.eaterpayment - mexfunddiscount example: 200 format: int64 type: integer netEarning: description: The netEarning of merchant should receive. netEarning = revenue - commission example: 150 format: int64 type: integer mexFundDiscount: description: The mexFundDiscount that user applied from grab app in this payment example: 40 format: int64 type: integer commission: description: The commission that grab need charge from this pay merchant transaction. example: 10 format: int64 type: integer title: merchantEarning type: object workingHour: description: A JSON object that describes the workingHour for each day. example: thu: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 tue: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 wed: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sat: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 fri: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 sun: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 mon: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 properties: sun: $ref: '#/components/schemas/workingHourDay' mon: $ref: '#/components/schemas/workingHourDay' tue: $ref: '#/components/schemas/workingHourDay' wed: $ref: '#/components/schemas/workingHourDay' thu: $ref: '#/components/schemas/workingHourDay' fri: $ref: '#/components/schemas/workingHourDay' sat: $ref: '#/components/schemas/workingHourDay' title: workingHour type: object campaignScope: description: The scope level for a particular campaign. example: type: items objectIDs: - - properties: type: description: "The scope type for this campaign. \n* `order` - order level\ \ campaign.\n* `items` - item level campaign or bundle offer. \n* `category`\ \ - category level campaign where all items within applies the same discount.\n" enum: - order - items - category example: items type: string objectIDs: description: | The list of item IDs in the partner's database applicable for discount when `discount.scope.type` is `items` (or category IDs for `category`). One and only 1 item supported when `discount.type` is: - `freeItem` - `bundleSameNet` - `bundleSamePercentage` - `bundleSameFixPrice` Minimum 2 - Maximum 20 items supported when `discount.type` is: - `bundleDiffNet` - `bundleDiffPercentage` - `bundleDiffFixPrice` items: example: type: string type: array required: - type title: campaignScope type: object posItems: description: 'The ordered items in an array of JSON Object. ' items: $ref: '#/components/schemas/POSItem' title: posItems type: array posPriceDetails: description: A JSON object containing order's price in the minor unit format. example: depositAmountInMin: 5 subtotal: 0 tax: 6 offlinePOSDiscountInMin: 5 billRoundingInMin: 2 eaterPayment: 7 merchantChargeFeeInMin: 1 properties: subtotal: description: Total item and modifier price in minor units and tax-inclusive. format: int64 type: integer tax: description: | Total tax in the minor unit. ``` Formula Tax = total item/modifier tax format: int64 type: integer merchantChargeFeeInMin: description: "Any additional fee charged by the merchant in minor units\ \ and tax-inclusive, which is 100% paid out to the merchant. Eg. service\ \ charge" format: int64 type: integer depositAmountInMin: description: "This field represents the reservation depositAmount, which\ \ is the amount paid upfront by the diner during the reservation process.\ \ It can be applied towards the final payment when the order is completed.\ \ It’s in minor units and tax-inclusive." format: int64 type: integer offlinePOSDiscountInMin: description: Offline discount that is provided to the diner in minor units and tax-inclusive. format: int64 type: integer billRoundingInMin: description: "The rounding amount in minor units. \n```\nRound down should\ \ be in negative value\nRound up should be in positive value\n```\n" format: int64 type: integer eaterPayment: description: | The total bill value in minor units and tax-inclusive. ``` Formula: eaterPayment = + subtotal + merchantChargeFeeInMin - depositAmountInMin - offlinePOSDiscountInMin format: int64 type: integer title: price type: object serviceHours: description: A JSON object with serviceHours for each day of the week. properties: mon: $ref: '#/components/schemas/serviceHour' tue: $ref: '#/components/schemas/serviceHour' wed: $ref: '#/components/schemas/serviceHour' thu: $ref: '#/components/schemas/serviceHour' fri: $ref: '#/components/schemas/serviceHour' sat: $ref: '#/components/schemas/serviceHour' sun: $ref: '#/components/schemas/serviceHour' required: - fri - mon - sat - sun - thu - tue - wed title: serviceHours type: object menuTranslation: description: | The translated name or description. The property key represents the language code (e.g., `en`, `th`, `ms`, `zh`, `vi`, `id`, `km`, `my`), and the value is the translated text. \ Example: { "en": "english translation" } example: translation type: string menuItems: description: "An array of item JSON objects. Max 300 allowed per category. Refer\ \ to [Items](#items) for more information." items: $ref: '#/components/schemas/MenuItem' title: menuItems type: array advancedPricing: description: | Price configuration (in minor unit) for different service, order type and channel combination. If a service type does not have a specified price, it will utilize the default price of the item. Refer [Service Based Menu](#section/Service-Based-Menu). properties: Delivery_OnDemand_GrabApp: description: | **Case-sensitive**. Service type: `Delivery`, Order type: `Instant`, Channel: `Grab App` example: 30 format: int64 type: integer Delivery_Scheduled_GrabApp: description: | **Case-sensitive**. Service type: `Delivery`, Order type: `Scheduled`, Channel: `Grab App` example: 25 format: int64 type: integer SelfPickUp_OnDemand_GrabApp: description: | **Case-sensitive**. Service type: `Self Pick Up`, Order type: `Instant`, Channel: `Grab App` example: 25 format: int64 type: integer DineIn_OnDemand_GrabApp: description: | **Case-sensitive**. Service type: `Dine In`, Order type: `Instant`, Channel: `Grab App` example: 25 format: int64 type: integer Delivery_OnDemand_StoreFront: description: | **Case-sensitive**. Service type: `Delivery`, Order type: `Instant`, Channel: `Store Front` example: 25 format: int64 type: integer Delivery_Scheduled_StoreFront: description: | **Case-sensitive**. Service type: `Delivery`, Order type: `Scheduled`, Channel: `Store Front` example: 25 format: int64 type: integer SelfPickUp_OnDemand_StoreFront: description: | **Case-sensitive**. Service type: `Self Pick Up`, Order type: `Instant`, Channel: `Store Front` example: 25 format: int64 type: integer title: advancedPricing type: object purchasability: description: | Purchasability is set to true by default for all service type, unless it is explicitly set to false. Modifier will reuse it’s item’s purchasability. Refer [Service Based Menu](#section/Service-Based-Menu). properties: Delivery_OnDemand_GrabApp: description: | **Case-sensitive**. type: boolean Delivery_Scheduled_GrabApp: description: | **Case-sensitive**. type: boolean SelfPickUp_OnDemand_GrabApp: description: | **Case-sensitive**. type: boolean DineIn_OnDemand_GrabApp: description: | **Case-sensitive**. type: boolean Delivery_OnDemand_StoreFront: description: | **Case-sensitive**. type: boolean Delivery_Scheduled_StoreFront: description: | **Case-sensitive**. type: boolean SelfPickUp_OnDemand_StoreFront: description: '**Case-sensitive**.' type: boolean type: object modifierGroups: description: "An array of the modifierGroup JSON objects. Max 30 allowed per\ \ item. Refer to [Modifier groups](#modifier-groups) for more information." items: $ref: '#/components/schemas/ModifierGroup' title: modifierGroups type: array address: description: A JSON object containing the receiver’s location information. Only applicable for orders that are delivered by the restaurant. `null` if not applicable. example: poiSource: GRAB address: "123, Jalan Eater street, Batu Caves, 12345, Selangor" postcode: "123456" coordinates: latitude: 1.234567 longitude: 3.456789 unitNumber: 3-45 deliveryInstruction: turn left in 2 floor. poiID: poiID properties: unitNumber: description: The delivery address' unit number. example: 3-45 type: string deliveryInstruction: description: Instructions for the delivery. example: turn left in 2 floor. type: string poiSource: description: POI source enum: - GRAB - GOOGLE type: string poiID: description: "POI ID, empty when poiSource is GRAB." type: string address: description: "The delivery address containing street name, city, postal\ \ code, and country. Has value only when poiSource is `GRAB`." example: "123, Jalan Eater street, Batu Caves, 12345, Selangor" type: string postcode: description: The postcode of the delivery address. Has value only when poiSource is `GRAB`. example: "123456" type: string coordinates: $ref: '#/components/schemas/coordinates' title: address type: object virtualContact: description: "A JSON object containing the virtual contact information, where\ \ the validity period is 6 hours. Refer [FAQ](#section/Order/How-to-contact-customer-using-the-virtual-contact)\ \ on how the virtual contact works." example: expiredAt: 2025-03-14T12:35:00Z phoneNumber: "+6591234567" PIN: "1234" status: ACTIVE properties: phoneNumber: description: The generated virtual phone number that will forward calls to the customer's actual phone number. Will be omitted if the `status` is not `ACTIVE`. example: "+6591234567" maxLength: 30 type: string PIN: description: A unique PIN required when forwarding calls to the customer for verification and security. Will be omitted if the `status` is not `ACTIVE`. example: "1234" maxLength: 10 type: string expiredAt: description: The expiry time of the virtual contact in UTC based on ISO_8601/RFC3339. Will be omitted if the `status` is not `ACTIVE`. example: 2025-03-14T12:35:00Z type: string status: description: | Indicates the current status and validity of the virtual contact. * `ACTIVE` - The virtual contact is valid. * `EXPIRED` - The virtual contact has expired and is no longer valid. * `UNAVAILABLE` - An internal error occurred while generating or retrieving the virtual contact. enum: - ACTIVE - EXPIRED - UNAVAILABLE type: string title: virtualContact type: object workingHourDay: description: A JSON object for workingHour for a day. example: periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 properties: periods: description: An array of open periods. `null` if the campaign period is closed all day. items: $ref: '#/components/schemas/openPeriod' nullable: true title: periods type: array type: object posItemModifiers: description: 'The ordered items in an array of JSON Object. ' items: $ref: '#/components/schemas/posItemModifier' title: posItemModifiers type: array serviceHour: description: A JSON object serviceHour for each day. An empty JSON object indicates the menu item is not available on the day. properties: openPeriodType: description: "Defines the specific time period during which the menu is\ \ available \n- OpenPeriod = open only in given periods\n- OpenAllDay\ \ = open 24 hours\n- CloseAllDay = closed 24 hours\n" enum: - OpenPeriod - OpenAllDay - CloseAllDay example: OpenPeriod type: string periods: description: An array of open periods. Only required when `openPeriodType` is **OpenPeriod** items: $ref: '#/components/schemas/openPeriod' required: - endTime - startTime title: periods type: array required: - openPeriodType title: serviceHour type: object menuModifiers: description: "An array of modifier JSON objects. Max 100 per modifierGroup.\ \ Refer to [Modifiers](#modifiers) for more information." items: $ref: '#/components/schemas/MenuModifier' title: modifiers type: array coordinates: description: A JSON object containing the coordinates of the delivery address. Only has value when poiSource is `GRAB`. example: latitude: 1.234567 longitude: 3.456789 properties: latitude: description: The latitude coordinates of the delivery address. example: 1.234567 format: double type: number longitude: description: The longitude coordinates of the delivery address. example: 3.456789 format: double type: number title: coordinates type: object campaignPeriods: description: An array of open periods. `null` if the campaign period is closed all day. items: $ref: '#/components/schemas/openPeriod' nullable: true title: periods type: array periods: description: An array of open periods. Only required when `openPeriodType` is **OpenPeriod** items: $ref: '#/components/schemas/openPeriod' required: - endTime - startTime title: periods type: array update_menu_request: oneOf: - $ref: '#/components/schemas/UpdateMenuItem' - $ref: '#/components/schemas/UpdateMenuModifier' GetMembershipNativeResponse_pointInfo: description: Obtain contains user's point details. properties: currentPoints: description: Point that user currently obtained. example: 200 format: int64 type: integer maxPoints: description: Maximum point that user can obtain. example: 5000 format: int64 type: integer expirePoints: description: Points that would get expired in future. example: 20 format: int64 type: integer type: object RewardItem: properties: itemID: description: The item's ID in partner system. example: item-1 type: string quantity: description: The item's quantity. example: 1 type: integer title: RewardItem type: object CreateSelfServeJourneyRequest_partner: description: A JSON object containing store information example: merchantID: Partner-ABECU properties: merchantID: description: The merchant's ID that is on the partner's database. example: Partner-ABECU title: partnerMerchantID type: string required: - merchantID type: object UpdateAdvancedPricing: example: price: 100 key: Delivery_OnDemand_GrabApp properties: key: description: Available service type. enum: - Delivery_OnDemand_GrabApp - Delivery_Scheduled_GrabApp - SelfPickUp_OnDemand_GrabApp - DineIn_OnDemand_GrabApp - Delivery_OnDemand_StoreFront - Delivery_Scheduled_StoreFront - SelfPickUp_OnDemand_StoreFront example: Delivery_OnDemand_GrabApp type: string price: description: Price in minor unit. example: 100 format: int64 type: integer title: UpdateAdvancedPricing type: object UpdatePurchasability: example: purchasable: true key: Delivery_OnDemand_GrabApp properties: key: description: Available service type. enum: - Delivery_OnDemand_GrabApp - Delivery_Scheduled_GrabApp - SelfPickUp_OnDemand_GrabApp - DineIn_OnDemand_GrabApp - Delivery_OnDemand_StoreFront - Delivery_Scheduled_StoreFront - SelfPickUp_OnDemand_StoreFront example: Delivery_OnDemand_GrabApp type: string purchasable: type: boolean title: UpdatePurchasability type: object MenuEntity: example: availableStatus: AVAILABLE advancedPricings: - price: 100 key: Delivery_OnDemand_GrabApp - price: 100 key: Delivery_OnDemand_GrabApp purchasabilities: - purchasable: true key: Delivery_OnDemand_GrabApp - purchasable: true key: Delivery_OnDemand_GrabApp price: 200 maxStock: 10 id: ITEM-1 properties: id: description: "The record's ID on the partner system. For example, the item\ \ id in case type is ITEM, modifier id is MODIFIER." example: ITEM-1 type: string price: description: The record's price in minor unit format. example: 200 format: int64 type: integer availableStatus: description: | The record's availableStatus. Note: In order to set an item as "UNAVAILABLE", it is required to update both the `availableStatus` and `maxStock` fields, whereby the `maxStock` value should be set to 0. enum: - AVAILABLE - UNAVAILABLE - UNAVAILABLETODAY type: string maxStock: description: | Available stocks under inventory for this item. Auto reduce when there is order placed for this item. The value **must not exceed** `9999999`. Note: It is necessary to set `maxStock` to 0 if the `availableStatus` of the item is "UNAVAILABLE". Item will be set to "AVAILABLE" if `maxStock` > 0. example: 10 format: int64 type: integer advancedPricings: description: | Price configuration (in minor unit) for different service, order type and channel combination. If a service type does not have a specified price, it will utilize the default price of the item. items: $ref: '#/components/schemas/UpdateAdvancedPricing' type: array purchasabilities: description: | Purchasability is set to true by default for all service type, unless it is explicitly set to false. Modifier will reuse it’s item’s purchasability. items: $ref: '#/components/schemas/UpdatePurchasability' type: array title: MenuEntity type: object MenuEntityError: example: errMsg: get food item fail entityID: ITEM-1 properties: entityID: description: The itemID. example: ITEM-1 type: string errMsg: description: The error message. example: get food item fail type: string title: MenuEntityError type: object EditOrderItemModifier: example: quantity: 1 id: MOD_A properties: id: description: The modifier's external ID in partner system. example: MOD_A type: string quantity: description: "The modifier's quantity. 0 to remove the modifier, 1 to add\ \ or keep the modifier." example: 1 format: int32 type: integer title: EditOrderItemModifier type: object EditOrderItem: example: isExternalItemID: false itemID: IDGFSTI000004qy1490868132306763533#0 quantity: 1 modifiers: - quantity: 1 id: MOD_A - quantity: 1 id: MOD_A status: UPDATED properties: itemID: description: "The item's ID in Grab system that can be obtained from the\ \ [Submit Order Webhook](#tag/submit-order-webhook/operation/submit-order-webhook)\ \ request payload parameters under `items[].grabItemID`, or `items[].outOfStockInstruction.replacementGrabItemID`\ \ for item replacement. External item ID from Partner system is only supported\ \ when `ADDED` status and `isExternalItemID: true`." example: IDGFSTI000004qy1490868132306763533#0 type: string status: description: The item's edited status. Leave empty string if there is no change to the item. enum: - DELETED - UPDATED - ADDED - "" example: UPDATED type: string quantity: description: "The item's quantity. If the item is not being updated or deleted,\ \ use the original quantity." example: 1 format: int64 type: integer isExternalItemID: description: "Only applicable for `ADDED`status. Indicate if the `itemID`\ \ is an external item ID. Grab checks for the items that are mapped to\ \ the provided item ID, considering their availability. If multiple Grab\ \ items are found to be mapped to the provided external item ID, the last\ \ updated item will be chosen. If no suitable record is found, an 400\ \ error will be returned to the partner, indicating that the submitted\ \ external item ID cannot be edited." example: false type: boolean modifiers: description: "The modifiers of the item. Only required when you want to\ \ update the modifiers of the item. Refer [Edit Order](#section/Edit-Order)\ \ for more use cases." items: $ref: '#/components/schemas/EditOrderItemModifier' type: array required: - itemID - status title: EditOrderItem type: object specialOpeningHour_metadata: description: Contains special opening hour info. example: description: New Year Opening Hours properties: description: description: Description of the special opening hour. example: New Year Opening Hours type: string type: object specialOpeningHour_openingHours: description: Store special opening hour period. example: openPeriodType: Period periods: - startTime: 11:30 endTime: 21:30 - startTime: 11:30 endTime: 21:30 properties: openPeriodType: description: The period type for when the outlet is open. enum: - Period - OpenAllDay - ClosedAllDay example: Period type: string periods: description: An array of open periods. Maximum of 3 periods. items: $ref: '#/components/schemas/openPeriod' type: array type: object menuSyncFail_serviceHours: example: errors: - error 1 - error 1 properties: errors: description: An array of strings of error message. items: example: error 1 type: string type: array type: object MenuSyncFailModifier: example: id: modifier_externalID1 errors: - error 1 - error 1 properties: id: example: modifier_externalID1 type: string errors: description: An array of strings of error message. items: example: error 1 type: string type: array title: MenuSyncFailModifier type: object MenuSyncFailModifierGroup: example: id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 properties: id: example: modifierGroup_externalID1 type: string errors: description: An array of strings of error message. items: example: error 2 type: string type: array modifiers: items: $ref: '#/components/schemas/MenuSyncFailModifier' type: array title: MenuSyncFailModifierGroup type: object MenuSyncFailItem: example: id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 properties: id: description: | The item's ID in the partner system. example: item_externalID1 maxLength: 64 type: string errors: description: An array of strings of error message. items: example: error 1 type: string type: array modifierGroups: items: $ref: '#/components/schemas/MenuSyncFailModifierGroup' type: array title: MenuSyncFailItem type: object MenuSyncFailCategory: example: id: category_externalID1 items: - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: item_externalID1 errors: - error 1 - error 1 modifierGroups: - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 - id: modifierGroup_externalID1 modifiers: - id: modifier_externalID1 errors: - error 1 - error 1 - id: modifier_externalID1 errors: - error 1 - error 1 errors: - error 2 - error 2 errors: - error 2 - error 2 properties: id: description: The category's ID that is on the partner system. This ID should be unique with a min length of 1 and max of 64. example: category_externalID1 maxLength: 64 type: string errors: description: An array of strings of error message. items: example: error 2 type: string type: array items: description: "An array of item JSON objects. Max 300 allowed per category.\ \ Refer to [Items](#items) for more information." items: $ref: '#/components/schemas/MenuSyncFailItem' title: syncFailCategoryItems type: array title: MenuSyncFailCategory type: object OrderItem: example: quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 bcrsUnitCount: 1 tax: 144 id: item-1 modifiers: - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 - quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 specifications: less sugar and chili outOfStockInstruction: replacementItemID: ITEM-2 instructionType: SPECIFIC_ITEM replacementGrabItemID: IDGFSTI000004qy1490868132303452210 title: Replace item properties: id: description: | The item's externalID in the partner system. example: item-1 type: string grabItemID: description: | The item's ID in Grab system. Partner can use this field in the `EditOrder` endpoint. Note: The index number (after `#`) is different for the same item with different modifiers. This helps identify items when editing complex orders. This is currently controlled by feature flag until full rollout, for non whitelisted partners, the '#' and index number will not be included. example: IDGFSTI000004qy1490868132306763533#0 type: string quantity: description: The number of the item ordered. example: 1 type: integer price: description: "The price for a single item along with its associated modifiers\ \ in minor unit and tax-inclusive. \n```\nprice = Item price(tax inclusive)\ \ + Modifier price(tax inclusive) | (2241*1.06)+(165*1.06)=2550\n" example: 2550 format: int64 type: integer tax: description: | Tax in minor format for ~~a single item~~ total items along with its associated modifiers (multiply by quantity) . `0` if tax configuration is absent. Refer to FAQs for more details about [tax](#section/Order/How-is-tax-calculated). Note: Currently in Staging environment, the tax is calculated based on the single item. In Production environment, the tax is calculated based on the total items (multiply by quantity). There will be a change in the future to match the logic in Staging environment. ``` tax = Item tax + Modifier tax | (2241*0.06)+(165*0.06) * 1 =144 example: 144 format: int64 type: integer specifications: description: | An extra note for the merchant. Empty if no note from consumer. example: less sugar and chili maxLength: 300 type: string bcrsUnitCount: description: | **For Singapore only.** The number of BCRS (Beverage Container Return Scheme) eligible containers for this item. Only present when the item is BCRS-eligible and the merchant has BCRS enabled; omitted otherwise. This represents how many beverage containers (plastic bottles or metal cans) the item contributes towards the BCRS deposit charge. example: 1 format: int32 type: integer outOfStockInstruction: $ref: '#/components/schemas/outOfStockInstruction' modifiers: description: An array of JSON objects modifiers. items: $ref: '#/components/schemas/OrderItemModifier' required: - id - price - quantity - tax title: modifiers type: array required: - grabItemID - id - price - quantity title: OrderItem type: object OrderCampaign: example: level: item deductedAmount: 475 freeItem: quantity: 1 price: 10 name: Free tote bag id: item-2 appliedItemIDs: - item-1 - item-1 name: 20% off Deal Of the day deductedPart: basket_amount id: id type: percentage campaignNameForMex: DEAL_20%_BURGER_OCT usageCount: 1 mexFundedRatio: 100 properties: id: description: The campaign's ID returned by GrabFood upon campaign creation. maxLength: 64 type: string name: description: The name of the campaign. This campaign name has been automatically generated by Grab for display in the customer app. example: 20% off Deal Of the day maxLength: 60 type: string campaignNameForMex: description: "The campaign name provided by the merchant in [Create Campaign](#tag/create-campaign).\ \ Whitelist required, reach out to your integration manager." example: DEAL_20%_BURGER_OCT type: string level: description: The campaign level. enum: - item - category - order - delivery_fee - bundle example: item type: string type: description: The type of campaign. enum: - percentage - net - delivery - freeItem - bundleSameNet - bundleSamePercentage - bundleSameFixPrice example: percentage type: string usageCount: description: The redemption count of same campaign in this order. example: 1 format: int64 type: integer mexFundedRatio: description: The ratio funded by the merchant in percentage. example: 100 type: integer deductedAmount: description: "The total discount amount in minor unit format applied to\ \ the order based on the campaign's usage count. The amount is rounded\ \ to the nearest value for `VND`, `IDR`, and `THB`, as decimals are not\ \ supported. \n```\ndeductedAmount = Item price(tax inclusive) * 20% discount\ \ | 2375*0.2=475\n" example: 475 format: int64 type: integer deductedPart: description: The part that the campaign is applied. enum: - basket_amount - delivery_fee example: basket_amount type: string appliedItemIDs: description: An array of item IDs that get discount under this campaign. `null` if no item applied in this campaign. items: example: item-1 type: string nullable: true type: array freeItem: $ref: '#/components/schemas/orderFreeItem' title: OrderCampaign type: object OrderPromo: example: promoAmountInMin: 300 code: promo_code mexFundedAmount: 0 promoAmount: 3 name: Order now! targetedPrice: 2550 description: $3 off for entire order! mexFundedRatio: 0 properties: code: description: Promo code applied in the order. example: promo_code type: string description: description: Promo description. example: $3 off for entire order! type: string name: description: Name of the promotion. example: Order now! type: string promoAmount: description: "Promo amount applied in the order, in local currency. This\ \ amount is rounded into whole number." example: 3 format: int64 type: integer mexFundedRatio: description: The merchant's funded ratio of the promo in percentage. example: 0 type: integer mexFundedAmount: description: The merchant's promo fund in the minor unit. Calculated based on merchant funded ratio. example: 0 format: int64 type: integer targetedPrice: description: The subtotal of the order basket in minor unit. example: 2550 format: int64 type: integer promoAmountInMin: description: Promo amount applied in the order in minor unit. example: 300 format: int64 type: integer title: OrderPromo type: object grabDiscount_1: description: "A JSON object reflects the discount in grab app paybill flow that\ \ eater has used. Only applicable for Dine out STO case. `null` if not applicable.\ \ Only present in submitOrder webhook. Not present in [ListOrder](#tag/list-order/operation/list-orders)\ \ response." example: code: GV-RRR32DS level: order mexFundedAmountInMin: 50 appliedItemIDs: - item-1 - item-1 name: $30 order level voucher deductAmountInMin: 200 id: "8937388127" type: DineOutVoucher nullable: true properties: code: description: discount code. example: GV-RRR32DS type: string id: description: discount id. example: "8937388127" type: string name: description: discount name. example: $30 order level voucher type: string deductAmountInMin: description: The total discount amount in minor unit. example: 200 format: int64 type: integer level: description: "discount level, eg, order / item level." enum: - order - item example: order type: string type: description: "discount type, eg, Promo / DineOutVoucher / DineOutDiscount." enum: - Promo - DineOutVoucher - DineOutDiscount example: DineOutVoucher type: string mexFundedAmountInMin: description: The mexFundDiscount in minor unit. example: 50 format: int64 type: integer appliedItemIDs: description: An array of item IDs that get discount under this grabDiscount. `null` if no item applied in this grabDiscount. items: example: item-1 type: string nullable: true type: array title: grabDiscount type: object CancelReason: example: reason: Items are unavailable code: 6 properties: code: $ref: '#/components/schemas/cancelCode' reason: description: | The detailed cancel reason for the specific cancel code. - Items are unavailable - I have too many orders now - My shop is closed - My shop is closing soon example: Items are unavailable type: string title: CancelReason type: object voucher_descriptionInfo: description: A JSON object containing dine-in voucher's description information. example: text: Dine-in cash voucher for use in a transaction. properties: text: description: The description of the dine-in voucher. example: Dine-in cash voucher for use in a transaction. type: string type: object SellingTime: properties: startTime: description: | The selling time group start time in date & time format. UTC format is expected. example: 2022-03-01 10:00:00 type: string endTime: description: | The selling time group end time in date & time format. UTC format is expected. example: 2025-01-21 22:00:00 type: string id: description: | The selling time's ID on the partner system. This ID should be unique with length min 1 and max 64. example: partner-sellingTimeID-1 maxLength: 64 type: string name: description: | The name of the selling time. example: Lunch deal maxLength: 30 type: string serviceHours: $ref: '#/components/schemas/serviceHours' title: SellingTime type: object MenuCategory: properties: id: description: The category's ID that is on the partner system. This ID should be unique. example: category_id maxLength: 64 type: string name: description: The name of the category. example: Value set maxLength: 60 type: string nameTranslation: additionalProperties: $ref: '#/components/schemas/menuTranslation' description: "Translation of the category name. Only support up to 1 translated\ \ language. Refer [Menu Translation](#section/Menu-Translation)." type: object availableStatus: description: "The status for the category. Refer to FAQs for more details\ \ about [availableStatus](#section/Menu/What-is-availableStatus)." enum: - AVAILABLE - UNAVAILABLE - HIDE type: string sellingTimeID: description: The selling time's ID for the category. All items within the category will apply the same selling time unless there is another selling time specified for the item. example: partner-sellingTimeID-1 type: string sequence: description: The sort or display order of the category within the menu. example: 1 type: integer items: description: "An array of item JSON objects. Max 300 allowed per category.\ \ Refer to [Items](#items) for more information." items: $ref: '#/components/schemas/MenuItem' title: menuItems type: array required: - availableStatus - id - items - name - sellingTimeID title: MenuCategory type: object MenuSectionCategoryItem: properties: id: description: | The item's ID in the partner system. example: item_id maxLength: 64 type: string name: description: The name of the item. example: Crispy burger with smoked salmon maxLength: 80 type: string nameTranslation: additionalProperties: $ref: '#/components/schemas/menuTranslation' description: "Translation of the item name. Only support up to 1 translated\ \ language. Refer [Menu Translation](#section/Menu-Translation)." type: object availableStatus: description: | The status for the item that is in the category. Refer to FAQs for more details about [availableStatus](#section/Menu/What-is-availableStatus). Note: In order to set an item as "UNAVAILABLE", it is required to update both the `availableStatus` and `maxStock` fields, whereby the `maxStock` value should be set to 0. enum: - AVAILABLE - UNAVAILABLE - HIDE - UNAVAILABLETODAY type: string description: description: | The description of the item. There is a custom length limit of 2000 for `VN`. example: "Crispy burger with smoked salmon is a delicious twist on a classic\ \ burger. Made with a perfectly cooked beef patty and topped with smoked\ \ salmon, fresh greens, and a creamy sauce." maxLength: 300 type: string descriptionTranslation: additionalProperties: $ref: '#/components/schemas/menuTranslation' description: "Translation of the item description. Only support up to 1\ \ translated language. Refer [Menu Translation](#section/Menu-Translation)." type: object price: description: | The item's price (excluding tax) in minor format. For example: 1900 means $19 with `currency.exponent` as 2. Refer to [FAQ](#section/Menu/Is-the-item-price-with-or-without-tax) for more details. example: 1900 type: integer photos: description: | An array string for the item’s image URL links. Refer to FAQs for more details about [images](#section/Menu/What-are-the-recommended-formats-for-an-item-image). items: example: http://example.com/image_url.jpg type: string type: array specialType: description: | The item's special Tag. Refer to FAQs for more details about [specialType](#section/Menu/What's-specialType). enum: - alcohol - "" type: string example: null taxable: description: | **For Indonesia only.** This field allows the configuration for an item to be marked as tax applicable, and marked item would then be included in a commercial invoice to consumers as per the government's regulations. example: false type: boolean barcode: description: | The barcode Number (GTIN). Max 64 allowed. GTIN must be 8, 12, 13, 14 numeric digits. example: GTIN maxLength: 64 type: string maxStock: description: | Available stocks under inventory for this item. Auto reduce when there is order placed for this item. Empty value implies no limit. Note: It is necessary to set `maxStock` to 0 if the `availableStatus` of the item is "UNAVAILABLE". Item will be set to "AVAILABLE" if `maxStock` > 0. example: 15 type: integer advancedPricing: $ref: '#/components/schemas/advancedPricing' purchasability: $ref: '#/components/schemas/purchasability' modifierGroups: description: "An array of the modifierGroup JSON objects. Max 30 allowed\ \ per item. Refer to [Modifier groups](#modifier-groups) for more information." items: $ref: '#/components/schemas/ModifierGroup' title: modifierGroups type: array required: - availableStatus - id - name - price title: MenuSectionCategoryItem type: object MenuSectionCategory: properties: id: description: The category's ID that is on the partner system. This ID should be unique with a min length of 1 and max of 64. example: category_id maxLength: 64 type: string name: description: The name of the category. example: Value set maxLength: 60 type: string nameTranslation: additionalProperties: $ref: '#/components/schemas/menuTranslation' description: "Translation of the category name. Only support up to 1 translated\ \ language. Refer [Menu Translation](#section/Menu-Translation)." type: object availableStatus: description: "The status for the category. Refer to FAQs for more details\ \ about [availableStatus](#section/Menu/What-is-availableStatus)." enum: - AVAILABLE - UNAVAILABLE - HIDE example: AVAILABLE type: string items: description: "An array of item JSON objects. Max 300 allowed per category.\ \ Refer to [Items](#items) for more information." items: $ref: '#/components/schemas/MenuSectionCategoryItem' title: oldMenuSectionCategoryItems type: array required: - availableStatus - id - items - name title: MenuSectionCategory type: object MenuSection: properties: id: description: | The section's ID in the partner system. example: section_id maxLength: 64 type: string name: description: The name of the section. example: Lunch deal maxLength: 30 type: string serviceHours: $ref: '#/components/schemas/serviceHours' categories: description: "An array of category JSON objects. Max 100 allowed per section.\ \ Refer to [Categories](#categories) for more information." items: $ref: '#/components/schemas/MenuSectionCategory' type: array required: - categories - id - name - serviceHours title: MenuSection type: object payment: example: method: visa fundingType: credit amountInMin: 100 properties: method: description: "payment name, eg, visa, masterCard." example: visa type: string fundingType: description: "fundingType name, eg, credit, debit." example: credit type: string amountInMin: description: amount paid by this payment method. example: 100 format: int64 type: integer title: payment type: object OrderItemModifier: example: quantity: 0 price: 175 bcrsUnitCount: 1 tax: 10 id: modifier-1 properties: id: description: The modifier's ID that is on the partner's system. example: modifier-1 maxLength: 64 type: string price: description: "The modifier's price (tax-inclusive) in minor format. \n```\n\ price = round(165 * (1 + 0.06)) = 175\n" example: 175 format: int64 type: integer tax: description: | Tax in minor format for 1 modifier. Refer to FAQs for more details about [tax](#section/Order/How-is-tax-calculated). ``` tax = 165*0.06=10 example: 10 format: int64 type: integer quantity: description: The number of modifiers present. The value is always 1. enum: - 1 type: integer bcrsUnitCount: description: | **For Singapore only.** The number of BCRS (Beverage Container Return Scheme) eligible containers for this modifier. Only present when the modifier is BCRS-eligible and the merchant has BCRS enabled; omitted otherwise. example: 1 format: int32 type: integer title: OrderItemModifier type: object POSItem: example: quantity: 1 grabItemID: IDGFSTI000004qy1490868132306763533#0 price: 2550 name: name tax: 144 id: item-1 modifiers: - quantity: 1 price: 2550 name: name tax: 144 id: id - quantity: 1 price: 2550 name: name tax: 144 id: id properties: id: description: | The item's externalID in the partner system. example: item-1 type: string grabItemID: description: | The item's ID in Grab system. Partner can use this field in the `EditOrder` endpoint. Note: The index number (after `#`) is different for the same item with different modifiers. This helps identify items when editing complex orders. This is currently controlled by feature flag until full rollout, for non whitelisted partners, the '#' and index number will not be included. example: IDGFSTI000004qy1490868132306763533#0 type: string name: description: The name of the item. type: string quantity: description: The number of the item ordered. example: 1 type: integer modifiers: description: 'The ordered items in an array of JSON Object. ' items: $ref: '#/components/schemas/posItemModifier' title: posItemModifiers type: array price: description: "The price for a single item along with its associated modifiers\ \ in minor unit and tax-inclusive. \n```\nprice = Item price(tax inclusive)\ \ + Modifier price(tax inclusive) | (2241*1.06)+(165*1.06)=2550\n" example: 2550 format: int64 type: integer tax: description: | Tax in minor format for a single item along with its associated modifiers. `0` if tax configuration is absent. Refer to FAQs for more details about [tax](#section/Order/How-is-tax-calculated). ``` tax = Item tax + Modifier tax | (2241*0.06)+(165*0.06)=144 example: 144 format: int64 type: integer title: POSItem type: object MenuItem: properties: id: description: | The item's ID in the partner system. This ID should be unique. example: item_id maxLength: 64 type: string name: description: The name of the item. example: Crispy burger with smoked salmon maxLength: 80 type: string nameTranslation: additionalProperties: $ref: '#/components/schemas/menuTranslation' description: "Translation of the item name. Only support up to 1 translated\ \ language. Refer [Menu Translation](#section/Menu-Translation)." type: object availableStatus: description: | The status for the item. Refer to FAQs for more details about [availableStatus](#section/Menu/What-is-availableStatus). > Note: In order to set an item as `"UNAVAILABLE"`, it is required to update both the `availableStatus` and `maxStock` fields, whereby the `maxStock` should be set to 0. enum: - AVAILABLE - UNAVAILABLE - HIDE - UNAVAILABLETODAY type: string description: description: | The description of the item. There is a custom length limit of 2000 for `VN`. example: "Crispy burger with smoked salmon is a delicious twist on a classic\ \ burger. Made with a perfectly cooked beef patty and topped with smoked\ \ salmon, fresh greens, and a creamy sauce." maxLength: 300 type: string descriptionTranslation: additionalProperties: $ref: '#/components/schemas/menuTranslation' description: "Translation of the item description. Only support up to 1\ \ translated language. Refer [Menu Translation](#section/Menu-Translation)." type: object price: description: | The item's price in minor format. For example: 1900 means $19 with `currency.exponent` as 2. Refer to [FAQ](#section/Menu/Is-the-menu-price-with-or-without-tax) to determine whether the pricing should be tax-inclusive or tax-exclusive. example: 1900 format: int64 type: integer photos: description: | An array string for the item’s image URL link. Only 1 image is supported. Refer to FAQs for more details about [images formats](#section/Menu/What-are-the-recommended-formats-for-an-item-image). items: example: http://example.com/image_url.jpg type: string type: array specialType: description: | The special tag of an item. For implementation details and behavior specific to each value, refer to: **Alcohol & Tobacco** [FAQ](#section/Menu/What-happens-when-an-item-is-tagged-with-specialType-alcohol-or-tobacco) and **Meal for One** [documentation](#section/Meal-for-One). enum: - alcohol - tobacco - meal_for_one - "" type: string example: null taxable: description: | **For Indonesia only.** This field allows the configuration for an item to be marked as tax applicable, and marked item would then be included in a commercial invoice to consumers as per the government's regulations. example: false type: boolean barcode: description: | The barcode Number (GTIN). Max 64 allowed. GTIN must be 8, 12, 13, 14 numeric digits. example: GTIN maxLength: 64 type: string sellingTimeID: description: | The selling time's ID for the item. This value overrides the category's selling time if it is different. Empty value implies the category's selling time will be applied. example: partner-sellingTimeID-1 type: string maxStock: description: | Available stocks under inventory for this item. Auto reduce when there is order placed for this item. The value **must not exceed** `9999999`. Empty value implies no limit. > Note: It is necessary to set `maxStock` to 0 if the `availableStatus` of the item is `"UNAVAILABLE"`. Item will be set to `"AVAILABLE"` if `maxStock` > 0. example: 15 format: int64 type: integer sequence: description: The sort or display order of the item within the menu. example: 1 type: integer advancedPricing: $ref: '#/components/schemas/advancedPricing' purchasability: $ref: '#/components/schemas/purchasability' modifierGroups: description: "An array of the modifierGroup JSON objects. Max 30 allowed\ \ per item. Refer to [Modifier groups](#modifier-groups) for more information." items: $ref: '#/components/schemas/ModifierGroup' title: modifierGroups type: array BCRSUnit: description: | **For Singapore only.** Specifies the number of BCRS (Beverage Container Return Scheme) containers for this item. Only valid when value is greater than 0. If set to 0 or omitted, existing BCRS value will be removed. Refer to [FAQ](#section/Menu/How-do-I-set-up-BCRS-for-items-and-modifiers) for more details. example: 2 format: int32 type: integer required: - availableStatus - id - name - price title: MenuItem type: object ModifierGroup: properties: id: description: The modifier group's ID that is on the partner system. This ID should be unique. example: modifier_group_id maxLength: 64 type: string name: description: The name of the modifier group. example: Add on maxLength: 50 type: string nameTranslation: additionalProperties: $ref: '#/components/schemas/menuTranslation' description: "Translation of the modifier group name. Only support up to\ \ 1 translated language. Refer [Menu Translation](#section/Menu-Translation)." type: object availableStatus: description: "The status for the modifier group. \n\nNote: `HIDE` will only\ \ update the modifier group to unavailable, remove the modifier group\ \ from the menu if you want to hide it entirely.\n> The item may be marked\ \ as `\"UNAVAILABLE\"` if no available modifier to be selected within\ \ the required modifier group where `\"selectionRangeMin\": 1`.\n" enum: - AVAILABLE - UNAVAILABLE - UNAVAILABLETODAY - HIDE type: string selectionRangeMin: description: "The minimum quantity of the modifiers to be selected. Refer\ \ to FAQs for more details about [selection range](#section/Menu/What-does-the-selection-range-do)." example: 0 type: integer selectionRangeMax: description: "The maximum quantity of the modifiers to be selected. Refer\ \ to FAQs for more details about [selection range](#section/Menu/What-does-the-selection-range-do)." example: 1 type: integer sequence: description: The sort or display order of the modifier group within the menu. example: 1 type: integer modifiers: description: "An array of modifier JSON objects. Max 100 per modifierGroup.\ \ Refer to [Modifiers](#modifiers) for more information." items: $ref: '#/components/schemas/MenuModifier' title: modifiers type: array required: - availableStatus - id - name - selectionRangeMax title: ModifierGroup type: object posItemModifier: example: quantity: 1 price: 2550 name: name tax: 144 id: id properties: id: description: | The modifier’s ID in the partner system. type: string name: description: The name of the modifier. type: string quantity: description: The number of the modifier ordered. example: 1 type: integer price: description: | The modifier’s price in minor units and tax-inclusive in the partner system. example: 2550 format: int64 type: integer tax: description: | This is the tax amount on the modifier. If grab needs to show modifier excl-tax price, we’ll use this value to calculate. ``` Price excl-tax = price - tax example: 144 format: int64 type: integer title: posItemModifier type: object MenuModifier: properties: id: description: The modifier's ID that is on the partner's system. This ID should be unique. example: modifier_id maxLength: 64 type: string name: description: The name of the modifier. example: Smoked tuna maxLength: 40 type: string nameTranslation: additionalProperties: $ref: '#/components/schemas/menuTranslation' description: "Translation of the modifier name. Only support up to 1 translated\ \ language. Refer [Menu Translation](#section/Menu-Translation)." type: object availableStatus: description: "The status for the modifier. Refer to FAQs for more details\ \ about [availableStatus](#section/Menu/What-is-availableStatus). \n\n\ Note: `HIDE` will only update the modifier to unavailable, remove the\ \ modifier from the menu if you want to hide it entirely.\n" enum: - AVAILABLE - UNAVAILABLE - UNAVAILABLETODAY - HIDE type: string price: description: "The modifier's price in minor format. Refer to FAQs for more\ \ details about [tax](#section/Menu/Is-the-menu-price-with-or-without-tax)." example: 200 format: int64 type: integer barcode: description: "The barcode Number (GTIN). GTIN must be 8, 12, 13, 14 numeric\ \ digits." example: GTIN maxLength: 64 type: string sequence: description: The sort or display order of the modifier within the menu. example: 1 type: integer advancedPricing: $ref: '#/components/schemas/advancedPricing' BCRSUnit: description: | **For Singapore only.** Specifies the number of BCRS (Beverage Container Return Scheme) containers for this modifier. Only valid when value is greater than 0. If set to 0 or omitted, existing BCRS value will be removed. Refer to [FAQ](#section/Menu/How-do-I-set-up-BCRS-for-items-and-modifiers) for more details. example: 1 format: int32 type: integer required: - availableStatus - id - name title: MenuModifier type: object x-tagGroups: - name: API Overview tags: - scopes - api-env - api-endpoints - api-best-practices - integration-requirements - http-resp-codes - name: SDK library tags: - sdk-intro - go - java - node.js - python - php - name: Authorisation tags: - get-oauth-grab - get-oauth-partner-webhook - name: Self-serve activation tags: - self-serve-activation-intro - activation-best-practices - create-self-serve-journey - push-grab-menu-webhook - push-integration-status-webhook - name: Menu sync tags: - sync-flow - menu-best-practices - get-menu-webhook - update-menu-notification - update-menu-record - menu-sync-state-webhook - trace-menu-sync - name: Order sync tags: - order-types - order-best-practices - submit-order-webhook - accept-reject-order - list-orders - edit-order - push-order-state-webhook - mark-order-ready - update-delivery-state - update-order-ready-time - check-order-cancelable - cancel-order - name: Scan To Order tags: - scan-to-order - pay-bill - scan-to-order-best-practices - sync-pos-order - refund-order - generate-sto-qr-code - name: Store tags: - pause-store - get-store-hour - get-store-status - update-store-delivery-hour - update-store-dine-in-hour - update-store-special-hour - name: Campaigns tags: - campaign-type - campaign-best-practices - create-campaign - update-campaign - list-campaign - delete-campaign - name: Partner Loyalty (Native) tags: - partner-loyalty-native - bind-membership-native - register-membership-native - unbind-membership-native - get-membership-native - get-reward-native - name: Partner Loyalty (Webview) tags: - partner-loyalty-webview - loyalty-webview-best-practices - notify-membership-webview - unlink-membership-webview - get-membership-webview - name: Troubleshooting and FAQs tags: - troubleshooting - faqs - changelog