You are viewing a non-production environment — the API surface may differ from production.
Ordering API

Tabs

Customer tabs and running bills

GET
/api/v1/tab/{tabId}/payment-methods

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

Tab UUID

Formatuuid

Query Parameters

amountCents*number

Payment amount in cents. 0 is a valid value: the storefront still hits this endpoint when the cart nets to 0 (voucher fully covers the order) and the handler short-circuits with an empty paymentMethodsResponse so the drawer can route to the complimentary settlement path without a PSP method selection.

Range0 <= value
currencyCode*string

ISO 4217 currency code (e.g. SEK, EUR)

countryCode?string

ISO 3166-1 alpha-2 country code (e.g. SE, NL)

tabMemberId?string

Optional tab member UUID. When supplied, the handler resolves the paying user and includes a shopperReference so Adyen returns storedPaymentMethods (saved cards) for the shopper. Omit for guest checkouts.

Formatuuid
channel?string

Optional client platform. Forwarded to Adyen /paymentMethods so it returns platform-native wallets — notably Google Pay (returned only for channel=Android). Omit for web (Adyen defaults to Web behaviour).

Value in

  • "iOS"
  • "Android"
  • "Web"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tab/497f6eca-6276-4993-bfeb-53cbbbba6f08/payment-methods?amountCents=0&currencyCode=string"
{  "status": "success",  "data": {    "paymentMethodsResponse": {},    "clientKey": "string",    "environment": "test",    "adyenIntegrationId": "4cdd3acb-5beb-44ce-a3ea-a62f1db97794",    "freeOrder": true  },  "meta": {}}
POST
/api/v1/tab/cancel

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

purchase_intent_id*string

Purchase intent ID to cancel

Formatuuid
requireConfirmedCancellation?boolean

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tab/cancel" \  -H "Content-Type: application/json" \  -d '{    "purchase_intent_id": "abf79337-36d4-4618-b765-52207318d737"  }'
{  "status": "success",  "data": {    "purchase_intent_id": "abf79337-36d4-4618-b765-52207318d737",    "tab_settlement_id": "9d002bc6-2c1f-40fa-ba63-9cd0d01dfd8e",    "tab_id": "7d6d1470-3aa0-4898-b980-676d9bf5a62e",    "canceled": true  },  "meta": {}}
POST
/api/v1/tab/cancel-all

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tab_id*string

Tab ID to cancel all payments for

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tab/cancel-all" \  -H "Content-Type: application/json" \  -d '{    "tab_id": "7d6d1470-3aa0-4898-b980-676d9bf5a62e"  }'
{  "status": "success",  "data": {    "tab_id": "7d6d1470-3aa0-4898-b980-676d9bf5a62e",    "canceled_count": 0,    "purchase_intent_ids": [      "df4cdde4-a797-45b0-a847-b37397c83ec1"    ]  },  "meta": {}}
POST
/api/v1/tab/pay

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tab_id*string

UUID of the tab to pay for

Formatuuid
tab_member_id?string

ID of the tab member making the payment (UUID). Optional - will be auto-resolved from JWT token if not provided.

payment_method*string

Payment method to use

Value in

  • "prepaid"
  • "invoice"
  • "swish"
  • "terminal"
  • "online"
  • "gift_card"
kitchen_dispatch_items?array<>

Array of kitchen dispatch item IDs to pay for (ITEM mode)

amount_cents?number

Net amount to charge in cents. When pre_discount_amount_cents is omitted, legacy amount-mode voucher gross-up semantics apply.

Range0 <= value
pre_discount_amount_cents?number

Optional pre-discount tab value settled by this amount-payment leg. Enables an explicit zero net charge when a voucher fully covers a split.

Range0 <= value
terminal_id?string

Terminal ID (required for terminal payments)

Formatuuid
return_url?string

Return URL after payment (required for online/swish payments)

Formaturi
tip_amount_cents?integer

Tip amount in cents

Range0 <= value <= 2147483647
Default0
metadata?

Additional metadata for the payment

voucher_codes?array<string>

Voucher codes to apply to the payment

recipient_id?string

Invoice recipient UUID (for invoice payments)

Formatuuid
reference_id?string

Invoice recipient reference UUID — draft invoices accumulate per (recipient, reference)

Formatuuid
gift_card_code?string

Gift card code for gift_card payment method (format: XXXX-XXXX-XXXX)

gift_card_issuer_location_id?integer

Issuing location when a code is shared by eligible locations

Range1 <= value
payment_data?

Adyen payment method data from Drop-in/Components (triggers Advanced flow when present)

cancel_existing_payment?boolean

User confirmed: cancel the in-progress Adyen CS payment and start a new one

save_payment_method?boolean

When true, persist the card token after Adyen Authorised so the user can re-use it. Default false. Honored when location has the instant_pay_v2 feature flag enabled.

selected_saved_payment_method_id?string

UUID of a previously saved payment method to charge. Forwarded to payment-service alongside the Adyen Advanced PSP payload.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tab/pay" \  -H "Content-Type: application/json" \  -d '{    "tab_id": "7d6d1470-3aa0-4898-b980-676d9bf5a62e",    "payment_method": "prepaid"  }'
{  "status": "success",  "data": {    "purchase_intent_id": "abf79337-36d4-4618-b765-52207318d737",    "tab_settlement_id": "9d002bc6-2c1f-40fa-ba63-9cd0d01dfd8e",    "payment_method": "string",    "payment_mode": "ITEM",    "mode_switched": true,    "terminal_id": "1950b55f-ca16-4e1b-b652-2d6bf2615c40",    "amount_cents": 0,    "complimentary": true,    "psp_response": {      "success": true,      "message": "string",      "psp": "string",      "type": "string",      "resultCode": "string",      "action": {},      "pspReference": "string",      "refusalReason": "string",      "refusalReasonCode": "string",      "checkoutUrl": "string",      "checkoutUrlFallback": {        "purchaseIntentId": "string",        "qrCodeSvgBase64": "string"      }    }  },  "meta": {}}
POST
/api/v1/tab/pay/details

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

purchase_intent_id*string

Purchase intent ID from the initial /tab/pay response

Formatuuid
details*

Adyen payment details object: state.data.details from onAdditionalDetails, or { redirectResult } read from the return URL after a full-page redirect

payment_data?string

Optional Adyen paymentData blob for redirect-style flows; the purchase engine falls back to the value it persisted

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tab/pay/details" \  -H "Content-Type: application/json" \  -d '{    "purchase_intent_id": "abf79337-36d4-4618-b765-52207318d737",    "details": {}  }'
{  "status": "success",  "data": {    "resultCode": "string",    "action": {},    "pspReference": "string",    "refusalReason": "string",    "refusalReasonCode": "string",    "state": "string"  },  "meta": {}}
POST
/api/v1/tab/recalculate

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tab_id*string

Tab ID to recalculate balance for

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tab/recalculate" \  -H "Content-Type: application/json" \  -d '{    "tab_id": "7d6d1470-3aa0-4898-b980-676d9bf5a62e"  }'
{  "status": "success",  "data": {    "tab_id": "7d6d1470-3aa0-4898-b980-676d9bf5a62e",    "total_amount_cents": 0,    "paid_amount_cents": 0,    "remaining_balance_cents": 0,    "item_count": 0,    "purchase_count": 0,    "previous_total": 0,    "previous_paid": 0,    "total_changed": true,    "paid_changed": true  },  "meta": {}}
GET
/api/v1/tabs

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Query Parameters

locationId?number

Filter by location ID

state?string

Filter by tab state

Value in

  • "initiated"
  • "started"
  • "instant"
  • "closed"
  • "settled"
  • "aborted"
  • "action_required"
storefrontQrCodeId?string

Filter by table/QR code UUID

page?number

Page number

Range1 <= value
Default1
limit?number

Items per page

