Use Rewards, Offers, Customer Credits, and Promo Codes
Updating the cart only prices the reward, offer, credit, or code. Placing the order redeems it in Punchh and checks the customer in. Cancelling the order voids that redemption.
Rewards
How to use rewards for an online order
To fetch loyalty rewards available for customers, make an HTTP GET request to the following endpoint:/dlc-service/loyalty-rewards
Request
{
"method": "get",
"url": "https://api-public-demo.menu.app/api/dlc-service/loyalty-rewards",
"headers": {
"X-Request-ID": "69da3547-204b-4093-a225-54e084c24215",
"Application": "f3a90488ffee32c3acb6fcd0ca417cf6",
"Api-Version": "4.78.0",
"Content-Type": "application/json"
}
}
Response
{
"status": "OK",
"code": 200,
"data": {
"discounts": [
{
"id": 46168,
"type_id": 2,
"reference_type": "LoyaltyReward",
"brand_id": null,
"position": null,
"name": "Reward with cart spent condition",
"description": "Spend 20$ and get 5$ off",
"tracking_code": null,
"max_redemption_count": null,
"date_from": null,
"date_to": null,
"reduction_type": 0,
"reduction_level_type": 0,
"reduction_price": 0,
"reduction_amount": 0,
"reduction_percentage": null,
"is_registered_only": false,
"show_only_in_ordering_flow": null,
"image": {
"fullsize": "https://res.cloudinary.com/punchh/image/upload/c_limit,f_auto,fl_lossy,g_center,q_auto/v1/punchhstatic/redeemables/redeemable_images/000/046/168/original/b63aa56ee7848bbb5ed6b88de9fbcd97e992d228.jpeg",
"thumbnail_medium": "https://res.cloudinary.com/punchh/image/upload/c_limit,f_auto,fl_lossy,g_center,q_auto/v1/punchhstatic/redeemables/redeemable_images/000/046/168/original/b63aa56ee7848bbb5ed6b88de9fbcd97e992d228.jpeg",
"thumbnail_small": "https://res.cloudinary.com/punchh/image/upload/c_limit,f_auto,fl_lossy,g_center,q_auto/v1/punchhstatic/redeemables/redeemable_images/000/046/168/original/b63aa56ee7848bbb5ed6b88de9fbcd97e992d228.jpeg"
},
"channels": [
{
"type_id": 3,
"reference_type": "DiscountMobileChannel"
},
{
"type_id": 5,
"reference_type": "DiscountPosIntegratedChannel"
},
{
"type_id": 1,
"reference_type": "DiscountPosChannel"
},
{
"type_id": 4,
"reference_type": "DiscountWebChannel"
},
{
"type_id": 2,
"reference_type": "DiscountKioskChannel"
}
],
"discount_tags": [],
"discount_conditions": null,
"translations": null,
"created_at": "",
"updated_at": "",
"point_cost": 30
},
{
"id": 47200,
"type_id": 2,
"reference_type": "LoyaltyReward",
"brand_id": null,
"position": null,
"name": "Free Moringa Bowl",
"description": "POS QA testing",
"tracking_code": null,
"max_redemption_count": null,
"date_from": null,
"date_to": null,
"reduction_type": 0,
"reduction_level_type": 0,
"reduction_price": 0,
"reduction_amount": 0,
"reduction_percentage": null,
"is_registered_only": false,
"show_only_in_ordering_flow": null,
"image": {
"fullsize": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png",
"thumbnail_medium": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png",
"thumbnail_small": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png"
},
"channels": [
{
"type_id": 3,
"reference_type": "DiscountMobileChannel"
},
{
"type_id": 5,
"reference_type": "DiscountPosIntegratedChannel"
},
{
"type_id": 1,
"reference_type": "DiscountPosChannel"
},
{
"type_id": 4,
"reference_type": "DiscountWebChannel"
},
{
"type_id": 2,
"reference_type": "DiscountKioskChannel"
}
],
"discount_tags": [],
"discount_conditions": null,
"translations": null,
"created_at": "",
"updated_at": "",
"point_cost": 50
}
]
}
}
| Property | Value | Description |
|---|---|---|
discounts |
JSON | Contains all properties related to a punchh loyalty reward. |
id |
Number | It indicates the internal id of the discount. |
type_id |
Number | Possible values: 2. It indicates the type of discount being a loyalty reward. |
reference_type |
String | Possible values: "LoyaltyReward". It indicates the type of discount being a loyalty reward. |
brand_id |
Null | Not supported in punchh |
position |
Null | Not supported in punchh |
name |
String | The name of the loyalty reward. |
description |
String | The description of the loyalty reward. |
tracking_code |
Null | Not supported in punchh |
max_redemption_count |
Null | Not supported in punchh |
date_from |
Null | Not supported in punchh |
date_to |
Null | Not supported in punchh |
reduction_type |
Null | Not supported in punchh |
reduction_level_type |
Null | Not supported in punchh |
reduction_price |
Null | Not supported in punchh |
reduction_amount |
Null | Not supported in punchh |
reduction_percentage |
Null | Not supported in punchh |
is_registered_only |
False | Not supported in punchh |
show_only_in_ordering_flow |
Null | Not supported in punchh |
image |
JSON | Object containing image URL links. |
fullsize |
String | URL link for a fullsize image |
thumbnail_medium |
String | URL link for a medium thumbnail image. |
thumbnail_small |
String | URL link for a small thumbnail image. |
channels |
Array | Array containing channels the reward can be redeemed on. Always returns all 5 channels: web, mobile, kiosk, pos, posintegrated |
type_id |
Number | Possible values: 1, 2, 3, 4, 5. It refers to the channel id that a reward can be redeemed on. |
reference_type |
String | Possible values: "DiscountPosChannel", "DiscountKioskChannel", "DiscountMobileChannel", "DiscountWebChannel", "DiscountPosIntegratedChannel" |
discount_tags |
Array | Not supported in punchh |
discount_conditions |
Null | Not supported in punchh |
translations |
Null | Not supported in punchh |
created_at |
Null | Not supported in punchh |
updated_at |
Null | Not supported in punchh |
point_cost |
Number | Number of points required to redeem reward. |
When a customer adds a reward to their cart, update the cart with the reward in discounts and type_id 2:
If that succeeds, the reward is priced onto the cart and the customer can place the order:
Offers
How to use offers for an online order
To fetch loyalty offers available for customers, make an HTTP GET request to the following endpoint: /dlc-service/loyalty-promotions
Request
{
"method": "get",
"url": "https://api-public-demo.menu.app/api/dlc-service/loyalty-promotions",
"headers": {
"X-Request-ID": "69da3547-204b-4093-a225-54e084c24215",
"Application": "f3a90488ffee32c3acb6fcd0ca417cf6",
"Api-Version": "4.78.0",
"Content-Type": "application/json",
"Dlc-Authorization": ""
}
}
Response
{
"status": "OK",
"code": 200,
"data": {
"discounts": [
{
"id": 9968351573,
"type_id": 3,
"reference_type": "Promotion",
"brand_id": 0,
"position": 0,
"name": "Reduced price for Lápana Bowl and Smoothie ",
"description": "",
"tracking_code": "",
"max_redemption_count": 0,
"date_from": null,
"date_to": null,
"reduction_type": 0,
"reduction_level_type": 0,
"reduction_price": 0,
"reduction_amount": 0,
"reduction_percentage": 0,
"is_registered_only": false,
"show_only_in_ordering_flow": false,
"image": {
"fullsize": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png",
"thumbnail_medium": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png",
"thumbnail_small": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png"
},
"channels": [
{
"type_id": 3,
"reference_type": "DiscountMobileChannel"
},
{
"type_id": 5,
"reference_type": "DiscountPosIntegratedChannel"
},
{
"type_id": 1,
"reference_type": "DiscountPosChannel"
},
{
"type_id": 4,
"reference_type": "DiscountWebChannel"
},
{
"type_id": 2,
"reference_type": "DiscountKioskChannel"
}
],
"discount_tags": [],
"discount_conditions": [
{
"id": 0,
"type_id": 1,
"reference_type": "DiscountConditionSpecificStore",
"discount_id": 9968351573,
"properties": {
"venue_ids": [
2809,
2833,
2836,
2995,
2996
]
}
}
],
"translations": null,
"created_at": "2023-07-26T06:33:12-05:00",
"updated_at": "",
"venue_codes": []
},
{
"id": 9968376108,
"type_id": 3,
"reference_type": "Promotion",
"brand_id": 0,
"position": 0,
"name": "Reduced price for Passion Mango",
"description": "",
"tracking_code": "",
"max_redemption_count": 0,
"date_from": null,
"date_to": null,
"reduction_type": 0,
"reduction_level_type": 0,
"reduction_price": 0,
"reduction_amount": 0,
"reduction_percentage": 0,
"is_registered_only": false,
"show_only_in_ordering_flow": false,
"image": {
"fullsize": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png",
"thumbnail_medium": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png",
"thumbnail_small": "https://res.cloudinary.com/punchh/image/upload/fl_lossy,q_auto/v1/static/punchh-icon-thumb.png"
},
"channels": [
{
"type_id": 3,
"reference_type": "DiscountMobileChannel"
},
{
"type_id": 5,
"reference_type": "DiscountPosIntegratedChannel"
},
{
"type_id": 1,
"reference_type": "DiscountPosChannel"
},
{
"type_id": 4,
"reference_type": "DiscountWebChannel"
},
{
"type_id": 2,
"reference_type": "DiscountKioskChannel"
}
],
"discount_tags": [],
"discount_conditions": [
{
"id": 0,
"type_id": 1,
"reference_type": "DiscountConditionSpecificStore",
"discount_id": 9968376108,
"properties": {
"venue_ids": [
2809
]
}
}
],
"translations": null,
"created_at": "2023-07-26T06:33:25-05:00",
"updated_at": "",
"venue_codes": [
"11"
]
}
]
}
}
| Property | Value | Description |
|---|---|---|
discounts |
JSON | Contains all properties related to a punchh promotion. |
id |
Number | It indicates the internal id of the discount. |
type_id |
Number | Possible values: 3. It indicates the type of discount being a promotion. |
reference_type |
String | Possible values: "Promotion". It indicates the type of discount being a loyalty promotion. |
brand_id |
Null | Not supported in punchh. |
position |
Null | Not supported in punchh. |
name |
String | The name of the promotion. |
description |
String | The description of the promotion. |
tracking_code |
Null | Not supported in punchh. |
max_redemption_count |
Null | Not supported in punchh. |
date_from |
Null | Not supported in punchh. |
date_to |
Date | Date when the promotion will expire and can no longer be used. |
reduction_type |
Null | Not supported in punchh. |
reduction_level_type |
Null | Not supported in punchh. |
reduction_price |
Null | Not supported in punchh. |
reduction_amount |
Null | Not supported in punchh. |
reduction_percentage |
Null | Not supported in punchh. |
is_registered_only |
False | Not supported in punchh. |
show_only_in_ordering_flow |
Null | Not supported in punchh. |
image |
JSON | Object containing image URL links. |
fullsize |
String | URL link for a fullsize image. |
thumbnail_medium |
String | URL link for a medium thumbnail image. |
thumbnail_small |
String | URL link for a small thumbnail image. |
channels |
Array | Array containing channels the promotion can be redeemed on. Always returns all 5 channels: web, mobile, kiosk, pos, posintegrated |
type_id |
Number | Possible values: 1, 2, 3, 4, 5. It refers to the channel id that a promotion can be redeemed on. |
reference_type |
String | Possible values: "DiscountPosChannel", "DiscountKioskChannel", "DiscountMobileChannel", "DiscountWebChannel", "DiscountPosIntegratedChannel" |
discount_tags |
Array | Not supported in punchh. |
discount_conditions |
Null | Not supported in punchh. |
translations |
Null | Not supported in punchh. |
created_at |
Null | Not supported in punchh. |
updated_at |
Null | Not supported in punchh. |
venue_codes |
Array | Array of venue_ids that the promotion can be redeemed at. If empty, it can be redeemed at all locations. |
When a customer adds an offer to their cart, update the cart with the offer in discounts and type_id 3:
If that succeeds, the offer is priced onto the cart and the customer can place the order:
Customer's Credit
How to redeem a credit for an online transaction
To apply a customer's credit, update the cart and include it in discounts:
The discount object is { "discount_amount": 1200 } for a $12 credit. The amount is in minor units. Place the order with POST /cart/{cart_id}/order. The credit is already on the cart, so it is not sent again on the order.
Promo Codes
How to use unlock-in-app and direct-at-pos promo codes
A direct-at-pos code is priced by updating the cart:
Send the code on the discount as { "redemption_code": "THECODE" }. Do not send a type_id.
If that succeeds, the discount amount is on the cart.
If it does not, call POST /api/dlc-service/loyalty-coupons with { "code": "THECODE" }, where the value is the promo code as configured in Punchh.
If successful, the loyalty promotions can be re-fetched using the following endpoint:
/dlc-service/loyalty-promotions