Skip to content
innovorder
⌘K

Engagement

Rewards & Cart

Retrieve loyalty rewards based on cart content, apply promocodes, void loyalty orders, and compute applicable deals for a given cart.

POST/v1/loyalty/restaurants/{restaurantId}/cart/loyalty-dataGet Loyalty Data with Cart

Retrieve loyalty member information and available rewards based on the current cart contents. This is the main endpoint for getting rewards during the ordering flow. The channel is automatically determined from the caller role (Kiosk, Web, POS).

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Request Body

json
{
  "sessionId": "session_abc123",
  "memberId": "ext_789",
  "rewards": [
    {
      "id": "reward_1",
      "status": "available"
    }
  ],
  "cart": {
    "consumptionMode": "EatIn",
    "createdAt": "2024-01-15T12:30:00Z",
    "items": [
      {
        "productId": 101,
        "name": "Classic Burger",
        "categoryId": 5,
        "categoryName": "Burgers",
        "itemNetPrice": 800,
        "itemGrossPrice": 960,
        "quantity": 2,
        "tags": [
          "burger",
          "beef"
        ],
        "sku": "BRG-001"
      }
    ],
    "totalPrice": 1920
  },
  "menuId": 42,
  "channelId": null,
  "shouldSkipCleanAwaitingOrders": false
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
sessionIdstring"session_abc123"Identifier of the associated session.
memberIdstring"ext_789"Identifier of the associated member.
rewardsarray[…]List of rewards entries.
rewards[]object{…}Object containing rewards fields.
rewards[].idstring"reward_1"The id value.
rewards[].statusstring"available"HTTP status code returned by the API.
cartobject{…}Object containing cart fields.
cart.consumptionModestring"EatIn"The consumption mode value.
cart.createdAtstring"2024-01-15T12:30:00Z"Timestamp when this resource was created.
cart.itemsarray[…]List of items entries.
cart.items[]object{…}Object containing items fields.
cart.items[].productIdinteger101Identifier of the product.
cart.items[].namestring"Classic Burger"The name value.
cart.items[].categoryIdinteger5Identifier of the category.
cart.items[].categoryNamestring"Burgers"The category name value.
cart.items[].itemNetPriceinteger800The item net price value.
cart.items[].itemGrossPriceinteger960The item gross price value.
cart.items[].quantityinteger2The quantity value.
cart.items[].tagsarray[…]List of tags entries.
cart.items[].tags[]string"burger"The tags value.
cart.items[].skustring"BRG-001"The sku value.
cart.totalPriceinteger1920The total price value.
menuIdinteger42Identifier of the menu.
channelIdnullnullIdentifier of the associated channel.
shouldSkipCleanAwaitingOrdersbooleanfalseThe should skip clean awaiting orders value.

Response

json
{
  "status": 200,
  "code": "loyalty_rewards_found",
  "message": "Loyalty rewards have been found.",
  "data": {
    "member": {
      "id": "ext_789",
      "email": "john.doe@example.com",
      "phoneNumber": null,
      "givenName": "John",
      "familyName": "Doe",
      "tierName": "Gold",
      "points": 1250
    },
    "rewards": [
      {
        "id": "reward_1",
        "name": "Free Dessert",
        "description": "Get a free dessert with your meal",
        "imageUrl": "https://cdn.example.com/rewards/dessert.png",
        "provider": "splio",
        "type": "value",
        "points": 500,
        "value": 350,
        "status": "available"
      }
    ]
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_rewards_found"Machine-readable application code for the result.
messagestring"Loyalty rewards have been found."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.memberobject{…}Object containing member fields.
data.member.idstring"ext_789"The id value.
data.member.emailstring"john.doe@example.com"Email address.
data.member.phoneNumbernullnullThe phone number value.
data.member.givenNamestring"John"The given name value.
data.member.familyNamestring"Doe"The family name value.
data.member.tierNamestring"Gold"The tier name value.
data.member.pointsinteger1250The points value.
data.rewardsarray[…]List of rewards entries.
data.rewards[]object{…}Object containing rewards fields.
data.rewards[].idstring"reward_1"The id value.
data.rewards[].namestring"Free Dessert"The name value.
data.rewards[].descriptionstring"Get a free dessert with your meal"The description value.
data.rewards[].imageUrlstring"https://cdn.example.com/rewards/dessert.png"The image url value.
data.rewards[].providerstring"splio"The provider value.
data.rewards[].typestring"value"The type value.
data.rewards[].pointsinteger500The points value.
data.rewards[].valueinteger350The value value.
data.rewards[].statusstring"available"HTTP status code returned by the API.

POST/v1/loyalty/restaurants/{restaurantId}/cart/voidVoid Loyalty Order

Void (cancel) a loyalty order session. This reverses any points or rewards that were consumed during the order. Used when an order is cancelled after loyalty processing.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Request Body

json
{
  "memberId": "ext_789",
  "sessionId": "session_abc123",
  "cart": {
    "createdAt": "2024-01-15T12:30:00Z",
    "totalPrice": 1920
  }
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
memberIdstring"ext_789"Identifier of the associated member.
sessionIdstring"session_abc123"Identifier of the associated session.
cartobject{…}Object containing cart fields.
cart.createdAtstring"2024-01-15T12:30:00Z"Timestamp when this resource was created.
cart.totalPriceinteger1920The total price value.

Response

json
{
  "status": 200,
  "code": "loyalty_order_void",
  "message": "Loyalty order has been voided."
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_order_void"Machine-readable application code for the result.
messagestring"Loyalty order has been voided."Human-readable result message. Do not use this value for program logic.

POST/v1/loyalty/restaurants/{restaurantId}/promocodeApply Promocode

Validate and retrieve the reward associated with a promotion code for a given cart. Returns the discount details if the code is valid and applicable to the current cart.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Request Body

json
{
  "sessionId": "session_abc123",
  "memberId": "ext_789",
  "cart": {
    "consumptionMode": "EatIn",
    "createdAt": "2024-01-15T12:30:00Z",
    "items": [
      {
        "productId": 101,
        "name": "Classic Burger",
        "categoryId": 5,
        "categoryName": "Burgers",
        "itemNetPrice": 800,
        "itemGrossPrice": 960,
        "quantity": 1,
        "tags": [
          "burger"
        ]
      }
    ],
    "totalPrice": 960
  },
  "code": "SUMMER2024"
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
sessionIdstring"session_abc123"Identifier of the associated session.
memberIdstring"ext_789"Identifier of the associated member.
cartobject{…}Object containing cart fields.
cart.consumptionModestring"EatIn"The consumption mode value.
cart.createdAtstring"2024-01-15T12:30:00Z"Timestamp when this resource was created.
cart.itemsarray[…]List of items entries.
cart.items[]object{…}Object containing items fields.
cart.items[].productIdinteger101Identifier of the product.
cart.items[].namestring"Classic Burger"The name value.
cart.items[].categoryIdinteger5Identifier of the category.
cart.items[].categoryNamestring"Burgers"The category name value.
cart.items[].itemNetPriceinteger800The item net price value.
cart.items[].itemGrossPriceinteger960The item gross price value.
cart.items[].quantityinteger1The quantity value.
cart.items[].tagsarray[…]List of tags entries.
cart.items[].tags[]string"burger"The tags value.
cart.totalPriceinteger960The total price value.
codestring"SUMMER2024"Machine-readable application code for the result.

Response

json
{
  "status": 200,
  "code": "loyalty_rewards_found",
  "message": "Loyalty rewards have been found.",
  "data": {
    "id": "promo_reward_1",
    "name": "Summer Promotion",
    "description": "10% off your order",
    "provider": "splio",
    "type": "percentage",
    "points": 0,
    "value": 10,
    "status": "available"
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_rewards_found"Machine-readable application code for the result.
messagestring"Loyalty rewards have been found."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.idstring"promo_reward_1"The id value.
data.namestring"Summer Promotion"The name value.
data.descriptionstring"10% off your order"The description value.
data.providerstring"splio"The provider value.
data.typestring"percentage"The type value.
data.pointsinteger0The points value.
data.valueinteger10The value value.
data.statusstring"available"HTTP status code returned by the API.

POST/v1/loyalty/promotions/applicableGet Applicable Promotions

Canonical web and kiosk endpoint for computing cart-wide loyalty promotion discounts. Customer and Kiosk authentication are supported; POS integrations use the restaurant-scoped promotions surface.

Request Body

json
{
  "restaurantId": 1001,
  "memberId": null,
  "cart": {
    "consumptionMode": "EatIn",
    "createdAt": "2026-08-11T12:30:00.000Z",
    "items": [
      {
        "productId": 101,
        "name": "Classic Burger",
        "itemNetPrice": 1500,
        "itemGrossPrice": 1500,
        "quantity": 1,
        "tags": [],
        "sku": "SKU-BURGER"
      }
    ],
    "totalPrice": 1500
  }
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
restaurantIdinteger1001Identifier of the restaurant.
memberIdnullnullIdentifier of the associated member.
cartobject{…}Object containing cart fields.
cart.consumptionModestring"EatIn"The consumption mode value.
cart.createdAtstring"2026-08-11T12:30:00.000Z"Timestamp when this resource was created.
cart.itemsarray[…]List of items entries.
cart.items[]object{…}Object containing items fields.
cart.items[].productIdinteger101Identifier of the product.
cart.items[].namestring"Classic Burger"The name value.
cart.items[].itemNetPriceinteger1500The item net price value.
cart.items[].itemGrossPriceinteger1500The item gross price value.
cart.items[].quantityinteger1The quantity value.
cart.items[].tagsarray[]List of tags entries.
cart.items[].skustring"SKU-BURGER"The sku value.
cart.totalPriceinteger1500The total price value.

Response

json
{
  "status": 200,
  "code": "success",
  "message": "Success",
  "data": [
    {
      "id": "prom_1234567803",
      "label": "10% off",
      "value": 150
    }
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"success"Machine-readable application code for the result.
messagestring"Success"Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].idstring"prom_1234567803"The id value.
data[].labelstring"10% off"The label value.
data[].valueinteger150The value value.

POST/v1/loyalty/deals/applicableGet Applicable Deals (Deprecated Alias)

Deprecated alias of POST /v1/loyalty/promotions/applicable. It keeps the same response contract while existing kiosk, web ordering, and POS clients migrate to their canonical promotion surfaces.

Request Body

json
{
  "restaurantId": 1001,
  "memberId": "ext_789",
  "cart": {
    "consumptionMode": "EatIn",
    "createdAt": "2024-01-15T12:30:00Z",
    "items": [
      {
        "productId": 101,
        "name": "Classic Burger",
        "categoryId": 5,
        "categoryName": "Burgers",
        "itemNetPrice": 800,
        "itemGrossPrice": 960,
        "quantity": 2,
        "tags": [
          "burger"
        ]
      }
    ],
    "totalPrice": 1920
  }
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
restaurantIdinteger1001Identifier of the restaurant.
memberIdstring"ext_789"Identifier of the associated member.
cartobject{…}Object containing cart fields.
cart.consumptionModestring"EatIn"The consumption mode value.
cart.createdAtstring"2024-01-15T12:30:00Z"Timestamp when this resource was created.
cart.itemsarray[…]List of items entries.
cart.items[]object{…}Object containing items fields.
cart.items[].productIdinteger101Identifier of the product.
cart.items[].namestring"Classic Burger"The name value.
cart.items[].categoryIdinteger5Identifier of the category.
cart.items[].categoryNamestring"Burgers"The category name value.
cart.items[].itemNetPriceinteger800The item net price value.
cart.items[].itemGrossPriceinteger960The item gross price value.
cart.items[].quantityinteger2The quantity value.
cart.items[].tagsarray[…]List of tags entries.
cart.items[].tags[]string"burger"The tags value.
cart.totalPriceinteger1920The total price value.

Response

json
{
  "status": 200,
  "code": "success",
  "message": "Success",
  "data": [
    {
      "name": "Buy 2 Get 10% Off",
      "type": "percentage",
      "value": 10,
      "scope": "order"
    }
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"success"Machine-readable application code for the result.
messagestring"Success"Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].namestring"Buy 2 Get 10% Off"The name value.
data[].typestring"percentage"The type value.
data[].valueinteger10The value value.
data[].scopestring"order"The scope value.

Loyalty Cards (Internal)

Manage Innovorder internal loyalty system cards. These endpoints handle card lookup, validation, royalty management, and card lifecycle operations. This is separate from the external provider-based loyalty system.

GET/loyalty_cardsList Loyalty Cards

Retrieve a paginated list of loyalty cards for a brand. Supports filtering by customer, batch number, search term, and currency unit preference.

Parameters

NameTypeRequiredDescription
brand_idintegerYesThe unique identifier of the brand.
limitintegerNoMaximum number of results to return.
offsetintegerNoNumber of results to skip for pagination.
orderstringNoSort order for results.
customer_idintegerNoFilter by customer ID.
batch_numberstringNoFilter by card batch number.
searchstringNoSearch term to filter cards.
unit_currencybooleanNoWhether to display amounts in currency units (default: false).

Response

json
{
  "status": 200,
  "code": "loyalty_card_success",
  "message": "You can access this loyalty card.",
  "data": [
    {
      "loyaltyCardId": 1001,
      "cardNumber": "CARD-001234",
      "customerId": 5001,
      "brandId": 10,
      "batchNumber": "BATCH-2024-01",
      "balance": 1500,
      "status": "active",
      "createdAt": "2024-01-15T10:00:00Z"
    }
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_card_success"Machine-readable application code for the result.
messagestring"You can access this loyalty card."Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].loyaltyCardIdinteger1001Identifier of the associated loyalty card.
data[].cardNumberstring"CARD-001234"The card number value.
data[].customerIdinteger5001Identifier of the customer.
data[].brandIdinteger10Identifier of the brand.
data[].batchNumberstring"BATCH-2024-01"The batch number value.
data[].balanceinteger1500The balance value.
data[].statusstring"active"HTTP status code returned by the API.
data[].createdAtstring"2024-01-15T10:00:00Z"Timestamp when this resource was created.

GET/loyalty_cards/countCount Loyalty Cards

Count the total number of loyalty cards matching the given filters. Uses the same filter parameters as the list endpoint.

Parameters

NameTypeRequiredDescription
brand_idintegerYesThe unique identifier of the brand.
customer_idintegerNoFilter by customer ID.
batch_numberstringNoFilter by card batch number.
searchstringNoSearch term to filter cards.
unit_currencybooleanNoWhether to display amounts in currency units (default: false).

Response

json
{
  "status": 200,
  "code": "loyalty_card_success",
  "message": "You can access this loyalty card.",
  "data": {
    "count": 42
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_card_success"Machine-readable application code for the result.
messagestring"You can access this loyalty card."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.countinteger42Total number of matching records.

GET/loyalty_cards/validateValidate Loyalty Card

Validate a loyalty card number for a brand. This is a public endpoint protected by reCAPTCHA. Used to verify that a card number exists and is valid before associating it with a customer.

Parameters

NameTypeRequiredDescription
brand_idintegerYesThe unique identifier of the brand.
card_numberstringYesThe loyalty card number to validate.
g-recaptcha-responsestringYesGoogle reCAPTCHA verification token.

Response

json
{
  "status": 200,
  "code": "loyalty_card_success",
  "message": "You can access this loyalty card.",
  "data": {
    "loyaltyCardId": 1001,
    "cardNumber": "CARD-001234",
    "brandId": 10,
    "balance": 1500,
    "status": "active",
    "isValid": true
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_card_success"Machine-readable application code for the result.
messagestring"You can access this loyalty card."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.loyaltyCardIdinteger1001Identifier of the associated loyalty card.
data.cardNumberstring"CARD-001234"The card number value.
data.brandIdinteger10Identifier of the brand.
data.balanceinteger1500The balance value.
data.statusstring"active"HTTP status code returned by the API.
data.isValidbooleantrueWhether valid is enabled or applies.

GET/loyalty_cards/{loyaltyCardId}Get Loyalty Card by ID

Retrieve a specific loyalty card by its unique identifier. Returns the full card details including balance and associated customer information.

Parameters

NameTypeRequiredDescription
loyaltyCardIdintegerYesThe unique identifier of the loyalty card.
unit_currencybooleanNoWhether to display amounts in currency units (default: false).

Response

json
{
  "status": 200,
  "code": "loyalty_card_success",
  "message": "You can access this loyalty card.",
  "data": {
    "loyaltyCardId": 1001,
    "cardNumber": "CARD-001234",
    "customerId": 5001,
    "brandId": 10,
    "batchNumber": "BATCH-2024-01",
    "balance": 1500,
    "status": "active",
    "createdAt": "2024-01-15T10:00:00Z"
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_card_success"Machine-readable application code for the result.
messagestring"You can access this loyalty card."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.loyaltyCardIdinteger1001Identifier of the associated loyalty card.
data.cardNumberstring"CARD-001234"The card number value.
data.customerIdinteger5001Identifier of the customer.
data.brandIdinteger10Identifier of the brand.
data.batchNumberstring"BATCH-2024-01"The batch number value.
data.balanceinteger1500The balance value.
data.statusstring"active"HTTP status code returned by the API.
data.createdAtstring"2024-01-15T10:00:00Z"Timestamp when this resource was created.

DELETE/loyalty_cards/{loyaltyCardId}/royaltiesCancel Royalty by Card ID

Cancel a royalty transaction associated with a loyalty card. This reverses a previously credited royalty, typically used when an order is voided or refunded.

Parameters

NameTypeRequiredDescription
loyaltyCardIdintegerYesThe unique identifier of the loyalty card.

Request Body

json
{
  "externalOrderReference": "order_12345",
  "source": "pos"
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
externalOrderReferencestring"order_12345"The external order reference value.
sourcestring"pos"The source value.

Response

json
{
  "status": 200,
  "code": "loyalty_card_royalty_cancel_success",
  "message": "You have done the royalty transactions cancel.",
  "data": {
    "loyaltyCardId": 1001,
    "balance": 1000,
    "cancelledAmount": 500
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_card_royalty_cancel_success"Machine-readable application code for the result.
messagestring"You have done the royalty transactions cancel."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.loyaltyCardIdinteger1001Identifier of the associated loyalty card.
data.balanceinteger1000The balance value.
data.cancelledAmountinteger500The cancelled amount value.

DELETE/loyalty_cards/{loyaltyCardId}Delete Loyalty Card

Permanently delete a loyalty card. Requires Brand or Restaurant role. The brand_id query parameter is used for access control validation.

Parameters

NameTypeRequiredDescription
loyaltyCardIdintegerYesThe unique identifier of the loyalty card to delete.
brand_idintegerYesThe brand ID for access control validation.

Response

json
{
  "status": 200,
  "code": "loyalty_card_delete_success",
  "message": "This card has been successfully deleted.",
  "data": {
    "loyaltyCardId": 1001,
    "cardNumber": "CARD-001234",
    "customerId": 5001,
    "brandId": 100
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"loyalty_card_delete_success"Machine-readable application code for the result.
messagestring"This card has been successfully deleted."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.loyaltyCardIdinteger1001Identifier of the associated loyalty card.
data.cardNumberstring"CARD-001234"The card number value.
data.customerIdinteger5001Identifier of the customer.
data.brandIdinteger100Identifier of the brand.