Range1 <= value <= 100
Default20

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs"
{  "status": "success",  "data": {    "tabs": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "currentVatBreakdown": [          {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true,            "vatRateBasisPoints": 0          }        ],        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "locationId": 0,        "latestState": "initiated",        "selectedPaymentFlow": "open_tab",        "paymentMode": "ITEM",        "paymentSplit": 2,        "totalAmountCents": 0,        "paidAmountCents": 0,        "remainingBalanceCents": 0,        "storefrontQrCodeId": "string",        "bookingId": "9a471128-954e-4e64-bde9-e8147015df89",        "bookingConfirmationCode": "string",        "tabMembers": [          {            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "storefrontSessionId": "string",            "initiator": true,            "memberType": "string",            "userId": 0,            "retailUserId": 0,            "clientId": "string",            "userEmail": "string",            "userName": "string",            "isEnrolledInLoyalty": true,            "hasCardOnFile": true,            "createdAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z"          }        ],        "memberCount": 0,        "kitchenDispatchItems": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "vatRateBasisPoints": 0,            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",            "saleItemId": 0,            "itemId": 0,            "tabMemberId": "string",            "parentKitchenDispatchItemId": "string",            "price": 0,            "basePrice": 0,            "discount": 0,            "quantity": 0,            "measurement": {              "unit": "string",              "amountMicros": 0,              "priceQuantityMicros": 0,              "unitPriceCents": 0            },            "quantityCents": 0,            "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",            "tabSettlementId": "string",            "settlementState": "string",            "status": "string",            "itemState": "string",            "zeroTicket": true,            "voidedQuantityCents": 0,            "paidAmount": 0,            "coursingOrder": 0,            "createdAt": "2019-08-24T14:15:22Z",            "firedAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "itemTitle": "string",            "itemTitlePrep": "string",            "kitchenSortOrder": 0,            "itemDescription": "string",            "itemImageUrl": "string",            "tabMember": {              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",              "name": "string",              "email": "string",              "phone": "string",              "imageUrl": "string",              "memberType": "string",              "userId": 0,              "retailUserId": 0            },            "comments": [              {                "comment": "string",                "createdAt": "2019-08-24T14:15:22Z",                "tabMemberUUID": "string",                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"              }            ],            "variants": [              {                "id": 0,                "name": "string",                "price": 0,                "quantityCents": 0,                "priceCents": 0              }            ]          }        ],        "kitchenDispatches": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "currentVatBreakdown": [              {                "grossAmountCents": 0,                "vatAmountCents": 0,                "netAmountCents": 0,                "basis": "current",                "vatComplete": true,                "vatRateBasisPoints": 0              }            ],            "customFields": [              {                "fieldId": "string",                "key": "string",                "label": "string",                "group": "string",                "type": "string",                "displayValue": "string",                "value": null,                "version": 0,                "status": "string"              }            ],            "metadata": {              "customFields": {}            },            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",            "locationId": 0,            "dailyOrderNumber": 0,            "latestState": "string",            "createdAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "kitchenDispatchItems": [              {                "amounts": {                  "grossAmountCents": 0,                  "vatAmountCents": 0,                  "netAmountCents": 0,                  "basis": "current",                  "vatComplete": true                },                "vatRateBasisPoints": 0,                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",                "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",                "saleItemId": 0,                "itemId": 0,                "tabMemberId": "string",                "parentKitchenDispatchItemId": "string",                "price": 0,                "basePrice": 0,                "discount": 0,                "quantity": 0,                "measurement": {                  "unit": "string",                  "amountMicros": 0,                  "priceQuantityMicros": 0,                  "unitPriceCents": 0                },                "quantityCents": 0,                "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",                "tabSettlementId": "string",                "settlementState": "string",                "status": "string",                "itemState": "string",                "zeroTicket": true,                "voidedQuantityCents": 0,                "paidAmount": 0,                "coursingOrder": 0,                "createdAt": "2019-08-24T14:15:22Z",                "firedAt": "2019-08-24T14:15:22Z",                "updatedAt": "2019-08-24T14:15:22Z",                "itemTitle": "string",                "itemTitlePrep": "string",                "kitchenSortOrder": 0,                "itemDescription": "string",                "itemImageUrl": "string",                "tabMember": {                  "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",                  "name": "string",                  "email": "string",                  "phone": "string",                  "imageUrl": "string",                  "memberType": "string",                  "userId": 0,                  "retailUserId": 0                },                "comments": [                  {                    "comment": "string",                    "createdAt": "2019-08-24T14:15:22Z",                    "tabMemberUUID": "string",                    "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"                  }                ],                "variants": [                  {                    "id": 0,                    "name": "string",                    "price": 0,                    "quantityCents": 0,                    "priceCents": 0                  }                ]              }            ]          }        ],        "vouchers": [          {            "id": 0,            "discountId": 0,            "discountCode": "string",            "appliedAt": "2019-08-24T14:15:22Z",            "voucherName": "string",            "voucherType": "string",            "typeSpecification": {},            "maxDiscountAmountCents": 0,            "maxUses": 0,            "timesUsed": 0,            "hasUsesLeft": true,            "remainingBalanceCents": 0,            "displayTitle": "string",            "displayDescription": "string",            "displayImageUrl": "string"          }        ],        "notes": [          {            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "entityType": "string",            "entityId": "string",            "note": "string",            "locationId": 0,            "sortOrder": 0,            "createdByRetailerUserId": 0,            "createdByName": "string",            "updatedByRetailerUserId": 0,            "updatedByName": "string",            "createdAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z"          }        ],        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "pagination": {      "page": 1,      "limit": 1,      "total": 0,      "totalPages": 0    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/{id}

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{  "status": "success",  "data": {    "amounts": {      "grossAmountCents": 0,      "vatAmountCents": 0,      "netAmountCents": 0,      "basis": "current",      "vatComplete": true    },    "currentVatBreakdown": [      {        "grossAmountCents": 0,        "vatAmountCents": 0,        "netAmountCents": 0,        "basis": "current",        "vatComplete": true,        "vatRateBasisPoints": 0      }    ],    "customFields": [      {        "fieldId": "string",        "key": "string",        "label": "string",        "group": "string",        "type": "string",        "displayValue": "string",        "value": null,        "version": 0,        "status": "string"      }    ],    "metadata": {      "customFields": {}    },    "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",    "locationId": 0,    "latestState": "initiated",    "selectedPaymentFlow": "open_tab",    "paymentMode": "ITEM",    "paymentSplit": 2,    "totalAmountCents": 0,    "paidAmountCents": 0,    "remainingBalanceCents": 0,    "storefrontQrCodeId": "string",    "bookingId": "9a471128-954e-4e64-bde9-e8147015df89",    "bookingConfirmationCode": "string",    "tabMembers": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "storefrontSessionId": "string",        "initiator": true,        "memberType": "string",        "userId": 0,        "retailUserId": 0,        "clientId": "string",        "userEmail": "string",        "userName": "string",        "isEnrolledInLoyalty": true,        "hasCardOnFile": true,        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "memberCount": 0,    "kitchenDispatchItems": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "vatRateBasisPoints": 0,        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",        "saleItemId": 0,        "itemId": 0,        "tabMemberId": "string",        "parentKitchenDispatchItemId": "string",        "price": 0,        "basePrice": 0,        "discount": 0,        "quantity": 0,        "measurement": {          "unit": "string",          "amountMicros": 0,          "priceQuantityMicros": 0,          "unitPriceCents": 0        },        "quantityCents": 0,        "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",        "tabSettlementId": "string",        "settlementState": "string",        "status": "string",        "itemState": "string",        "zeroTicket": true,        "voidedQuantityCents": 0,        "paidAmount": 0,        "coursingOrder": 0,        "createdAt": "2019-08-24T14:15:22Z",        "firedAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "itemTitle": "string",        "itemTitlePrep": "string",        "kitchenSortOrder": 0,        "itemDescription": "string",        "itemImageUrl": "string",        "tabMember": {          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "name": "string",          "email": "string",          "phone": "string",          "imageUrl": "string",          "memberType": "string",          "userId": 0,          "retailUserId": 0        },        "comments": [          {            "comment": "string",            "createdAt": "2019-08-24T14:15:22Z",            "tabMemberUUID": "string",            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"          }        ],        "variants": [          {            "id": 0,            "name": "string",            "price": 0,            "quantityCents": 0,            "priceCents": 0          }        ]      }    ],    "kitchenDispatches": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "currentVatBreakdown": [          {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true,            "vatRateBasisPoints": 0          }        ],        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "locationId": 0,        "dailyOrderNumber": 0,        "latestState": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "kitchenDispatchItems": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "vatRateBasisPoints": 0,            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",            "saleItemId": 0,            "itemId": 0,            "tabMemberId": "string",            "parentKitchenDispatchItemId": "string",            "price": 0,            "basePrice": 0,            "discount": 0,            "quantity": 0,            "measurement": {              "unit": "string",              "amountMicros": 0,              "priceQuantityMicros": 0,              "unitPriceCents": 0            },            "quantityCents": 0,            "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",            "tabSettlementId": "string",            "settlementState": "string",            "status": "string",            "itemState": "string",            "zeroTicket": true,            "voidedQuantityCents": 0,            "paidAmount": 0,            "coursingOrder": 0,            "createdAt": "2019-08-24T14:15:22Z",            "firedAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "itemTitle": "string",            "itemTitlePrep": "string",            "kitchenSortOrder": 0,            "itemDescription": "string",            "itemImageUrl": "string",            "tabMember": {              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",              "name": "string",              "email": "string",              "phone": "string",              "imageUrl": "string",              "memberType": "string",              "userId": 0,              "retailUserId": 0            },            "comments": [              {                "comment": "string",                "createdAt": "2019-08-24T14:15:22Z",                "tabMemberUUID": "string",                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"              }            ],            "variants": [              {                "id": 0,                "name": "string",                "price": 0,                "quantityCents": 0,                "priceCents": 0              }            ]          }        ]      }    ],    "vouchers": [      {        "id": 0,        "discountId": 0,        "discountCode": "string",        "appliedAt": "2019-08-24T14:15:22Z",        "voucherName": "string",        "voucherType": "string",        "typeSpecification": {},        "maxDiscountAmountCents": 0,        "maxUses": 0,        "timesUsed": 0,        "hasUsesLeft": true,        "remainingBalanceCents": 0,        "displayTitle": "string",        "displayDescription": "string",        "displayImageUrl": "string"      }    ],    "notes": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "entityType": "string",        "entityId": "string",        "note": "string",        "locationId": 0,        "sortOrder": 0,        "createdByRetailerUserId": 0,        "createdByName": "string",        "updatedByRetailerUserId": 0,        "updatedByName": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
PATCH
/api/v1/tabs/{id}

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string
Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

customFields*array<|>

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.

Itemsitems <= 100

Response Body

application/json

curl -X PATCH "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "Content-Type: application/json" \  -d '{    "customFields": [      {}    ]  }'
{  "status": "string",  "data": {    "id": "string",    "locationId": 0,    "customFields": [      {        "fieldId": "string",        "key": "string",        "label": "string",        "group": "string",        "type": "string",        "displayValue": "string",        "value": null,        "version": 0,        "status": "string"      }    ],    "metadata": {      "customFields": {}    }  }}
POST
/api/v1/tabs/{id}/close

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

comment?string

Optional comment explaining why the tab is being closed

force?boolean

If true, forces the tab to close (state becomes "aborted"). If false, normal close (state becomes "closed") and only works on non-closed tabs

Defaultfalse

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/close" \  -H "Content-Type: application/json" \  -d '{}'
{  "status": "success",  "data": {    "amounts": {      "grossAmountCents": 0,      "vatAmountCents": 0,      "netAmountCents": 0,      "basis": "current",      "vatComplete": true    },    "currentVatBreakdown": [      {        "grossAmountCents": 0,        "vatAmountCents": 0,        "netAmountCents": 0,        "basis": "current",        "vatComplete": true,        "vatRateBasisPoints": 0      }    ],    "customFields": [      {        "fieldId": "string",        "key": "string",        "label": "string",        "group": "string",        "type": "string",        "displayValue": "string",        "value": null,        "version": 0,        "status": "string"      }    ],    "metadata": {      "customFields": {}    },    "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",    "locationId": 0,    "latestState": "initiated",    "selectedPaymentFlow": "open_tab",    "paymentMode": "ITEM",    "paymentSplit": 2,    "totalAmountCents": 0,    "paidAmountCents": 0,    "remainingBalanceCents": 0,    "storefrontQrCodeId": "string",    "bookingId": "9a471128-954e-4e64-bde9-e8147015df89",    "bookingConfirmationCode": "string",    "tabMembers": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "storefrontSessionId": "string",        "initiator": true,        "memberType": "string",        "userId": 0,        "retailUserId": 0,        "clientId": "string",        "userEmail": "string",        "userName": "string",        "isEnrolledInLoyalty": true,        "hasCardOnFile": true,        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "memberCount": 0,    "kitchenDispatchItems": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "vatRateBasisPoints": 0,        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",        "saleItemId": 0,        "itemId": 0,        "tabMemberId": "string",        "parentKitchenDispatchItemId": "string",        "price": 0,        "basePrice": 0,        "discount": 0,        "quantity": 0,        "measurement": {          "unit": "string",          "amountMicros": 0,          "priceQuantityMicros": 0,          "unitPriceCents": 0        },        "quantityCents": 0,        "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",        "tabSettlementId": "string",        "settlementState": "string",        "status": "string",        "itemState": "string",        "zeroTicket": true,        "voidedQuantityCents": 0,        "paidAmount": 0,        "coursingOrder": 0,        "createdAt": "2019-08-24T14:15:22Z",        "firedAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "itemTitle": "string",        "itemTitlePrep": "string",        "kitchenSortOrder": 0,        "itemDescription": "string",        "itemImageUrl": "string",        "tabMember": {          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "name": "string",          "email": "string",          "phone": "string",          "imageUrl": "string",          "memberType": "string",          "userId": 0,          "retailUserId": 0        },        "comments": [          {            "comment": "string",            "createdAt": "2019-08-24T14:15:22Z",            "tabMemberUUID": "string",            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"          }        ],        "variants": [          {            "id": 0,            "name": "string",            "price": 0,            "quantityCents": 0,            "priceCents": 0          }        ]      }    ],    "kitchenDispatches": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "currentVatBreakdown": [          {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true,            "vatRateBasisPoints": 0          }        ],        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "locationId": 0,        "dailyOrderNumber": 0,        "latestState": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "kitchenDispatchItems": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "vatRateBasisPoints": 0,            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",            "saleItemId": 0,            "itemId": 0,            "tabMemberId": "string",            "parentKitchenDispatchItemId": "string",            "price": 0,            "basePrice": 0,            "discount": 0,            "quantity": 0,            "measurement": {              "unit": "string",              "amountMicros": 0,              "priceQuantityMicros": 0,              "unitPriceCents": 0            },            "quantityCents": 0,            "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",            "tabSettlementId": "string",            "settlementState": "string",            "status": "string",            "itemState": "string",            "zeroTicket": true,            "voidedQuantityCents": 0,            "paidAmount": 0,            "coursingOrder": 0,            "createdAt": "2019-08-24T14:15:22Z",            "firedAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "itemTitle": "string",            "itemTitlePrep": "string",            "kitchenSortOrder": 0,            "itemDescription": "string",            "itemImageUrl": "string",            "tabMember": {              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",              "name": "string",              "email": "string",              "phone": "string",              "imageUrl": "string",              "memberType": "string",              "userId": 0,              "retailUserId": 0            },            "comments": [              {                "comment": "string",                "createdAt": "2019-08-24T14:15:22Z",                "tabMemberUUID": "string",                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"              }            ],            "variants": [              {                "id": 0,                "name": "string",                "price": 0,                "quantityCents": 0,                "priceCents": 0              }            ]          }        ]      }    ],    "vouchers": [      {        "id": 0,        "discountId": 0,        "discountCode": "string",        "appliedAt": "2019-08-24T14:15:22Z",        "voucherName": "string",        "voucherType": "string",        "typeSpecification": {},        "maxDiscountAmountCents": 0,        "maxUses": 0,        "timesUsed": 0,        "hasUsesLeft": true,        "remainingBalanceCents": 0,        "displayTitle": "string",        "displayDescription": "string",        "displayImageUrl": "string"      }    ],    "notes": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "entityType": "string",        "entityId": "string",        "note": "string",        "locationId": 0,        "sortOrder": 0,        "createdByRetailerUserId": 0,        "createdByName": "string",        "updatedByRetailerUserId": 0,        "updatedByName": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{id}/correct

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

comment?string

Optional comment explaining the correction (rättelse)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/correct" \  -H "Content-Type: application/json" \  -d '{}'
{  "status": "success",  "data": {    "amounts": {      "grossAmountCents": 0,      "vatAmountCents": 0,      "netAmountCents": 0,      "basis": "current",      "vatComplete": true    },    "currentVatBreakdown": [      {        "grossAmountCents": 0,        "vatAmountCents": 0,        "netAmountCents": 0,        "basis": "current",        "vatComplete": true,        "vatRateBasisPoints": 0      }    ],    "customFields": [      {        "fieldId": "string",        "key": "string",        "label": "string",        "group": "string",        "type": "string",        "displayValue": "string",        "value": null,        "version": 0,        "status": "string"      }    ],    "metadata": {      "customFields": {}    },    "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",    "locationId": 0,    "latestState": "initiated",    "selectedPaymentFlow": "open_tab",    "paymentMode": "ITEM",    "paymentSplit": 2,    "totalAmountCents": 0,    "paidAmountCents": 0,    "remainingBalanceCents": 0,    "storefrontQrCodeId": "string",    "bookingId": "9a471128-954e-4e64-bde9-e8147015df89",    "bookingConfirmationCode": "string",    "tabMembers": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "storefrontSessionId": "string",        "initiator": true,        "memberType": "string",        "userId": 0,        "retailUserId": 0,        "clientId": "string",        "userEmail": "string",        "userName": "string",        "isEnrolledInLoyalty": true,        "hasCardOnFile": true,        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "memberCount": 0,    "kitchenDispatchItems": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "vatRateBasisPoints": 0,        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",        "saleItemId": 0,        "itemId": 0,        "tabMemberId": "string",        "parentKitchenDispatchItemId": "string",        "price": 0,        "basePrice": 0,        "discount": 0,        "quantity": 0,        "measurement": {          "unit": "string",          "amountMicros": 0,          "priceQuantityMicros": 0,          "unitPriceCents": 0        },        "quantityCents": 0,        "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",        "tabSettlementId": "string",        "settlementState": "string",        "status": "string",        "itemState": "string",        "zeroTicket": true,        "voidedQuantityCents": 0,        "paidAmount": 0,        "coursingOrder": 0,        "createdAt": "2019-08-24T14:15:22Z",        "firedAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "itemTitle": "string",        "itemTitlePrep": "string",        "kitchenSortOrder": 0,        "itemDescription": "string",        "itemImageUrl": "string",        "tabMember": {          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "name": "string",          "email": "string",          "phone": "string",          "imageUrl": "string",          "memberType": "string",          "userId": 0,          "retailUserId": 0        },        "comments": [          {            "comment": "string",            "createdAt": "2019-08-24T14:15:22Z",            "tabMemberUUID": "string",            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"          }        ],        "variants": [          {            "id": 0,            "name": "string",            "price": 0,            "quantityCents": 0,            "priceCents": 0          }        ]      }    ],    "kitchenDispatches": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "currentVatBreakdown": [          {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true,            "vatRateBasisPoints": 0          }        ],        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "locationId": 0,        "dailyOrderNumber": 0,        "latestState": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "kitchenDispatchItems": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "vatRateBasisPoints": 0,            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",            "saleItemId": 0,            "itemId": 0,            "tabMemberId": "string",            "parentKitchenDispatchItemId": "string",            "price": 0,            "basePrice": 0,            "discount": 0,            "quantity": 0,            "measurement": {              "unit": "string",              "amountMicros": 0,              "priceQuantityMicros": 0,              "unitPriceCents": 0            },            "quantityCents": 0,            "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",            "tabSettlementId": "string",            "settlementState": "string",            "status": "string",            "itemState": "string",            "zeroTicket": true,            "voidedQuantityCents": 0,            "paidAmount": 0,            "coursingOrder": 0,            "createdAt": "2019-08-24T14:15:22Z",            "firedAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "itemTitle": "string",            "itemTitlePrep": "string",            "kitchenSortOrder": 0,            "itemDescription": "string",            "itemImageUrl": "string",            "tabMember": {              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",              "name": "string",              "email": "string",              "phone": "string",              "imageUrl": "string",              "memberType": "string",              "userId": 0,              "retailUserId": 0            },            "comments": [              {                "comment": "string",                "createdAt": "2019-08-24T14:15:22Z",                "tabMemberUUID": "string",                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"              }            ],            "variants": [              {                "id": 0,                "name": "string",                "price": 0,                "quantityCents": 0,                "priceCents": 0              }            ]          }        ]      }    ],    "vouchers": [      {        "id": 0,        "discountId": 0,        "discountCode": "string",        "appliedAt": "2019-08-24T14:15:22Z",        "voucherName": "string",        "voucherType": "string",        "typeSpecification": {},        "maxDiscountAmountCents": 0,        "maxUses": 0,        "timesUsed": 0,        "hasUsesLeft": true,        "remainingBalanceCents": 0,        "displayTitle": "string",        "displayDescription": "string",        "displayImageUrl": "string"      }    ],    "notes": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "entityType": "string",        "entityId": "string",        "note": "string",        "locationId": 0,        "sortOrder": 0,        "createdByRetailerUserId": 0,        "createdByName": "string",        "updatedByRetailerUserId": 0,        "updatedByName": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
PATCH
/api/v1/tabs/{id}/coursing

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

coursingOrder?|

Specific coursing order to set. If omitted, advances to the next available coursing level.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/coursing" \  -H "Content-Type: application/json" \  -d '{}'
{  "status": "success",  "data": {    "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",    "previousCoursingOrder": 0,    "coursingOrder": 0,    "coursingTitle": "string"  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/{id}/debug

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/string/debug"
{  "status": "success",  "data": {    "tab": {},    "balance": {},    "summary": {},    "verification": {},    "purchases": [      {}    ],    "items": [      {}    ]  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{id}/join

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabMember*

User identification using priority system

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/join" \  -H "Content-Type: application/json" \  -d '{    "tabMember": {}  }'
{  "status": "success",  "data": {    "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",    "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",    "isNewMember": true,    "tabState": "string"  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{id}/members

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Request Body

application/json

At least one of userId, email, or phone is required. Resolution priority: userId > email > phone

TypeScript Definitions

Use the request body type in TypeScript.

At least one of userId, email, or phone is required. Resolution priority: userId > email > phone

userId?number

User ID (Priority 1 - direct lookup)

email?string

Email address (Priority 2 - lookup by email)

Formatemail
phone?string

Phone number (Priority 3 - lookup by phone)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/members" \  -H "Content-Type: application/json" \  -d '{}'
{  "status": "success",  "data": {    "tabMember": {      "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",      "storefrontSessionId": "string",      "initiator": true,      "memberType": "string",      "userId": 0,      "retailUserId": 0,      "clientId": "string",      "userEmail": "string",      "userName": "string",      "isEnrolledInLoyalty": true,      "hasCardOnFile": true,      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    },    "isNewMember": true,    "user": {      "id": 0,      "email": "string",      "name": "string",      "phone": "string"    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
DELETE
/api/v1/tabs/{id}/members/{memberUuid}

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid
memberUuid*string

Tab member UUID to remove

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{  "status": "success",  "data": {    "removed": true,    "memberUuid": "97e4090d-352f-4f2b-a94e-17624957abe1"  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
PATCH
/api/v1/tabs/{id}/members/{memberUuid}/contact

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid
memberUuid*string

Tab member UUID

Formatuuid

Request Body

application/json

At least one of email, phone, or name is required. Non-empty fields are written to the tab member's user row; empty fields are ignored. Only applies to anonymous guest users (users.guest=true).

TypeScript Definitions

Use the request body type in TypeScript.

At least one of email, phone, or name is required. Non-empty fields are written to the tab member's user row; empty fields are ignored. Only applies to anonymous guest users (users.guest=true).

email?string

Guest email (overwrites existing non-empty value)

Formatemail
phone?string

Guest phone (overwrites existing non-empty value)

name?string

Guest name (overwrites existing non-empty value)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/497f6eca-6276-4993-bfeb-53cbbbba6f08/contact" \  -H "Content-Type: application/json" \  -d '{}'
{  "status": "success",  "data": {    "tabMember": {      "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",      "userId": 0    },    "user": {      "id": 0,      "email": "string",      "phone": "string",      "name": "string"    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
PATCH
/api/v1/tabs/{id}/members/{memberUuid}/identify

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid
memberUuid*string

Tab member UUID to identify

Formatuuid

Request Body

application/json

At least one of userId, email, or phone is required. Resolution priority: userId > email > phone

TypeScript Definitions

Use the request body type in TypeScript.

At least one of userId, email, or phone is required. Resolution priority: userId > email > phone

userId?number

User ID (Priority 1 - direct lookup)

email?string

Email address (Priority 2 - lookup by email)

Formatemail
phone?string

Phone number (Priority 3 - lookup by phone)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/497f6eca-6276-4993-bfeb-53cbbbba6f08/identify" \  -H "Content-Type: application/json" \  -d '{}'
{  "status": "success",  "data": {    "tabMember": {      "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",      "storefrontSessionId": "string",      "initiator": true,      "memberType": "string",      "userId": 0,      "retailUserId": 0,      "clientId": "string",      "userEmail": "string",      "userName": "string",      "isEnrolledInLoyalty": true,      "hasCardOnFile": true,      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    },    "user": {      "id": 0,      "email": "string",      "name": "string",      "phone": "string"    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
PATCH
/api/v1/tabs/{id}/metadata

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

metadata*

Top-level metadata patch to merge into tabs.metadata

customFields?array<|>

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.

Itemsitems <= 100

Response Body

application/json

curl -X PATCH "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/metadata" \  -H "Content-Type: application/json" \  -d '{    "metadata": {}  }'
{  "success": true,  "data": {    "metadata": {}  },  "meta": {    "requestId": "string",    "timestamp": "string",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{id}/settle

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/settle"
{  "status": "success",  "data": {    "amounts": {      "grossAmountCents": 0,      "vatAmountCents": 0,      "netAmountCents": 0,      "basis": "current",      "vatComplete": true    },    "currentVatBreakdown": [      {        "grossAmountCents": 0,        "vatAmountCents": 0,        "netAmountCents": 0,        "basis": "current",        "vatComplete": true,        "vatRateBasisPoints": 0      }    ],    "customFields": [      {        "fieldId": "string",        "key": "string",        "label": "string",        "group": "string",        "type": "string",        "displayValue": "string",        "value": null,        "version": 0,        "status": "string"      }    ],    "metadata": {      "customFields": {}    },    "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",    "locationId": 0,    "latestState": "initiated",    "selectedPaymentFlow": "open_tab",    "paymentMode": "ITEM",    "paymentSplit": 2,    "totalAmountCents": 0,    "paidAmountCents": 0,    "remainingBalanceCents": 0,    "storefrontQrCodeId": "string",    "bookingId": "9a471128-954e-4e64-bde9-e8147015df89",    "bookingConfirmationCode": "string",    "tabMembers": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "storefrontSessionId": "string",        "initiator": true,        "memberType": "string",        "userId": 0,        "retailUserId": 0,        "clientId": "string",        "userEmail": "string",        "userName": "string",        "isEnrolledInLoyalty": true,        "hasCardOnFile": true,        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "memberCount": 0,    "kitchenDispatchItems": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "vatRateBasisPoints": 0,        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",        "saleItemId": 0,        "itemId": 0,        "tabMemberId": "string",        "parentKitchenDispatchItemId": "string",        "price": 0,        "basePrice": 0,        "discount": 0,        "quantity": 0,        "measurement": {          "unit": "string",          "amountMicros": 0,          "priceQuantityMicros": 0,          "unitPriceCents": 0        },        "quantityCents": 0,        "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",        "tabSettlementId": "string",        "settlementState": "string",        "status": "string",        "itemState": "string",        "zeroTicket": true,        "voidedQuantityCents": 0,        "paidAmount": 0,        "coursingOrder": 0,        "createdAt": "2019-08-24T14:15:22Z",        "firedAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "itemTitle": "string",        "itemTitlePrep": "string",        "kitchenSortOrder": 0,        "itemDescription": "string",        "itemImageUrl": "string",        "tabMember": {          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "name": "string",          "email": "string",          "phone": "string",          "imageUrl": "string",          "memberType": "string",          "userId": 0,          "retailUserId": 0        },        "comments": [          {            "comment": "string",            "createdAt": "2019-08-24T14:15:22Z",            "tabMemberUUID": "string",            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"          }        ],        "variants": [          {            "id": 0,            "name": "string",            "price": 0,            "quantityCents": 0,            "priceCents": 0          }        ]      }    ],    "kitchenDispatches": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "currentVatBreakdown": [          {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true,            "vatRateBasisPoints": 0          }        ],        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "locationId": 0,        "dailyOrderNumber": 0,        "latestState": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "kitchenDispatchItems": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "vatRateBasisPoints": 0,            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",            "saleItemId": 0,            "itemId": 0,            "tabMemberId": "string",            "parentKitchenDispatchItemId": "string",            "price": 0,            "basePrice": 0,            "discount": 0,            "quantity": 0,            "measurement": {              "unit": "string",              "amountMicros": 0,              "priceQuantityMicros": 0,              "unitPriceCents": 0            },            "quantityCents": 0,            "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",            "tabSettlementId": "string",            "settlementState": "string",            "status": "string",            "itemState": "string",            "zeroTicket": true,            "voidedQuantityCents": 0,            "paidAmount": 0,            "coursingOrder": 0,            "createdAt": "2019-08-24T14:15:22Z",            "firedAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "itemTitle": "string",            "itemTitlePrep": "string",            "kitchenSortOrder": 0,            "itemDescription": "string",            "itemImageUrl": "string",            "tabMember": {              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",              "name": "string",              "email": "string",              "phone": "string",              "imageUrl": "string",              "memberType": "string",              "userId": 0,              "retailUserId": 0            },            "comments": [              {                "comment": "string",                "createdAt": "2019-08-24T14:15:22Z",                "tabMemberUUID": "string",                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"              }            ],            "variants": [              {                "id": 0,                "name": "string",                "price": 0,                "quantityCents": 0,                "priceCents": 0              }            ]          }        ]      }    ],    "vouchers": [      {        "id": 0,        "discountId": 0,        "discountCode": "string",        "appliedAt": "2019-08-24T14:15:22Z",        "voucherName": "string",        "voucherType": "string",        "typeSpecification": {},        "maxDiscountAmountCents": 0,        "maxUses": 0,        "timesUsed": 0,        "hasUsesLeft": true,        "remainingBalanceCents": 0,        "displayTitle": "string",        "displayDescription": "string",        "displayImageUrl": "string"      }    ],    "notes": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "entityType": "string",        "entityId": "string",        "note": "string",        "locationId": 0,        "sortOrder": 0,        "createdByRetailerUserId": 0,        "createdByName": "string",        "updatedByRetailerUserId": 0,        "updatedByName": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z",    "amountPaymentsConverted": true,    "amountPaymentsCount": 0,    "newLineItemsCount": 0  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/{id}/timeline

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/timeline"
{  "status": "success",  "data": {    "events": [      {        "uuid": "string",        "source": "tab_event",        "eventType": "string",        "description": "string",        "createdAt": "2019-08-24T14:15:22Z",        "metadata": {}      }    ]  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/checkout-summary

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

Tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabMember*

Tab member identification. Provide at least one identifier. Priority: id > email > phone > identifier

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/checkout-summary" \  -H "Content-Type: application/json" \  -d '{    "tabMember": {}  }'
{  "status": "success",  "data": {    "paymentMode": "ITEM",    "tabId": "string",    "tabMemberId": "string",    "clientId": "string",    "items": [      {        "measurement": {          "amountMicros": 0,          "unit": "string"        },        "kitchenDispatchItemId": "string",        "itemId": 0,        "title": "string",        "quantity": 0,        "basePrice": 0,        "variantsPrice": 0,        "totalPrice": 0,        "discount": 0,        "vat": 0,        "vatId": 0,        "vatAmountCents": 0,        "variants": [          {            "id": 0,            "name": "string",            "quantity_cents": 0,            "price_cents": 0,            "comments": [              "string"            ],            "variants": [              {}            ]          }        ],        "comments": [          "string"        ]      }    ],    "totals": {      "subtotal": 0,      "discounts": 0,      "totalAmountInCents": 0,      "vatBreakdown": {        "12 %": 1200,        "25 %": 500      }    },    "kitchenDispatchItems": [      "string"    ],    "paymentSplit": 0,    "totalAmountCents": 0,    "splitAmountCents": 0,    "paidAmountCents": 0,    "remainingBalanceCents": 0,    "paidSplits": 0,    "remainingSplits": 0,    "vatBreakdown": {      "property1": 0,      "property2": 0    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/{tabId}/discounts

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid

Query Parameters

changeType?string

Filter by type of price change

Value in

  • "DISCOUNT_PERCENTAGE"
  • "DISCOUNT_FIXED"
  • "PRICE_SET"
  • "DISCOUNT_REMOVED"
appliedBy?integer

Filter by retailer user ID who applied the change

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/discounts"
{  "status": "success",  "data": {    "events": [      {        "id": 0,        "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade",        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "appliedBy": {          "userId": 0,          "name": "string",          "email": "user@example.com"        },        "previousPrice": 0,        "newPrice": 0,        "previousDiscount": 0,        "newDiscount": 0,        "basePrice": 0,        "changeType": "DISCOUNT_PERCENTAGE",        "discountPercentage": 0,        "discountAmountCents": 0,        "reasonCode": "PRICE_MATCH",        "notes": "string",        "createdAt": "2019-08-24T14:15:22Z"      }    ]  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/{tabId}/items

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items"
{  "status": "success",  "data": {    "stateValidToEpoch": 0,    "selectedItems": [      {        "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",        "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",        "itemId": "f11b669d-7201-4c21-88af-d85092f0c005",        "isLocked": true      }    ],    "hasLockedMembers": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
DELETE
/api/v1/tabs/{tabId}/items/{itemId}/discount

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab containing the item

Formatuuid
itemId*string

UUID of the kitchen dispatch item to restore

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

reasonCode*string

Reason code for removing the discount

notes?string

Optional notes

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/497f6eca-6276-4993-bfeb-53cbbbba6f08/discount" \  -H "Content-Type: application/json" \  -d '{    "reasonCode": "string"  }'
{  "status": "success",  "data": {    "priceEvent": {      "id": 0,      "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade",      "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",      "appliedBy": {        "userId": 0,        "name": "string",        "email": "user@example.com"      },      "previousPrice": 0,      "newPrice": 0,      "previousDiscount": 0,      "newDiscount": 0,      "basePrice": 0,      "changeType": "DISCOUNT_PERCENTAGE",      "discountPercentage": 0,      "discountAmountCents": 0,      "reasonCode": "PRICE_MATCH",      "notes": "string",      "createdAt": "2019-08-24T14:15:22Z"    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
PUT
/api/v1/tabs/{tabId}/items/{itemId}/price

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab containing the item

Formatuuid
itemId*string

UUID of the kitchen dispatch item to modify

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

action*string

Type of action: "discount" for applying discounts, "set_price" for setting arbitrary price

Value in

  • "discount"
  • "set_price"
discountType?string

Required when action is "discount": type of discount to apply

Value in

  • "percentage"
  • "fixed"
value?number

Required when action is "discount": percentage (1-100) or cents for fixed discount

Range0 <= value
priceInCents?integer

Required when action is "set_price": new price in cents

Range0 <= value
reasonCode*string

Required reason code explaining why the price is being adjusted

notes?string

Optional notes providing additional context for the price adjustment

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/497f6eca-6276-4993-bfeb-53cbbbba6f08/price" \  -H "Content-Type: application/json" \  -d '{    "action": "discount",    "reasonCode": "PRICE_MATCH"  }'
{  "status": "success",  "data": {    "priceEvent": {      "id": 0,      "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade",      "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",      "appliedBy": {        "userId": 0,        "name": "string",        "email": "user@example.com"      },      "previousPrice": 0,      "newPrice": 0,      "previousDiscount": 0,      "newDiscount": 0,      "basePrice": 0,      "changeType": "DISCOUNT_PERCENTAGE",      "discountPercentage": 0,      "discountAmountCents": 0,      "reasonCode": "PRICE_MATCH",      "notes": "string",      "createdAt": "2019-08-24T14:15:22Z"    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/{tabId}/items/{itemId}/price-history

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid
itemId*string

UUID of the kitchen dispatch item

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/497f6eca-6276-4993-bfeb-53cbbbba6f08/price-history"
{  "status": "success",  "data": {    "events": [      {        "id": 0,        "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade",        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "appliedBy": {          "userId": 0,          "name": "string",          "email": "user@example.com"        },        "previousPrice": 0,        "newPrice": 0,        "previousDiscount": 0,        "newDiscount": 0,        "basePrice": 0,        "changeType": "DISCOUNT_PERCENTAGE",        "discountPercentage": 0,        "discountAmountCents": 0,        "reasonCode": "PRICE_MATCH",        "notes": "string",        "createdAt": "2019-08-24T14:15:22Z"      }    ]  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/items/batch

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabMemberId*string

UUID of the tab member performing the batch operation

Formatuuid
clientId*string

UUID of the client (from storefront sessions)

Formatuuid
claim?array<string>

Item IDs to claim (UUIDs in ITEM mode, virtual IDs like "split-index-N" in AMOUNT mode)

unclaim?array<string>

Item IDs to unclaim (UUIDs in ITEM mode, virtual IDs like "split-index-N" in AMOUNT mode)

mode?string

Payment mode for the batch operation

Value in

  • "ITEM"
  • "AMOUNT"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/batch" \  -H "Content-Type: application/json" \  -d '{    "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",    "clientId": "5e505642-9024-474d-9434-e5a44f505cc5"  }'
{  "status": "success",  "data": {    "success": true,    "stateValidToEpoch": 0,    "selectedItems": [      {        "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",        "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",        "itemId": "f11b669d-7201-4c21-88af-d85092f0c005",        "isLocked": true      }    ],    "hasLockedMembers": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
PUT
/api/v1/tabs/{tabId}/items/bulk-price

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab containing the items

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

items*array<>

Array of items to update. Each item should specify exactly one of: newPrice, discountPercent, or removeDiscount

Items1 <= items
reasonCode*string

Reason code explaining why the prices are being adjusted

notes?string

Optional notes providing additional context for the price adjustments

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/bulk-price" \  -H "Content-Type: application/json" \  -d '{    "items": [      {        "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade"      }    ],    "reasonCode": "PRICE_MATCH"  }'
{  "status": "success",  "data": {    "results": [      {        "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade",        "previousPrice": 0,        "newPrice": 0,        "changeType": "DISCOUNT_PERCENTAGE",        "success": true,        "error": "string"      }    ],    "totalUpdated": 0  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/items/claim

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabMemberId*string

UUID of the tab member claiming the items

Formatuuid
clientId*string

UUID of the client (from storefront sessions) for storage efficiency

Formatuuid
items*array<string>

Array of item IDs to claim. In ITEM mode: inventory item UUIDs. In AMOUNT mode: virtual IDs like "split-index-0".

Items1 <= items
mode?string

Payment mode: ITEM for individual item claiming, AMOUNT for split claiming

Value in

  • "ITEM"
  • "AMOUNT"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/claim" \  -H "Content-Type: application/json" \  -d '{    "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",    "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",    "items": [      "string"    ]  }'
{  "status": "success",  "data": {    "success": true,    "stateValidToEpoch": 0,    "selectedItems": [      {        "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",        "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",        "itemId": "f11b669d-7201-4c21-88af-d85092f0c005",        "isLocked": true      }    ],    "hasLockedMembers": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/items/lock

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabMemberId*|

UUID of the tab member to lock/unlock selections for (nullable)

clientId?string

UUID of the client (fallback identifier when tabMemberId is not available)

Formatuuid
claimAfterUnlock?boolean

Force-cancel another member's checkout. When true and the caller holds no locked items, the other member's in-flight payment is cancelled, their items are unlocked and re-claimed to the caller. Without it, an unlock from a caller with no locked items changes nothing.

skipCascadeCancel?boolean

When true, bypass the auto-cancel of any payment_in_progress settlements for the unlocked member. Use only for staff force-unlock flows. Default false.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/lock" \  -H "Content-Type: application/json" \  -d '{}'
{  "status": "success",  "data": {    "success": true,    "stateValidToEpoch": 0,    "selectedItems": [      {        "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",        "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",        "itemId": "f11b669d-7201-4c21-88af-d85092f0c005",        "isLocked": true      }    ],    "hasLockedMembers": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/items/split-mode

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

split*string

Group-coordination split mode (advisory, distinct from authoritative paymentMode). Projected into the per-tab LiveObject so all clients/late-joiners land in the same screen.

Value in

  • "NONE"
  • "BY_ITEM"
  • "BY_AMOUNT"
  • "BY_AMOUNT_FREE"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/split-mode" \  -H "Content-Type: application/json" \  -d '{    "split": "NONE"  }'
{  "status": "success",  "data": {    "split": "NONE"  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/items/unclaim

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabMemberId*string

UUID of the tab member unclaiming the items

Formatuuid
items*array<string>

Array of item IDs to unclaim. In ITEM mode: inventory item UUIDs. In AMOUNT mode: virtual IDs like "split-index-0".

Items1 <= items
mode?string

Payment mode: ITEM for individual item unclaiming, AMOUNT for split unclaiming

Value in

  • "ITEM"
  • "AMOUNT"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/unclaim" \  -H "Content-Type: application/json" \  -d '{    "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",    "items": [      "string"    ]  }'
{  "status": "success",  "data": {    "success": true,    "stateValidToEpoch": 0,    "selectedItems": [      {        "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",        "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",        "itemId": "f11b669d-7201-4c21-88af-d85092f0c005",        "isLocked": true      }    ],    "hasLockedMembers": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/items/unlock

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

UUID of the tab

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabMemberId*|

UUID of the tab member to lock/unlock selections for (nullable)

clientId?string

UUID of the client (fallback identifier when tabMemberId is not available)

Formatuuid
claimAfterUnlock?boolean

Force-cancel another member's checkout. When true and the caller holds no locked items, the other member's in-flight payment is cancelled, their items are unlocked and re-claimed to the caller. Without it, an unlock from a caller with no locked items changes nothing.

skipCascadeCancel?boolean

When true, bypass the auto-cancel of any payment_in_progress settlements for the unlocked member. Use only for staff force-unlock flows. Default false.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/unlock" \  -H "Content-Type: application/json" \  -d '{}'
{  "status": "success",  "data": {    "success": true,    "stateValidToEpoch": 0,    "selectedItems": [      {        "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",        "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",        "itemId": "f11b669d-7201-4c21-88af-d85092f0c005",        "isLocked": true      }    ],    "hasLockedMembers": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/move/dispatch

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

Source tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

dispatchId*string

Kitchen dispatch UUID to move

Formatuuid
destinationTableId*string

Destination table (storefront_qr_code) UUID

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/move/dispatch" \  -H "Content-Type: application/json" \  -d '{    "dispatchId": "a1a7028f-f483-4bbb-b8e5-fe878bddb1ae",    "destinationTableId": "6f04e25a-638a-4d91-8794-22017d249884"  }'
{  "status": "success",  "data": {    "success": true,    "message": "string",    "sourceTabId": "d534b98c-34eb-499c-8f94-8a0fced403fc",    "destinationTabId": "36d4982c-e2f5-4ae9-9d10-139882ebfa83",    "movedItemCount": 0,    "tabMerged": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/move/items

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

Source tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

itemIds*array<>

Array of kitchen_dispatch_item UUIDs to move

Items1 <= items
destinationTableId*string

Destination table (storefront_qr_code) UUID

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/move/items" \  -H "Content-Type: application/json" \  -d '{    "itemIds": [      "0e636f28-7bba-4a96-9d8b-f3b7350a8339"    ],    "destinationTableId": "6f04e25a-638a-4d91-8794-22017d249884"  }'
{  "status": "success",  "data": {    "success": true,    "message": "string",    "sourceTabId": "d534b98c-34eb-499c-8f94-8a0fced403fc",    "destinationTabId": "36d4982c-e2f5-4ae9-9d10-139882ebfa83",    "movedItemCount": 0,    "tabMerged": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/move/tab

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

Source tab UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

destinationTableId*string

Destination table (storefront_qr_code) UUID

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/move/tab" \  -H "Content-Type: application/json" \  -d '{    "destinationTableId": "6f04e25a-638a-4d91-8794-22017d249884"  }'
{  "status": "success",  "data": {    "success": true,    "message": "string",    "sourceTabId": "d534b98c-34eb-499c-8f94-8a0fced403fc",    "destinationTabId": "36d4982c-e2f5-4ae9-9d10-139882ebfa83",    "movedItemCount": 0,    "tabMerged": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/{tabId}/payment-split

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

The UUID of the tab

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

payment_split*integer

Number of ways to split the tab (2-10)

Range2 <= value <= 10

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/payment-split" \  -H "Content-Type: application/json" \  -d '{    "payment_split": 2  }'
{  "status": "success",  "data": {    "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",    "paymentMode": "AMOUNT",    "paymentSplit": 0,    "totalAmountCents": 0,    "splitAmountCents": 0,    "remainingBalanceCents": 0,    "paidSplits": 0,    "remainingSplits": 0  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
DELETE
/api/v1/tabs/{tabId}/payment-split

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

The UUID of the tab

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/payment-split"
{  "status": "success",  "data": {    "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",    "paymentMode": "ITEM",    "previousPaymentSplit": 0,    "clearedSelections": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/{tabId}/purchases

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

Tab UUID

Formatuuid

Query Parameters

locationId*number

Location ID

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/497f6eca-6276-4993-bfeb-53cbbbba6f08/purchases?locationId=0"
{  "status": "success",  "data": {    "purchases": [      {        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "id": 0,        "intentId": "string",        "purchasedAt": "2019-08-24T14:15:22Z",        "state": "string",        "currencyCode": "string",        "payerUuid": "a45e524a-bc7b-4b01-8481-9567575634fd",        "payerName": "string",        "payerEmail": "string",        "totalAmountCents": 0,        "lineItemCount": 0      }    ],    "summary": {      "totalPaidCents": 0,      "purchaseCount": 0,      "totalItemCount": 0    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/check-exists

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

locationId*number

Restaurant location ID

qrCodeId*string

QR code UUID for the table

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/check-exists" \  -H "Content-Type: application/json" \  -d '{    "locationId": 0,    "qrCodeId": "8a619d64-dbe8-4c9d-9490-babe22a53a28"  }'
{  "status": "success",  "data": {    "hasActiveTab": true,    "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",    "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",    "isNewMember": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/closed

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Query Parameters

locationId?number

Filter by location ID (required)

startDate?string

ISO start of close-date range

endDate?string

ISO end of close-date range

closeType?string

Filter by close type: 'correction' (rättelse) or 'force' (regular force-close). Omit for both.

Value in

  • "correction"
  • "force"
commentSearch?string

Case-insensitive substring match on the close comment

minTotalCents?number

Minimum tab total (cents)

maxTotalCents?number

Maximum tab total (cents)

closedByRetailerUserId?number

Filter by the staff member who closed the tab

tableName?string

Comma-separated table names to filter by

tabType?string

Comma-separated tab types/channels (table, over_the_counter, takeaway)

page?number

Page number

Range1 <= value
Default1
limit?number

Items per page

Range1 <= value <= 1000
Default50

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/closed"
{  "status": "success",  "data": {    "tabs": [      {        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "locationId": 0,        "totalAmountCents": 0,        "paidAmountCents": 0,        "tabType": "string",        "storefrontQrCodeId": "string",        "tableName": "string",        "closedAt": "string",        "closeType": "correction",        "comment": "string",        "closedByRetailerUserId": 0,        "closedByName": "string",        "closedByEmail": "string"      }    ],    "summary": {      "totalAmountCentsSum": 0    },    "pagination": {      "page": 1,      "limit": 1,      "total": 0,      "totalPages": 0    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/correct-bulk

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabIds*array<>

Tab UUIDs to correct (rättelse)

Items1 <= items <= 500
locationId*number

Location the tabs belong to

comment?string

Optional shared reason applied to all corrected tabs

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/correct-bulk" \  -H "Content-Type: application/json" \  -d '{    "tabIds": [      "67ae9b3f-425f-4a50-9796-2c2ea6b852df"    ],    "locationId": 0  }'
{  "status": "success",  "data": {    "correctedCount": 0,    "correctedTabIds": [      "string"    ]  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/debug/recent

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Query Parameters

limit?number

Number of recent tabs to return (max 20)

Range1 <= value <= 20
Default5
locationId?number

Filter by location ID

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/debug/recent"
{  "status": "success",  "data": {    "tabs": [      {}    ],    "query": {}  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/join-if-existing

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

locationId*number

Restaurant location ID

qrCodeId*string

QR code UUID for the table

Formatuuid
tabMember*

User identification using priority system

tabId?string

Specific tab UUID to join (when user selects from multiple joinable tabs). Omit to auto-join or get the list.

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/join-if-existing" \  -H "Content-Type: application/json" \  -d '{    "locationId": 0,    "qrCodeId": "8a619d64-dbe8-4c9d-9490-babe22a53a28",    "tabMember": {}  }'
{  "status": "success",  "data": {    "hasActiveTab": true,    "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",    "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",    "isNewMember": true,    "joinableTabs": [      {        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "selectedPaymentFlow": "string",        "tableName": "string",        "memberCount": 0,        "totalAmountCents": 0,        "createdAt": "2019-08-24T14:15:22Z",        "members": [          {            "userName": "string"          }        ]      }    ]  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/mine

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/mine"
{  "status": "success",  "data": {    "tabs": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "currentVatBreakdown": [          {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true,            "vatRateBasisPoints": 0          }        ],        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "locationId": 0,        "latestState": "initiated",        "selectedPaymentFlow": "open_tab",        "paymentMode": "ITEM",        "paymentSplit": 2,        "totalAmountCents": 0,        "paidAmountCents": 0,        "remainingBalanceCents": 0,        "storefrontQrCodeId": "string",        "bookingId": "9a471128-954e-4e64-bde9-e8147015df89",        "bookingConfirmationCode": "string",        "tabMembers": [          {            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "storefrontSessionId": "string",            "initiator": true,            "memberType": "string",            "userId": 0,            "retailUserId": 0,            "clientId": "string",            "userEmail": "string",            "userName": "string",            "isEnrolledInLoyalty": true,            "hasCardOnFile": true,            "createdAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z"          }        ],        "memberCount": 0,        "kitchenDispatchItems": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "vatRateBasisPoints": 0,            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",            "saleItemId": 0,            "itemId": 0,            "tabMemberId": "string",            "parentKitchenDispatchItemId": "string",            "price": 0,            "basePrice": 0,            "discount": 0,            "quantity": 0,            "measurement": {              "unit": "string",              "amountMicros": 0,              "priceQuantityMicros": 0,              "unitPriceCents": 0            },            "quantityCents": 0,            "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",            "tabSettlementId": "string",            "settlementState": "string",            "status": "string",            "itemState": "string",            "zeroTicket": true,            "voidedQuantityCents": 0,            "paidAmount": 0,            "coursingOrder": 0,            "createdAt": "2019-08-24T14:15:22Z",            "firedAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "itemTitle": "string",            "itemTitlePrep": "string",            "kitchenSortOrder": 0,            "itemDescription": "string",            "itemImageUrl": "string",            "tabMember": {              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",              "name": "string",              "email": "string",              "phone": "string",              "imageUrl": "string",              "memberType": "string",              "userId": 0,              "retailUserId": 0            },            "comments": [              {                "comment": "string",                "createdAt": "2019-08-24T14:15:22Z",                "tabMemberUUID": "string",                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"              }            ],            "variants": [              {                "id": 0,                "name": "string",                "price": 0,                "quantityCents": 0,                "priceCents": 0              }            ]          }        ],        "kitchenDispatches": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "currentVatBreakdown": [              {                "grossAmountCents": 0,                "vatAmountCents": 0,                "netAmountCents": 0,                "basis": "current",                "vatComplete": true,                "vatRateBasisPoints": 0              }            ],            "customFields": [              {                "fieldId": "string",                "key": "string",                "label": "string",                "group": "string",                "type": "string",                "displayValue": "string",                "value": null,                "version": 0,                "status": "string"              }            ],            "metadata": {              "customFields": {}            },            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",            "locationId": 0,            "dailyOrderNumber": 0,            "latestState": "string",            "createdAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "kitchenDispatchItems": [              {                "amounts": {                  "grossAmountCents": 0,                  "vatAmountCents": 0,                  "netAmountCents": 0,                  "basis": "current",                  "vatComplete": true                },                "vatRateBasisPoints": 0,                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",                "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",                "saleItemId": 0,                "itemId": 0,                "tabMemberId": "string",                "parentKitchenDispatchItemId": "string",                "price": 0,                "basePrice": 0,                "discount": 0,                "quantity": 0,                "measurement": {                  "unit": "string",                  "amountMicros": 0,                  "priceQuantityMicros": 0,                  "unitPriceCents": 0                },                "quantityCents": 0,                "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",                "tabSettlementId": "string",                "settlementState": "string",                "status": "string",                "itemState": "string",                "zeroTicket": true,                "voidedQuantityCents": 0,                "paidAmount": 0,                "coursingOrder": 0,                "createdAt": "2019-08-24T14:15:22Z",                "firedAt": "2019-08-24T14:15:22Z",                "updatedAt": "2019-08-24T14:15:22Z",                "itemTitle": "string",                "itemTitlePrep": "string",                "kitchenSortOrder": 0,                "itemDescription": "string",                "itemImageUrl": "string",                "tabMember": {                  "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",                  "name": "string",                  "email": "string",                  "phone": "string",                  "imageUrl": "string",                  "memberType": "string",                  "userId": 0,                  "retailUserId": 0                },                "comments": [                  {                    "comment": "string",                    "createdAt": "2019-08-24T14:15:22Z",                    "tabMemberUUID": "string",                    "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"                  }                ],                "variants": [                  {                    "id": 0,                    "name": "string",                    "price": 0,                    "quantityCents": 0,                    "priceCents": 0                  }                ]              }            ]          }        ],        "vouchers": [          {            "id": 0,            "discountId": 0,            "discountCode": "string",            "appliedAt": "2019-08-24T14:15:22Z",            "voucherName": "string",            "voucherType": "string",            "typeSpecification": {},            "maxDiscountAmountCents": 0,            "maxUses": 0,            "timesUsed": 0,            "hasUsesLeft": true,            "remainingBalanceCents": 0,            "displayTitle": "string",            "displayDescription": "string",            "displayImageUrl": "string"          }        ],        "notes": [          {            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "entityType": "string",            "entityId": "string",            "note": "string",            "locationId": 0,            "sortOrder": 0,            "createdByRetailerUserId": 0,            "createdByName": "string",            "updatedByRetailerUserId": 0,            "updatedByName": "string",            "createdAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z"          }        ],        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "location": {          "id": 0,          "name": "string",          "logoImageUrl": "string",          "currency": "string",          "timezone": "string"        }      }    ]  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/mine/{id}

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Tab UUID

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/mine/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{  "status": "success",  "data": {    "amounts": {      "grossAmountCents": 0,      "vatAmountCents": 0,      "netAmountCents": 0,      "basis": "current",      "vatComplete": true    },    "currentVatBreakdown": [      {        "grossAmountCents": 0,        "vatAmountCents": 0,        "netAmountCents": 0,        "basis": "current",        "vatComplete": true,        "vatRateBasisPoints": 0      }    ],    "customFields": [      {        "fieldId": "string",        "key": "string",        "label": "string",        "group": "string",        "type": "string",        "displayValue": "string",        "value": null,        "version": 0,        "status": "string"      }    ],    "metadata": {      "customFields": {}    },    "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",    "locationId": 0,    "latestState": "initiated",    "selectedPaymentFlow": "open_tab",    "paymentMode": "ITEM",    "paymentSplit": 2,    "totalAmountCents": 0,    "paidAmountCents": 0,    "remainingBalanceCents": 0,    "storefrontQrCodeId": "string",    "bookingId": "9a471128-954e-4e64-bde9-e8147015df89",    "bookingConfirmationCode": "string",    "tabMembers": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "storefrontSessionId": "string",        "initiator": true,        "memberType": "string",        "userId": 0,        "retailUserId": 0,        "clientId": "string",        "userEmail": "string",        "userName": "string",        "isEnrolledInLoyalty": true,        "hasCardOnFile": true,        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "memberCount": 0,    "kitchenDispatchItems": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "vatRateBasisPoints": 0,        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",        "saleItemId": 0,        "itemId": 0,        "tabMemberId": "string",        "parentKitchenDispatchItemId": "string",        "price": 0,        "basePrice": 0,        "discount": 0,        "quantity": 0,        "measurement": {          "unit": "string",          "amountMicros": 0,          "priceQuantityMicros": 0,          "unitPriceCents": 0        },        "quantityCents": 0,        "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",        "tabSettlementId": "string",        "settlementState": "string",        "status": "string",        "itemState": "string",        "zeroTicket": true,        "voidedQuantityCents": 0,        "paidAmount": 0,        "coursingOrder": 0,        "createdAt": "2019-08-24T14:15:22Z",        "firedAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "itemTitle": "string",        "itemTitlePrep": "string",        "kitchenSortOrder": 0,        "itemDescription": "string",        "itemImageUrl": "string",        "tabMember": {          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "name": "string",          "email": "string",          "phone": "string",          "imageUrl": "string",          "memberType": "string",          "userId": 0,          "retailUserId": 0        },        "comments": [          {            "comment": "string",            "createdAt": "2019-08-24T14:15:22Z",            "tabMemberUUID": "string",            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"          }        ],        "variants": [          {            "id": 0,            "name": "string",            "price": 0,            "quantityCents": 0,            "priceCents": 0          }        ]      }    ],    "kitchenDispatches": [      {        "amounts": {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true        },        "currentVatBreakdown": [          {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true,            "vatRateBasisPoints": 0          }        ],        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "locationId": 0,        "dailyOrderNumber": 0,        "latestState": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z",        "kitchenDispatchItems": [          {            "amounts": {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true            },            "vatRateBasisPoints": 0,            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",            "saleItemId": 0,            "itemId": 0,            "tabMemberId": "string",            "parentKitchenDispatchItemId": "string",            "price": 0,            "basePrice": 0,            "discount": 0,            "quantity": 0,            "measurement": {              "unit": "string",              "amountMicros": 0,              "priceQuantityMicros": 0,              "unitPriceCents": 0            },            "quantityCents": 0,            "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",            "tabSettlementId": "string",            "settlementState": "string",            "status": "string",            "itemState": "string",            "zeroTicket": true,            "voidedQuantityCents": 0,            "paidAmount": 0,            "coursingOrder": 0,            "createdAt": "2019-08-24T14:15:22Z",            "firedAt": "2019-08-24T14:15:22Z",            "updatedAt": "2019-08-24T14:15:22Z",            "itemTitle": "string",            "itemTitlePrep": "string",            "kitchenSortOrder": 0,            "itemDescription": "string",            "itemImageUrl": "string",            "tabMember": {              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",              "name": "string",              "email": "string",              "phone": "string",              "imageUrl": "string",              "memberType": "string",              "userId": 0,              "retailUserId": 0            },            "comments": [              {                "comment": "string",                "createdAt": "2019-08-24T14:15:22Z",                "tabMemberUUID": "string",                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"              }            ],            "variants": [              {                "id": 0,                "name": "string",                "price": 0,                "quantityCents": 0,                "priceCents": 0              }            ]          }        ]      }    ],    "vouchers": [      {        "id": 0,        "discountId": 0,        "discountCode": "string",        "appliedAt": "2019-08-24T14:15:22Z",        "voucherName": "string",        "voucherType": "string",        "typeSpecification": {},        "maxDiscountAmountCents": 0,        "maxUses": 0,        "timesUsed": 0,        "hasUsesLeft": true,        "remainingBalanceCents": 0,        "displayTitle": "string",        "displayDescription": "string",        "displayImageUrl": "string"      }    ],    "notes": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "entityType": "string",        "entityId": "string",        "note": "string",        "locationId": 0,        "sortOrder": 0,        "createdByRetailerUserId": 0,        "createdByName": "string",        "updatedByRetailerUserId": 0,        "updatedByName": "string",        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ],    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z",    "location": {      "id": 0,      "name": "string",      "logoImageUrl": "string",      "currency": "string",      "timezone": "string"    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v1/tabs/open

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Query Parameters

locationId?number

Filter by location ID (required)

startDate?string

ISO start of opened-date range

endDate?string

ISO end of opened-date range

minTotalCents?number

Minimum tab total (cents)

maxTotalCents?number

Maximum tab total (cents)

tableName?string

Comma-separated table names to filter by

tabType?string

Comma-separated tab types/channels (table, over_the_counter, takeaway)

page?number

Page number

Range1 <= value
Default1
limit?number

Items per page

Range1 <= value <= 1000
Default50

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/tabs/open"
{  "status": "success",  "data": {    "tabs": [      {        "customFields": [          {            "fieldId": "string",            "key": "string",            "label": "string",            "group": "string",            "type": "string",            "displayValue": "string",            "value": null,            "version": 0,            "status": "string"          }        ],        "metadata": {          "customFields": {}        },        "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",        "locationId": 0,        "totalAmountCents": 0,        "paidAmountCents": 0,        "remainingBalanceCents": 0,        "tabType": "string",        "storefrontQrCodeId": "string",        "tableName": "string",        "latestState": "string",        "paymentFlow": "string",        "openedByName": "string",        "openedByType": "string",        "openedAt": "string"      }    ],    "summary": {      "totalAmountCentsSum": 0    },    "pagination": {      "page": 1,      "limit": 1,      "total": 0,      "totalPages": 0    }  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/reconnect-payment

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tab_id*string

UUID of the tab to reconnect payment for

Formatuuid
psp_reference*string

Adyen PSP reference from the orphaned authorization

terminal_id?string

Terminal ID (optional, for audit trail)

Formatuuid
amount_cents?number

Amount in cents (optional). Defaults to the authorised amount for a purchase-service intent and must equal it; legacy payment-service reconnects default to the remaining balance.

Range1 <= value

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/reconnect-payment" \  -H "Content-Type: application/json" \  -d '{    "tab_id": "7d6d1470-3aa0-4898-b980-676d9bf5a62e",    "psp_reference": "string"  }'
{  "status": "success",  "data": {    "purchase_intent_id": "abf79337-36d4-4618-b765-52207318d737",    "tab_settlement_id": "9d002bc6-2c1f-40fa-ba63-9cd0d01dfd8e",    "tab_id": "7d6d1470-3aa0-4898-b980-676d9bf5a62e",    "psp_reference": "string",    "amount_cents": 0,    "reconnected": true,    "already_settled": true,    "owner": "purchase-service",    "rescued_from_state": "string"  },  "meta": {}}
POST
/api/v1/tabs/resolve

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

locationId*number

Location ID for the tab

qrCodeId*|

QR code UUID (for table orders)

tabType*string

Type of tab to create

Value in

  • "table"
  • "takeaway"
  • "over_the_counter"
paymentFlow*string

Payment timing (open_tab = pay later, pay_upfront = pay now)

Value in

  • "open_tab"
  • "pay_upfront"
orderChannel*string

Order channel (ONLINE = web interface, QR = QR code scan, KIOSK = self-service, POS = point of sale)

Value in

  • "ONLINE"
  • "QR"
  • "KIOSK"
  • "POS"
tabMember*

User identification with priority-based resolution: id > email > phone > identifier

customFields?array<|>

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.

Itemsitems <= 100

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/resolve" \  -H "Content-Type: application/json" \  -d '{    "locationId": 0,    "qrCodeId": "string",    "tabType": "table",    "paymentFlow": "open_tab",    "orderChannel": "ONLINE",    "tabMember": {}  }'
{  "status": "success",  "data": {    "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",    "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",    "isNewTab": true,    "isNewTabMember": true,    "tab": {      "amounts": {        "grossAmountCents": 0,        "vatAmountCents": 0,        "netAmountCents": 0,        "basis": "current",        "vatComplete": true      },      "currentVatBreakdown": [        {          "grossAmountCents": 0,          "vatAmountCents": 0,          "netAmountCents": 0,          "basis": "current",          "vatComplete": true,          "vatRateBasisPoints": 0        }      ],      "customFields": [        {          "fieldId": "string",          "key": "string",          "label": "string",          "group": "string",          "type": "string",          "displayValue": "string",          "value": null,          "version": 0,          "status": "string"        }      ],      "metadata": {        "customFields": {}      },      "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",      "locationId": 0,      "latestState": "initiated",      "selectedPaymentFlow": "open_tab",      "paymentMode": "ITEM",      "paymentSplit": 2,      "totalAmountCents": 0,      "paidAmountCents": 0,      "remainingBalanceCents": 0,      "storefrontQrCodeId": "string",      "bookingId": "9a471128-954e-4e64-bde9-e8147015df89",      "bookingConfirmationCode": "string",      "tabMembers": [        {          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "storefrontSessionId": "string",          "initiator": true,          "memberType": "string",          "userId": 0,          "retailUserId": 0,          "clientId": "string",          "userEmail": "string",          "userName": "string",          "isEnrolledInLoyalty": true,          "hasCardOnFile": true,          "createdAt": "2019-08-24T14:15:22Z",          "updatedAt": "2019-08-24T14:15:22Z"        }      ],      "memberCount": 0,      "kitchenDispatchItems": [        {          "amounts": {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true          },          "vatRateBasisPoints": 0,          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",          "saleItemId": 0,          "itemId": 0,          "tabMemberId": "string",          "parentKitchenDispatchItemId": "string",          "price": 0,          "basePrice": 0,          "discount": 0,          "quantity": 0,          "measurement": {            "unit": "string",            "amountMicros": 0,            "priceQuantityMicros": 0,            "unitPriceCents": 0          },          "quantityCents": 0,          "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",          "tabSettlementId": "string",          "settlementState": "string",          "status": "string",          "itemState": "string",          "zeroTicket": true,          "voidedQuantityCents": 0,          "paidAmount": 0,          "coursingOrder": 0,          "createdAt": "2019-08-24T14:15:22Z",          "firedAt": "2019-08-24T14:15:22Z",          "updatedAt": "2019-08-24T14:15:22Z",          "itemTitle": "string",          "itemTitlePrep": "string",          "kitchenSortOrder": 0,          "itemDescription": "string",          "itemImageUrl": "string",          "tabMember": {            "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",            "name": "string",            "email": "string",            "phone": "string",            "imageUrl": "string",            "memberType": "string",            "userId": 0,            "retailUserId": 0          },          "comments": [            {              "comment": "string",              "createdAt": "2019-08-24T14:15:22Z",              "tabMemberUUID": "string",              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"            }          ],          "variants": [            {              "id": 0,              "name": "string",              "price": 0,              "quantityCents": 0,              "priceCents": 0            }          ]        }      ],      "kitchenDispatches": [        {          "amounts": {            "grossAmountCents": 0,            "vatAmountCents": 0,            "netAmountCents": 0,            "basis": "current",            "vatComplete": true          },          "currentVatBreakdown": [            {              "grossAmountCents": 0,              "vatAmountCents": 0,              "netAmountCents": 0,              "basis": "current",              "vatComplete": true,              "vatRateBasisPoints": 0            }          ],          "customFields": [            {              "fieldId": "string",              "key": "string",              "label": "string",              "group": "string",              "type": "string",              "displayValue": "string",              "value": null,              "version": 0,              "status": "string"            }          ],          "metadata": {            "customFields": {}          },          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",          "locationId": 0,          "dailyOrderNumber": 0,          "latestState": "string",          "createdAt": "2019-08-24T14:15:22Z",          "updatedAt": "2019-08-24T14:15:22Z",          "kitchenDispatchItems": [            {              "amounts": {                "grossAmountCents": 0,                "vatAmountCents": 0,                "netAmountCents": 0,                "basis": "current",                "vatComplete": true              },              "vatRateBasisPoints": 0,              "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",              "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba",              "saleItemId": 0,              "itemId": 0,              "tabMemberId": "string",              "parentKitchenDispatchItemId": "string",              "price": 0,              "basePrice": 0,              "discount": 0,              "quantity": 0,              "measurement": {                "unit": "string",                "amountMicros": 0,                "priceQuantityMicros": 0,                "unitPriceCents": 0              },              "quantityCents": 0,              "splitOfKdi": "e6bb2f00-c1a3-46a8-9d00-24d4d47009e5",              "tabSettlementId": "string",              "settlementState": "string",              "status": "string",              "itemState": "string",              "zeroTicket": true,              "voidedQuantityCents": 0,              "paidAmount": 0,              "coursingOrder": 0,              "createdAt": "2019-08-24T14:15:22Z",              "firedAt": "2019-08-24T14:15:22Z",              "updatedAt": "2019-08-24T14:15:22Z",              "itemTitle": "string",              "itemTitlePrep": "string",              "kitchenSortOrder": 0,              "itemDescription": "string",              "itemImageUrl": "string",              "tabMember": {                "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",                "name": "string",                "email": "string",                "phone": "string",                "imageUrl": "string",                "memberType": "string",                "userId": 0,                "retailUserId": 0              },              "comments": [                {                  "comment": "string",                  "createdAt": "2019-08-24T14:15:22Z",                  "tabMemberUUID": "string",                  "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"                }              ],              "variants": [                {                  "id": 0,                  "name": "string",                  "price": 0,                  "quantityCents": 0,                  "priceCents": 0                }              ]            }          ]        }      ],      "vouchers": [        {          "id": 0,          "discountId": 0,          "discountCode": "string",          "appliedAt": "2019-08-24T14:15:22Z",          "voucherName": "string",          "voucherType": "string",          "typeSpecification": {},          "maxDiscountAmountCents": 0,          "maxUses": 0,          "timesUsed": 0,          "hasUsesLeft": true,          "remainingBalanceCents": 0,          "displayTitle": "string",          "displayDescription": "string",          "displayImageUrl": "string"        }      ],      "notes": [        {          "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",          "entityType": "string",          "entityId": "string",          "note": "string",          "locationId": 0,          "sortOrder": 0,          "createdByRetailerUserId": 0,          "createdByName": "string",          "updatedByRetailerUserId": 0,          "updatedByName": "string",          "createdAt": "2019-08-24T14:15:22Z",          "updatedAt": "2019-08-24T14:15:22Z"        }      ],      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    },    "tabMembers": [      {        "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",        "storefrontSessionId": "string",        "initiator": true,        "memberType": "string",        "userId": 0,        "retailUserId": 0,        "clientId": "string",        "userEmail": "string",        "userName": "string",        "isEnrolledInLoyalty": true,        "hasCardOnFile": true,        "createdAt": "2019-08-24T14:15:22Z",        "updatedAt": "2019-08-24T14:15:22Z"      }    ]  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
POST
/api/v1/tabs/resolve-external

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

locationId*number

Location ID for the tab

qrCodeId*|

QR code UUID (for table orders)

tabType*string

Type of tab to create

Value in

  • "table"
  • "takeaway"
  • "over_the_counter"
paymentFlow*string

Payment timing (open_tab = pay later, pay_upfront = pay now)

Value in

  • "open_tab"
  • "pay_upfront"
orderChannel*string

Order channel (ONLINE = web interface, QR = QR code scan, KIOSK = self-service, POS = point of sale)

Value in

  • "ONLINE"
  • "QR"
  • "KIOSK"
  • "POS"
tabMember*

User identification with priority-based resolution: id > email > phone > identifier

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/tabs/resolve-external" \  -H "Content-Type: application/json" \  -d '{    "locationId": 0,    "qrCodeId": "string",    "tabType": "table",    "paymentFlow": "open_tab",    "orderChannel": "ONLINE",    "tabMember": {}  }'
{  "status": "string",  "data": {    "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63",    "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917",    "resolution": "external_ticket",    "isNewTab": true  },  "meta": {    "requestId": "string",    "timestamp": "2019-08-24T14:15:22Z",    "executionTimeMs": 0  }}
GET
/api/v2/tab/{tabId}/payment-methods

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

tabId*string

Tab UUID

Formatuuid

Query Parameters

amountCents*number

Payment amount in cents. 0 is a valid value: the storefront still hits this endpoint when the cart nets to 0 (voucher fully covers the order) and the handler short-circuits with an empty paymentMethodsResponse so the drawer can route to the complimentary settlement path without a PSP method selection.

Range0 <= value
currencyCode*string

ISO 4217 currency code (e.g. SEK, EUR)

countryCode?string

ISO 3166-1 alpha-2 country code (e.g. SE, NL)

tabMemberId?string

Optional tab member UUID. When supplied, the handler resolves the paying user and includes a shopperReference so Adyen returns storedPaymentMethods (saved cards) for the shopper. Omit for guest checkouts.

Formatuuid
channel?string

Optional client platform. Forwarded to Adyen /paymentMethods so it returns platform-native wallets — notably Google Pay (returned only for channel=Android). Omit for web (Adyen defaults to Web behaviour).

Value in

  • "iOS"
  • "Android"
  • "Web"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v2/tab/497f6eca-6276-4993-bfeb-53cbbbba6f08/payment-methods?amountCents=0&currencyCode=string"
{  "status": "success",  "data": {    "paymentMethodsResponse": {},    "clientKey": "string",    "environment": "test",    "adyenIntegrationId": "4cdd3acb-5beb-44ce-a3ea-a62f1db97794",    "freeOrder": true  },  "meta": {}}