Menu Layouts
Menu structure and organization
Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Query Parameters
Filter by location ID
Page number
1 <= value1Items per page
1 <= value <= 10020Filter by schedule availability (ISO timestamp or "true")
Filter by channels (comma-separated channel types)
Filter to only return templates
Value in
- "true"
- "false"
Exclude templates from results
Value in
- "true"
- "false"
Resolve linked template references in the context
Value in
- "true"
- "false"
Drop product nodes whose item lacks a POS integration_resource_mappings row. Used by storefront to hide items that would silently fail at the POS. No-op when the location has no active POS integration.
Value in
- "true"
- "false"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/menu-layouts"{ "status": "success", "data": { "layouts": [ { "id": "string", "locationId": 0, "context": { "id": null, "type": null, "title": null, "color": null, "data": null, "gridWidth": null, "gridHeight": null, "gridRow": null, "gridCol": null, "gridCols": null, "hideTitle": null, "hideImage": null, "resetToRoot": null, "fontSize": null, "storefrontStyle": null, "productRef": null, "presetVariantItemIds": null, "referenceId": null, "linked": null, "actionType": null, "quantityValue": null, "coursingValue": null, "voucherCode": null, "voucherTitle": null, "targetItemId": null, "customUrl": null, "customUrlTitle": null, "noteText": null, "reportScope": null, "reportDateMode": null, "reportPeriodMode": null, "reportShiftId": null, "targetPrinterGroupId": null, "targetStationTitle": null, "isDynamicGroup": null, "dynamicTagKey": null, "dynamicTagValue": null, "scheduleRules": null, "channelAvailability": null, "_isResolvedReference": null, "_referenceId": null, "_originalReferenceNodeId": null, "_referenceNotFound": null, "actionBars": null, "detachedLayouts": null, "actionBar": null, "actionBarPosition": null }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "sortOrder": 0, "isTemplate": true, "templateName": "string", "usageCount": 0, "scheduleRules": [ { "id": "string", "dayOfWeek": 0, "startTime": "string", "endTime": "string", "active": true } ], "channelAvailability": { "byChannel": { "KIOSK": true, "POS": true, "ONLINE": true, "TAKEAWAY": true, "WOLT": true, "FOODORA": true, "UBER_EATS": true }, "online": true, "qr": true, "kiosk": true, "pos": true, "wolt": true, "foodora": true, "uberEats": true }, "checkoutSwitchEligible": true, "isAvailableNow": true } ], "pagination": { "page": 1, "limit": 1, "total": 0, "totalPages": 0 } }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Location ID
The menu screen configuration to store — a recursive node tree; the root should be a type: "layout" node with the menu title and a data array. Fields documented as attached-on-read are ignored.
Whether this layout should be a reusable template
Display name for the template (required if isTemplate is true)
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/menu-layouts" \ -H "Content-Type: application/json" \ -d '{ "locationId": 0, "context": {} }'{ "status": "success", "data": { "id": "string", "locationId": 0, "context": { "id": null, "type": null, "title": null, "color": null, "data": null, "gridWidth": null, "gridHeight": null, "gridRow": null, "gridCol": null, "gridCols": null, "hideTitle": null, "hideImage": null, "resetToRoot": null, "fontSize": null, "storefrontStyle": null, "productRef": null, "presetVariantItemIds": null, "referenceId": null, "linked": null, "actionType": null, "quantityValue": null, "coursingValue": null, "voucherCode": null, "voucherTitle": null, "targetItemId": null, "customUrl": null, "customUrlTitle": null, "noteText": null, "reportScope": null, "reportDateMode": null, "reportPeriodMode": null, "reportShiftId": null, "targetPrinterGroupId": null, "targetStationTitle": null, "isDynamicGroup": null, "dynamicTagKey": null, "dynamicTagValue": null, "scheduleRules": null, "channelAvailability": null, "_isResolvedReference": null, "_referenceId": null, "_originalReferenceNodeId": null, "_referenceNotFound": null, "actionBars": null, "detachedLayouts": null, "actionBar": null, "actionBarPosition": null }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "sortOrder": 0, "isTemplate": true, "templateName": "string", "usageCount": 0, "scheduleRules": [ { "id": "string", "dayOfWeek": 0, "startTime": "string", "endTime": "string", "active": true } ], "channelAvailability": { "byChannel": { "KIOSK": true, "POS": true, "ONLINE": true, "TAKEAWAY": true, "WOLT": true, "FOODORA": true, "UBER_EATS": true }, "online": true, "qr": true, "kiosk": true, "pos": true, "wolt": true, "foodora": true, "uberEats": true }, "checkoutSwitchEligible": true, "isAvailableNow": true }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Menu layout ID (UUID)
uuidQuery Parameters
Resolve linked template references in the context
Value in
- "true"
- "false"
Drop product nodes whose item lacks a POS integration_resource_mappings row. No-op when the location has no active POS integration.
Value in
- "true"
- "false"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/menu-layouts/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "status": "success", "data": { "id": "string", "locationId": 0, "context": { "id": null, "type": null, "title": null, "color": null, "data": null, "gridWidth": null, "gridHeight": null, "gridRow": null, "gridCol": null, "gridCols": null, "hideTitle": null, "hideImage": null, "resetToRoot": null, "fontSize": null, "storefrontStyle": null, "productRef": null, "presetVariantItemIds": null, "referenceId": null, "linked": null, "actionType": null, "quantityValue": null, "coursingValue": null, "voucherCode": null, "voucherTitle": null, "targetItemId": null, "customUrl": null, "customUrlTitle": null, "noteText": null, "reportScope": null, "reportDateMode": null, "reportPeriodMode": null, "reportShiftId": null, "targetPrinterGroupId": null, "targetStationTitle": null, "isDynamicGroup": null, "dynamicTagKey": null, "dynamicTagValue": null, "scheduleRules": null, "channelAvailability": null, "_isResolvedReference": null, "_referenceId": null, "_originalReferenceNodeId": null, "_referenceNotFound": null, "actionBars": null, "detachedLayouts": null, "actionBar": null, "actionBarPosition": null }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "sortOrder": 0, "isTemplate": true, "templateName": "string", "usageCount": 0, "scheduleRules": [ { "id": "string", "dayOfWeek": 0, "startTime": "string", "endTime": "string", "active": true } ], "channelAvailability": { "byChannel": { "KIOSK": true, "POS": true, "ONLINE": true, "TAKEAWAY": true, "WOLT": true, "FOODORA": true, "UBER_EATS": true }, "online": true, "qr": true, "kiosk": true, "pos": true, "wolt": true, "foodora": true, "uberEats": true }, "checkoutSwitchEligible": true, "isAvailableNow": true }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Menu layout ID (UUID)
uuidQuery Parameters
Force delete a template even if it is being used in menus
Value in
- "true"
- "false"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/api/v1/menu-layouts/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "status": "success", "data": { "deleted": true }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Menu layout ID (UUID)
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The updated menu screen configuration — replaces the stored context wholesale. Same recursive node tree as on create; fields documented as attached-on-read are ignored.
Whether this layout should be a reusable template
Display name for the template
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/api/v1/menu-layouts/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{ "status": "success", "data": { "id": "string", "locationId": 0, "context": { "id": null, "type": null, "title": null, "color": null, "data": null, "gridWidth": null, "gridHeight": null, "gridRow": null, "gridCol": null, "gridCols": null, "hideTitle": null, "hideImage": null, "resetToRoot": null, "fontSize": null, "storefrontStyle": null, "productRef": null, "presetVariantItemIds": null, "referenceId": null, "linked": null, "actionType": null, "quantityValue": null, "coursingValue": null, "voucherCode": null, "voucherTitle": null, "targetItemId": null, "customUrl": null, "customUrlTitle": null, "noteText": null, "reportScope": null, "reportDateMode": null, "reportPeriodMode": null, "reportShiftId": null, "targetPrinterGroupId": null, "targetStationTitle": null, "isDynamicGroup": null, "dynamicTagKey": null, "dynamicTagValue": null, "scheduleRules": null, "channelAvailability": null, "_isResolvedReference": null, "_referenceId": null, "_originalReferenceNodeId": null, "_referenceNotFound": null, "actionBars": null, "detachedLayouts": null, "actionBar": null, "actionBarPosition": null }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "sortOrder": 0, "isTemplate": true, "templateName": "string", "usageCount": 0, "scheduleRules": [ { "id": "string", "dayOfWeek": 0, "startTime": "string", "endTime": "string", "active": true } ], "channelAvailability": { "byChannel": { "KIOSK": true, "POS": true, "ONLINE": true, "TAKEAWAY": true, "WOLT": true, "FOODORA": true, "UBER_EATS": true }, "online": true, "qr": true, "kiosk": true, "pos": true, "wolt": true, "foodora": true, "uberEats": true }, "checkoutSwitchEligible": true, "isAvailableNow": true }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Menu layout ID (UUID)
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/menu-layouts/497f6eca-6276-4993-bfeb-53cbbbba6f08/restore"{ "status": "success", "data": { "id": "string", "locationId": 0, "context": { "id": null, "type": null, "title": null, "color": null, "data": null, "gridWidth": null, "gridHeight": null, "gridRow": null, "gridCol": null, "gridCols": null, "hideTitle": null, "hideImage": null, "resetToRoot": null, "fontSize": null, "storefrontStyle": null, "productRef": null, "presetVariantItemIds": null, "referenceId": null, "linked": null, "actionType": null, "quantityValue": null, "coursingValue": null, "voucherCode": null, "voucherTitle": null, "targetItemId": null, "customUrl": null, "customUrlTitle": null, "noteText": null, "reportScope": null, "reportDateMode": null, "reportPeriodMode": null, "reportShiftId": null, "targetPrinterGroupId": null, "targetStationTitle": null, "isDynamicGroup": null, "dynamicTagKey": null, "dynamicTagValue": null, "scheduleRules": null, "channelAvailability": null, "_isResolvedReference": null, "_referenceId": null, "_originalReferenceNodeId": null, "_referenceNotFound": null, "actionBars": null, "detachedLayouts": null, "actionBar": null, "actionBarPosition": null }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "sortOrder": 0, "isTemplate": true, "templateName": "string", "usageCount": 0, "scheduleRules": [ { "id": "string", "dayOfWeek": 0, "startTime": "string", "endTime": "string", "active": true } ], "channelAvailability": { "byChannel": { "KIOSK": true, "POS": true, "ONLINE": true, "TAKEAWAY": true, "WOLT": true, "FOODORA": true, "UBER_EATS": true }, "online": true, "qr": true, "kiosk": true, "pos": true, "wolt": true, "foodora": true, "uberEats": true }, "checkoutSwitchEligible": true, "isAvailableNow": true }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Menu layout ID (UUID)
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/menu-layouts/497f6eca-6276-4993-bfeb-53cbbbba6f08/usage"{ "status": "success", "data": { "templateId": "string", "usageCount": 0, "usedIn": [ { "menuId": "string", "menuTitle": "string", "linked": true } ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Array of menu layout IDs in the desired display order
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/menu-layouts/reorder" \ -H "Content-Type: application/json" \ -d '{ "layoutIds": [ "string" ] }'{ "status": "success", "data": { "success": true, "layoutIds": [ "string" ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}