Re-Ordering
This guide will show you how to develop a flow that enables your customers to repeat their previous orders with identical specifications or modify them to accommodate slight variations. Notably, the order is directed to the same store as the original transaction, ensuring a seamless and consistent experience.

Before proceeding, you should have implemented:
Receipts
The flow starts with retrieving a list of existent orders for the customer by calling /api/{customer_account_id}/receipts:
Request
| Attribute | Type | Example Value | Description |
|---|---|---|---|
Authorization HTTP Header |
string | "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9" |
JWT Token of Customer Account |
customer_id |
string | "2c2cb0c9-75e8-4b49-9c1f-713dd79af7ce" |
Customer account UUID |
{
"method": "get",
"url": "https://api-public-playground.menu.app/api/customer_accounts/{customer_id}/receipts",
"headers": {
"X-Request-ID": "69da3547-204b-4093-a225-54e084c24215",
"Application": "f3a90488ffee32c3acb6fcd0ca417cf6",
"Api-Version": 4.38.0,
"Accept": "application/json",
"Content-Type" : "application/json",
"Authorization" : "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXRSZWZyZXNoVFRMIjoyNjI4MDAwLCJpc3MiOiJodHRwczovL2FwaS1wdWJsaWMtcGxheWdyb3VuZC5tZW51LmFwcC9hcGkvY3VzdG9tZXJzL2xvZ2luIiwiaWF0IjoxNjkzMjA0MTQ3LCJleHAiOjE2OTMyMDc3NDcsIm5iZiI6MTY5MzIwNDE0NywianRpIjoiM0RiTngwVlB6VmpTTlJkdyIsInN1YiI6IjUwOTA5NjUiLCJwcnYiOiJjYzMyOTIxYTE1NDgwYTExN2Q5YmJjNzJjMGUxMjU2YTY4NTI0NThiIiwiYXBwbGljYXRpb25faWQiOjIwMTUsInNlc3Npb25faWQiOjI4MzQyfQ.1J3_OlydWh32BUNAySZ6Qbj1K0q-_w4KfFnra2X9FbM",
"X-QB-Enabled" : true,
"X-Request-ID" : "c10b4a70-6274-490d-80a0-03e7bb826937"
}
}
Response
{
"code":200,
"data":{
"receipts":[
{
"id":"e1a91efb-6398-4abe-a41e-3407632c8245",
"tax":219,
"tip":0,
"total":0,
"status":"SendDelayed",
"is_asap":true,
"is_test":true,
"refunds":[
{
}
],
"subsidy":0,
"discount":0,
"refunded":0,
"subtotal":0,
"tip_rate":0,
"discounts":[
{
}
],
"pickup_at":"2023-06-28 10:17:33",
"tax_rates":{
"5":219
},
"created_at":"2023-06-28 10:15:34",
"order_type":4,
"combo_meals":[
{
"tax":124,
"name":"Combos regulares",
"image":{
"fullsize":"/storage/images/combo_item_images/2021-09-08/6fd364994648905d3a74b3f05c299b42.png",
"thumbnail_small":"/storage/images/combo_item_images/_thumbs280/2021-09-08/6fd364994648905d3a74b3f05c299b42.png",
"thumbnail_medium":"/storage/images/combo_item_images/_thumbs720/2021-09-08/6fd364994648905d3a74b3f05c299b42.png"
},
"items":[
{
"tax":124,
"name":"Làpana Bowl",
"type":"Food",
"image":{
"fullsize":"/storage/images/combo_item_images/2021-09-08/6fd364994648905d3a74b3f05c299b42.png",
"thumbnail_small":" \"thumbnail_small\": \"/storage/images/combo_item_images/_thumbs280/2021-09-08/6fd364994648905d3a74b3f05c299b42.png\"",
"thumbnail_medium":"/storage/images/combo_item_images/_thumbs720/2021-09-08/6fd364994648905d3a74b3f05c299b42.png"
},
"total":2599,
"pos_id":"4003501",
"comment":"test comment combo item 1",
"type_id":3,
"discount":0,
"quantity":1,
"subtotal":2599,
"tax_rate":5,
"modifiers":[
{
"name":"Spicy brokoli",
"price":0,
"pos_id":"4003501",
"modifier_id":"2049c354-3f23-11ed-936c-1a67b454859d",
"translations":{
"name":"brócoli picante"
}
}
],
"combo_group":{
"name":"Combos regulares (Regular)",
"pos_id":"4003501",
"type_id":1,
"translations":{
"name":"Combos regulares (Regular)"
},
"combo_group_id":"c1d5cd5e-3f22-11ed-936c-1a67b454859d"
},
"price_level":{
"name":"string",
"price":2599,
"pos_id":"4003501",
"translations":{
"name":"string"
},
"menu_item_price_level_id":"0ffb254c-3f23-11ed-936c-1a67b454859d"
},
"menu_item_id":"19a394da-3f23-11ed-936c-1a67b454859d",
"translations":{
"name":"Cuenco de lapana"
},
"service_charge":0,
"is_self_serving":true,
"unpaid_item_hash":"\"\""
}
],
"total":2599,
"pos_id":"4003501",
"type_id":1,
"discount":0,
"quantity":1,
"subtotal":2599,
"tax_rates":{
"5":124
},
"custom_name":"Acai Bowl Early Nene-nui Combo ",
"translations":{
"name":"Combos regulares",
"custom_name":"Combo Cuenco Nene-nui Temprano con Acai"
},
"combo_meal_id":"04abaf54-3f23-11ed-936c-1a67b454859d",
"service_charge":0
}
],
"delivery_at":"\"\"",
"order_items":[
{
"tax":95,
"name":"Làpana Bowl",
"type":"Food",
"image":{
"fullsize":"/storage/images/item_images/2021-09-08/233451fe2256b3acf14ee5288e1b7dd0.png",
"thumbnail_small":"/storage/images/item_images/_thumbs280/2021-09-08/233451fe2256b3acf14ee5288e1b7dd0.png",
"thumbnail_medium":"/storage/images/item_images/_thumbs720/2021-09-08/233451fe2256b3acf14ee5288e1b7dd0.png"
},
"total":1999,
"pos_id":"4003501",
"comment":"test comment menu item 1",
"type_id":1,
"discount":0,
"quantity":1,
"subtotal":1999,
"tax_rate":5,
"modifiers":[
{
"name":"Spicy brokoli",
"price":0,
"pos_id":"4003501",
"modifier_id":"2049c354-3f23-11ed-936c-1a67b454859d",
"translations":{
"name":"brócoli picante"
}
}
],
"price_level":{
"name":"string",
"price":1999,
"pos_id":"4003501",
"translations":{
"name":"\"\""
},
"menu_item_price_level_id":"0ffb254c-3f23-11ed-936c-1a67b454859d"
},
"menu_item_id":"19a394da-3f23-11ed-936c-1a67b454859d",
"translations":{
"name":"Cuenco de lapana"
},
"service_charge":0,
"is_self_serving":true,
"unpaid_item_hash":"\"\""
}
],
"delivery_fee":0,
"is_scheduled":true,
"payment_info":{
"status":"Paid",
"card_type":"\"\"",
"properties":"\"\"",
"last_four_digits":"\"\"",
"payment_method_id":"16bc0a06-9e01-44e2-b3b5-42fb1bfd94d6",
"payment_processor_id":"\"\"",
"payment_processor_type_id":19
},
"tax_exemption":0,
"discount_cards":[
{
}
],
"receipt_number":"JJSOU",
"service_charge":0,
"delivery_fee_tax":0,
"minimum_surcharge":0,
"status_changed_by":"System",
"regret_cancel_until":"2023-06-28 10:16:21",
"service_charge_rate":0,
"tax_rates_exemption":{
"5":0
},
"minimal_order_amount":0,
"delivery_fee_tax_rate":0,
"minimum_surcharge_tax":0,
"order_additional_info":{
"pos_wait_until_paid":true
},
"service_charge_tax_rate":0,
"additional_delivery_info":"\"\""
}
]
},
"status":"OK"
}
| Attribute | Type | Example Value | Description |
|---|---|---|---|
receipts.receipt[i].id |
string | "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9" |
JWT Token of Customer Account |
receipts.receipt[i].tax |
int | 219 |
Order tax amount |
receipts.receipt[i].total |
int | 1500 |
Order total |
receipts.receipt[i].status |
string | "SendDelayed" |
Order status |
receipts.receipt[i].is_asap |
boolean | true |
ASAP flag indicates whether the order was ASAP or scheduled. |
receipts.receipt[i].created_at |
int | "2023-06-28 10:15:34" |
Order creation timestamp |
receipts.receipt[i].order_type |
int | 4 |
Order Type (See Order Types) |
receipts.receipt[i].combo_meals |
Object Combo Meal | 1500 |
Collection of order combo meals |
receipts.receipt[i].order_items.item |
Object Menu Item | 1500 |
Collection of order menu items |
receipts.receipt[i].delivery_at |
string | "2023-06-28 10:35:34" |
Property specific to Delivery order type, expected detlivery time |
receipts.receipt[i].delivery_fee |
string | 1500 |
Property specific to Delivery order type, delivery fee |
receipts.receipt[i].pickup_at |
string | "2023-06-28 10:20:34" |
Property specific to Takeout and Dine in order types, time for order pickup |
receipts.receipt[i].is_scheduled |
string | false |
Is Scheduled flag indicates whether the order was ASAP or scheduled. |
receipts.receipt[i].payment_info.status |
string | "Paid" |
Payment status |
receipts.receipt[i].payment_info.card_type |
string | "2023-06-28 10:20:34" |
Customer account UUID |
receipts.receipt[i].payment_info.last_four_digits |
string | "2023-06-28 10:20:34" |
Customer account UUID |
receipts.receipt[i].payment_info.payment_method_id |
string | "16bc0a06-9e01-44e2-b3b5-42fb1bfd94d6" |
Payment method UUID |
receipts.receipt[i].payment_info.payment_processor_id |
string | "42fb1bfd94d6-9e01-44e2-b3b5-b3b5" |
Payment processor UUID |
receipts.receipt[i].receipt_number |
string | "JJSOU" |
Order receipt number |
receipts.receipt[i].additional_delivery_info |
string | "Leave at door" |
Delivery instruction (specific to delivery order type) |
Fetching the order details for specific order
After retrieving a list of past orders, user selects a specific order to re-order. Fetch details of the specific order by calling api/customer-accounts/{customer_uuid}/receipts/{order_id}
Request
{
"method": "get",
"url": "https://api-public-playground.menu.app/api/customer-accounts/{customer_uuid}/receipts/{order_id}",
"headers": {
"X-Request-ID": "69da3547-204b-4093-a225-54e084c24215",
"Application": "f3a90488ffee32c3acb6fcd0ca417cf6",
"Api-Version": 4.38.0,
"Accept": "application/json",
"Content-Type" : "application/json",
"Authorization" : "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXRSZWZyZXNoVFRMIjoyNjI4MDAwLCJpc3MiOiJodHRwczovL2FwaS1wdWJsaWMtcGxheWdyb3VuZC5tZW51LmFwcC9hcGkvY3VzdG9tZXJzL2xvZ2luIiwiaWF0IjoxNjkzMjA0MTQ3LCJleHAiOjE2OTMyMDc3NDcsIm5iZiI6MTY5MzIwNDE0NywianRpIjoiM0RiTngwVlB6VmpTTlJkdyIsInN1YiI6IjUwOTA5NjUiLCJwcnYiOiJjYzMyOTIxYTE1NDgwYTExN2Q5YmJjNzJjMGUxMjU2YTY4NTI0NThiIiwiYXBwbGljYXRpb25faWQiOjIwMTUsInNlc3Npb25faWQiOjI4MzQyfQ.1J3_OlydWh32BUNAySZ6Qbj1K0q-_w4KfFnra2X9FbM",
"X-QB-Enabled" : true,
"X-Request-ID" : "c10b4a70-6274-490d-80a0-03e7bb826937"
}
}
Response
{
"status": "OK",
"code": 200,
"data": {
"receipt": {
"id": 759315,
"uuid": "74d809bd-18c9-4701-918f-5c06afcc532d",
"receipt_number": "YAFZH",
"order_type": 6,
"status": "Final",
"status_changed_by": "System",
"is_test": false,
"subtotal": 1000,
"discount": 0,
"subsidy": 0,
"service_charge": 0,
"service_charge_rate": 0,
"service_charge_tax_rate": 0,
"delivery_fee_tax_rate": 0,
"tip": 200,
"tip_rate": 20,
"delivery_fee": 0,
"delivery_fee_tax": 0,
"minimum_surcharge": 0,
"minimum_surcharge_tax": 0,
"minimal_order_amount": 0,
"total": 1200,
"tax": 0,
"tax_exemption": 0,
"tax_rates": {
"0.0": 0
},
"tax_rates_exemption": {
"0.0": 0
},
"refunded": 0,
"order_items": [
{
"id": 3531555,
"type_id": 1,
"reference_type": "MenuOrderItem",
"order_id": 759315,
"menu_item_id": 1898556,
"pos_id": null,
"unpaid_item_hash": null,
"name": "Beer",
"translations": {
"name": "Beer"
},
"type": "Food",
"is_self_serving": false,
"quantity": 1,
"subtotal": 1000,
"discount": 0,
"service_charge": 0,
"total": 1000,
"tax": 0,
"tax_rate": 0,
"comment": "",
"price_level": {
"id": 3529056,
"order_item_id": 3531555,
"menu_item_price_level_id": 2199519,
"pos_id": null,
"name": null,
"translations": {
"name": null
},
"price": 1000
},
"modifiers": [],
"image": {
"thumbnail_small": "https:\/\/s3.eu-central-1.amazonaws.com\/api.playground\/images\/item_images\/_thumbs280\/2023-11-14\/3558ec9e9c711dd68e85e91bd518d44a.jpeg",
"thumbnail_medium": "https:\/\/s3.eu-central-1.amazonaws.com\/api.playground\/images\/item_images\/_thumbs720\/2023-11-14\/3558ec9e9c711dd68e85e91bd518d44a.jpeg",
"fullsize": "https:\/\/s3.eu-central-1.amazonaws.com\/api.playground\/images\/item_images\/2023-11-14\/3558ec9e9c711dd68e85e91bd518d44a.jpeg"
}
}
],
"combo_meals": [],
"discounts": [],
"venue_info": {
"id": 1056,
"name": "Sendero FC",
"address": "Felegi Tivadara 5 s",
"city": "Novi Sad",
"zip": "100",
"latitude": 45.264204,
"longitude": 19.833288,
"phone": "38163399701",
"delivery_travel_type": "driving",
"use_pos_order_number": false,
"timezone": {
"name": "America\/New_York",
"offset": "-05:00"
},
"tax_number": "",
"pickup_time": 45,
"image": null,
"country": {
"id": 14,
"name": "United States",
"code": "US",
"calling_code": "+1",
"currency_settings": {
"currency_space": false,
"decimal_separator": ".",
"thousands_separator": ",",
"symbol_position": "left"
}
},
"currency": {
"id": 5,
"code": "USD",
"code_numeric": "840",
"symbol": "$",
"rounding_unit": 0.01,
"rounding_unit_tip": 0.01
},
"dispatch_legacy": true
},
"payment_info": {
"payment_method_id": 1,
"payment_processor_id": 4123,
"properties": {
"card_type": "Visa",
"card_label": null,
"masked_number": "XXXXXXXXXXXX1111",
"expiration_date": "0830",
"expiration_year": "30",
"billing_zip_code": null,
"card_holder_name": "VISA",
"expiration_month": "08",
"first_six_digits": null,
"last_four_digits": "1111",
"payment_method_id": 1,
"customer_reference": null,
"country_of_issuance": null,
"billing_country_code": null
},
"status": "Paid",
"card_type": "Visa",
"last_four_digits": "1111",
"payment_processor_type_id": 32
},
"refunds": [],
"is_asap": true,
"regret_cancel_until": "2024-01-09 09:03:07",
"created_at": "2024-01-09 08:57:57",
"pickup_at": "2024-01-09 09:47:57",
"delivery_at": null,
"additional_delivery_info": null,
"order_additional_info": null,
"discount_cards": [],
"is_scheduled": false,
"catering_info": null
},
"order_loyalty_info": {
"points_spent": 0,
"points_accrued": 10
}
}
}
Response attributes
Check object Receipt
Creating a new order
After the selected order information is retrieved, the next step is to verify whether re-order is possible, by calling api/orders/{order_id}/reorder
Request
| Attribute | Type | Example Value | Description |
|---|---|---|---|
Authorization HTTP Header |
string | "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9" |
JWT Token of Customer Account |
order_uuid |
string | "2c2cb0c9-75e8-4b49-9c1f-713dd79af7ce" |
Order UUID |
{
"method": "get",
"url": "https://api-public-playground.menu.app/api/orders/{order_uuid}/reorder",
"headers": {
"X-Request-ID": "69da3547-204b-4093-a225-54e084c24215",
"Application": "f3a90488ffee32c3acb6fcd0ca417cf6",
"Api-Version": 4.38.0,
"Accept": "application/json",
"Content-Type" : "application/json",
"Authorization" : "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXRSZWZyZXNoVFRMIjoyNjI4MDAwLCJpc3MiOiJodHRwczovL2FwaS1wdWJsaWMtcGxheWdyb3VuZC5tZW51LmFwcC9hcGkvY3VzdG9tZXJzL2xvZ2luIiwiaWF0IjoxNjkzMjA0MTQ3LCJleHAiOjE2OTMyMDc3NDcsIm5iZiI6MTY5MzIwNDE0NywianRpIjoiM0RiTngwVlB6VmpTTlJkdyIsInN1YiI6IjUwOTA5NjUiLCJwcnYiOiJjYzMyOTIxYTE1NDgwYTExN2Q5YmJjNzJjMGUxMjU2YTY4NTI0NThiIiwiYXBwbGljYXRpb25faWQiOjIwMTUsInNlc3Npb25faWQiOjI4MzQyfQ.1J3_OlydWh32BUNAySZ6Qbj1K0q-_w4KfFnra2X9FbM",
"X-QB-Enabled" : true,
"X-Request-ID" : "c10b4a70-6274-490d-80a0-03e7bb826937"
}
}
Response
{
"code":200,
"data":{
"items":[
{
"id":"9e0cf047-ea0d-4455-9209-2018c34348cb",
"name":"Whopper Angry - Santa Fe",
"image":{
"fullsize":"/storage/images/item_images/2022-07-08/340380dd4bb1499b5703bb7762ff1111.png",
"thumbnail_small":"/storage/images/item_images/_thumbs280/2022-07-08/340380dd4bb1499b5703bb7762ff1111.png",
"thumbnail_medium":"/storage/images/item_images/_thumbs720/2022-07-08/340380dd4bb1499b5703bb7762ff1111.png"
},
"state":1,
"tax_id":1105,
"comment":"Whopper Angry A la parrilla",
"menu_id":"478b751a-d586-470f-9e8e-f8123a79651c",
"position":1,
"quantity":4,
"venue_id":"6ded15b8-5b73-44a7-98b1-afd4eb58af86",
"allergens":[
],
"food_type":null,
"is_visible":true,
"printer_id":0,
"category_id":"f4a6ecb9-d7b7-4735-ba40-f8675f90f391",
"description":"Deliciosas tiras de tocino, carne de res a la parrilla, jugosos tomates, lechuga recién cortada, mayonesa, jalapeños y cebollitas angry, sobre un pan suave con ajonjolí.",
"is_in_combo":true,
"core_item_id":"3b076ca4-d661-4eb9-a9c1-dddb7f12d1e8",
"is_available":true,
"price_levels":[
{
"id":"39ff107e-a603-4cdc-bae8-f4e94b0a70c0",
"name":null,
"price":5000,
"state":1,
"pos_id":"",
"calories":null,
"selected":true,
"is_visible":true,
"translations":{
"name":"",
"description":""
},
"price_dynamic":5000,
"delivery_price":5000,
"price_by_order_type":5000,
"price_configuration_2":5000,
"price_configuration_3":5000,
"price_configuration_4":5000,
"price_configuration_5":5000,
"price_configuration_6":5000,
"price_configuration_7":5000,
"price_configuration_2_dynamic":0,
"price_configuration_3_dynamic":0,
"price_configuration_4_dynamic":0,
"price_configuration_5_dynamic":0,
"price_configuration_6_dynamic":0,
"price_configuration_7_dynamic":0
}
],
"show_in_menu":true,
"translations":{
"name":"Kauwela Bowl",
"description":"Kauwela Bowl Description"
},
"allow_takeout":true,
"internal_name":"Kauwela Poke Bowl",
"is_deliverable":true,
"subcategory_id":"8b08e48e-ba7a-48c4-89e4-53592b17087b",
"is_self_serving":false,
"modifier_groups":[
],
"is_visible_in_cms":true,
"channel_visibility":[
"ec4",
"ec3",
"ec5",
"menu"
],
"is_dine_in_allowed":true,
"is_foodspot_allowed":true,
"price_by_order_type":5000,
"temporary_disabled_until":null,
"is_visible_in_store_group":true,
"required_modifier_group_ids":[
],
"is_catering_delivery_allowed":true
}
],
"venue_id":"6ded15b8-5b73-44a7-98b1-afd4eb58af86",
"discounts":[
],
"order_type":6,
"combo_meals":[
],
"foodspot_code":null,
"delivery_address":null,
"original_order_type":6,
"validation_check_code":2000
},
"status":"OK"
}
| Attribute | Type | Example Value | Description |
|---|---|---|---|
venue_id |
string | "6ded15b8-5b73-44a7-98b1-afd4eb58af86" |
Venue UUID of venue where past order was made |
original_order_type |
string | 6 |
Order type id for previous order (see Order Types) |
order_type |
string | 6 |
Order type id that can be used for re-order if original order type is unavailable (see Order Types) |
items |
Object Menu Item | Collection of Menu Items with price levels and modifier groups included in the previous order | |
discounts |
Collection of Discounts | Collection of the discounts applied to the previous order | |
combo_meals |
Object Combo Meal | Collection of the combo meals included in the order | |
foodspot_code |
string | "FOOD1" |
Foodspot code (specific to Foodpot order type) |
delivery_address |
string | "Apt. 713 102 D'Amore Mews, South Fritzborough, OR 46263" |
Delivery address (specific to the Delivery order type) |
validation_check_code |
string | "2000" |
Validation check code represents the result of the backend validation for the order as part of success response. This can be used to show appropriate dialogs to the user if something was changed from ther preious order. See Validation Check Codes. |
User dialogs
Dialogs can be used to inform the user if re-order is not possible, or if there have been some changes to the order.
If it is not possible to continue with re-order, you will receive custom error code 2017 in the API reponse. There may be several reasons for this including:
- If venue is closed or temporarily unavailable at the time of the re-order
- If order type is unavailable and it is not possible to switch to another order type
- If it is no longer possible to deliver order to user's address (only for delivery order type)
- If foodspot code has expired (only for foodspot order type)

If it is possible to continue with re-order, but with some changes compared to user's previous order, you will receive a successful API response with a validation check code. See Validation Check Codes.
Completing the order
Once the order is verified, the items can be added to the cart. The cart can also be edited - items can be added or removed to tailor the previous order to the current needs of the customer. Once the customer is ready to checkout, the flow is identical to the regular Placing order flow.




