QSR payments and orders
Build quick-service restaurant checkout and payment flows with menu, modifier, location, and fulfillment context.
Build fast restaurant experiences without separating payment from the order your kitchen and operations teams need. DEUNA keeps item modifiers, service mode, store, schedule, and customer instructions attached to the payment lifecycle.
Complete QSR order payload#
The amounts use minor currency units. This example models a scheduled pickup with two customized items and enough context to reconcile the payment with the restaurant order.
QSR
Process the payment in one request by sending the order, payer, and tokenized payment source inline.
/v2/merchants/orders/purchaseMenu, modifiers, service mode, location, schedule, and customer instructions in one restaurant order.
itemsshipping_optionsscheduled_atuser_instructions{
"payer_info": {
"email": "alex@example.com",
"external_registration_date": "2024-02-10T12:00:00Z"
},
"payment_source": {
"method_type": "credit_card",
"payment_method": "TOKENIZED_PAYMENT_METHOD"
},
"order_type": "DEUNA_CHECKOUT",
"order": {
"order_id": "qsr-2048",
"store_code": "mad-gran-via-01",
"currency": "EUR",
"items_total_amount": 2890,
"sub_total": 2890,
"total_tax_amount": 286,
"total_amount": 3176,
"items": [
{
"id": "meal-smash-01",
"sku": "SMASH-COMBO",
"name": "Smash burger combo",
"description": "Burger, fries, and drink",
"options": "medium; no onions; sparkling water",
"quantity": 1,
"category": "combos",
"taxable": true,
"unit_price": {
"amount": 1890,
"currency": "EUR",
"currency_symbol": "€"
},
"total_amount": {
"amount": 1890,
"original_amount": 1890,
"currency": "EUR",
"currency_symbol": "€",
"total_discount": 0
},
"tax_amount": {
"amount": 172,
"currency": "EUR",
"currency_symbol": "€"
}
},
{
"id": "side-wings-06",
"sku": "WINGS-6",
"name": "Six hot wings",
"options": "chipotle sauce",
"quantity": 1,
"category": "sides",
"taxable": true,
"unit_price": {
"amount": 1000,
"currency": "EUR",
"currency_symbol": "€"
},
"total_amount": {
"amount": 1000,
"original_amount": 1000,
"currency": "EUR",
"currency_symbol": "€",
"total_discount": 0
},
"tax_amount": {
"amount": 114,
"currency": "EUR",
"currency_symbol": "€"
}
}
],
"shipping_options": {
"type": "pickup",
"method": "counter",
"requires_shipping": false,
"details": {
"store_id": "mad-gran-via-01",
"store_name": "Gran Vía",
"address": "Calle Gran Vía 42, Madrid",
"address_coordinates": {
"lat": 40.4201,
"lng": -3.7058
},
"contact": {
"name": "Gran Vía team",
"phone": "+34910000000"
},
"additional_details": {
"pickup_time": "2026-10-03T18:30:00Z",
"stock_location": "Front counter"
}
}
},
"scheduled_at": "2026-10-03T18:30:00Z",
"user_instructions": "Label the order for Alex. Include napkins.",
"channel_type": "mobile_app_ios",
"metadata": {
"vertical": "qsr",
"service_mode": "pickup",
"loyalty_member_id": "LOY-88201"
}
},
"callback_urls": {
"on_success": "https://merchant.example.com/payments/success",
"on_pending": "https://merchant.example.com/payments/pending",
"on_reject": "https://merchant.example.com/payments/rejected",
"on_canceled": "https://merchant.example.com/payments/canceled",
"on_failed": "https://merchant.example.com/payments/failed"
}
}Model the business context#
| Requirement | Order fields |
|---|---|
| Menu and modifiers | items[].id, sku, options, quantity, category |
| Pickup or delivery | shipping_options.type, method, details.store_id |
| Timing | scheduled_at, shipping_options.details.additional_details.pickup_time |
| Kitchen or handoff notes | user_instructions |
| Loyalty and service mode | Namespaced keys inside metadata |
Production checklist#
- Keep item, tax, discount, shipping, and total amounts internally consistent.
- Send the store that will prepare or fulfill the order.
- Use an ISO 8601 timestamp and the correct merchant timezone for scheduled orders.
- Confirm the final DEUNA payment state before releasing the order to fulfillment.
- Test pickup, delivery, modifier, coupon, decline, retry, and timeout scenarios.
Next, review Create payment and the payment workflow and statuses.