Skip to main content
On this page

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.

Complete order payload

QSR

Menu, modifiers, service mode, location, schedule, and customer instructions in one restaurant order.

itemsshipping_optionsscheduled_atuser_instructions
Request bodyJSON
{
  "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.",
    "payer_info": {
      "email": "alex@example.com",
      "external_registration_date": "2024-02-10T12:00:00Z"
    },
    "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#

RequirementOrder fields
Menu and modifiersitems[].id, sku, options, quantity, category
Pickup or deliveryshipping_options.type, method, details.store_id
Timingscheduled_at, shipping_options.details.additional_details.pickup_time
Kitchen or handoff notesuser_instructions
Loyalty and service modeNamespaced 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 payment state through verified webhooks before releasing the order to fulfillment.
  • Test pickup, delivery, modifier, coupon, decline, retry, and timeout scenarios.

Next, review Process an order payment and the payment workflow and statuses.