Variant Groups
Product options and modifiers
Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Query Parameters
Filter by location ID
Filter by group type
Value in
- "EXTRA"
- "VARIANT"
Include variants in response
truePage number
1 <= value1Items per page
1 <= value <= 10020Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/variant-groups"{ "status": "success", "data": { "variantGroups": [ { "id": 0, "locationId": 0, "name": "string", "type": "EXTRA", "description": "string", "min": 0, "max": 0, "isVisible": true, "useChildCoursing": true, "maxOptionsVisible": 5, "variants": [ { "id": 0, "variantGroupId": 0, "name": "string", "price": 0, "defaultSelection": true, "description": "string", "rank": 0, "itemId": 0, "quantity": 0, "allowQuantityChange": true, "minQuantity": 0, "maxQuantity": 0, "quantityCents": 0, "minQuantityCents": 0, "maxQuantityCents": 0, "posOverriddenFields": [ "string" ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } } ], "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 }, "posOverriddenFields": [ "string" ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } } ], "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
Group name
1 <= lengthValue in
- "EXTRA"
- "VARIANT"
0 <= value01 <= valuetrueWhen true, item-based variant children commit with their own coursing_order
false1 <= value <= 1005Initial variants for this group
Optional custom field operations, saved atomically with this record. Omitted values are unchanged; null clears. Use fieldId or a stable key. expectedVersion is optional; supply it to reject conflicting edits.
items <= 100Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/variant-groups" \ -H "Content-Type: application/json" \ -d '{ "locationId": 0, "name": "string", "type": "EXTRA", "variants": [ { "name": "string" } ] }'{ "status": "success", "data": { "id": 0, "locationId": 0, "name": "string", "type": "EXTRA", "description": "string", "min": 0, "max": 0, "isVisible": true, "useChildCoursing": true, "maxOptionsVisible": 5, "variants": [ { "id": 0, "variantGroupId": 0, "name": "string", "price": 0, "defaultSelection": true, "description": "string", "rank": 0, "itemId": 0, "quantity": 0, "allowQuantityChange": true, "minQuantity": 0, "maxQuantity": 0, "quantityCents": 0, "minQuantityCents": 0, "maxQuantityCents": 0, "posOverriddenFields": [ "string" ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } } ], "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 }, "posOverriddenFields": [ "string" ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } }, "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
Variant group ID
^[0-9]+$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/variant-groups/string"{ "status": "success", "data": { "id": 0, "locationId": 0, "name": "string", "type": "EXTRA", "description": "string", "min": 0, "max": 0, "isVisible": true, "useChildCoursing": true, "maxOptionsVisible": 5, "variants": [ { "id": 0, "variantGroupId": 0, "name": "string", "price": 0, "defaultSelection": true, "description": "string", "rank": 0, "itemId": 0, "quantity": 0, "allowQuantityChange": true, "minQuantity": 0, "maxQuantity": 0, "quantityCents": 0, "minQuantityCents": 0, "maxQuantityCents": 0, "posOverriddenFields": [ "string" ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } } ], "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 }, "posOverriddenFields": [ "string" ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } }, "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
Variant group ID
^[0-9]+$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/api/v1/variant-groups/string"{ "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
Variant group ID
^[0-9]+$Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
1 <= length0 <= value1 <= valueWhen true, item-based variant children commit with their own coursing_order
1 <= value <= 100Full replacement of the group's variants. Include every selection to retain. customFields changes the linked item's values; for field-only edits use PATCH /api/v1/variants/{id}?locationId=.
Optional custom field operations, saved atomically with this record. Omitted values are unchanged; null clears. Use fieldId or a stable key. expectedVersion is optional; supply it to reject conflicting edits.
items <= 100Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/api/v1/variant-groups/string" \ -H "Content-Type: application/json" \ -d '{}'{ "status": "success", "data": { "id": 0, "locationId": 0, "name": "string", "type": "EXTRA", "description": "string", "min": 0, "max": 0, "isVisible": true, "useChildCoursing": true, "maxOptionsVisible": 5, "variants": [ { "id": 0, "variantGroupId": 0, "name": "string", "price": 0, "defaultSelection": true, "description": "string", "rank": 0, "itemId": 0, "quantity": 0, "allowQuantityChange": true, "minQuantity": 0, "maxQuantity": 0, "quantityCents": 0, "minQuantityCents": 0, "maxQuantityCents": 0, "posOverriddenFields": [ "string" ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } } ], "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 }, "posOverriddenFields": [ "string" ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } }, "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
1 <= valueQuery Parameters
1 <= valueResponse Body
application/json
application/json
curl -X GET "https://example.com/api/v1/variants/1?locationId=1"{ "status": "success", "data": { "id": 0, "itemId": 0, "locationId": 0, "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
1 <= valueQuery Parameters
1 <= valueRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
items <= 100Response Body
application/json
application/json
curl -X PATCH "https://example.com/api/v1/variants/1?locationId=1" \ -H "Content-Type: application/json" \ -d '{ "customFields": [ {} ] }'{ "status": "success", "data": { "id": 0, "itemId": 0, "locationId": 0, "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } }}