Skip to main content

These examples show complete request bodies for POST /merchants/orders. Choose an industry, inspect every field, and copy the JSON or cURL request. The examples follow the public Create Order contract; amounts are expressed in minor currency units.

What fields are required in order.items when creating an order?#

The short answer is that the base Create Order request validator does not define a universally required property inside each item. It validates whether the items array is present for a particular order type, not the contents of each item.

Order typeRequired objectBase contract behavior
DEUNA_CHECKOUTorder.itemsRequired. When supplied, the fulfillment type accepts only dine_in, pickup, or delivery.
SUBSCRIPTIONSorder.itemsRequired. Mark the applicable lines with included_in_subscription.
AIRLINE_ORDERorder.airline_informationRequired. The items array remains optional at the base-contract level.
DEUNA_NOWNoneThe items array is not required by the base contract. Include it when downstream processing needs product detail.
PAYMENT_LINKNoneThe items array is not required by the base contract. Include it when the hosted experience or downstream processing needs product detail.

An empty item is not a useful integration target. Payment providers, fraud checks, tax handling, reporting, and your own reconciliation may need more detail. Unless a provider guide states a stricter requirement, use this portable baseline for every item:

JSON
{
  "id": "merchant-item-001",
  "sku": "SKU-001",
  "name": "Product name",
  "quantity": 1,
  "unit_price": {
    "amount": 2500,
    "currency": "USD"
  },
  "total_amount": {
    "amount": 2500,
    "original_amount": 2500,
    "total_discount": 0,
    "currency": "USD"
  },
  "tax_amount": {
    "amount": 0,
    "currency": "USD"
  },
  "category": "products",
  "type": "physical",
  "taxable": false
}

The item model supports the following field groups:

PurposeSupported fields
Merchant item identityid, sku, upc, isbn
Customer-facing item detailname, description, image_url, details_url
Quantity and pricing detailquantity, uom, unit_price, total_amount, tax_amount, taxable, discounts
Catalog and variant detailbrand, manufacturer, category, sub_category, color, size, weight
Fulfillment and additional contextoptions, type, item_details, included_in_subscription, shipping_options
FieldDocumented values
typephysical, digital, event, service

Keep item and order currencies aligned and calculate amounts in minor currency units.

Required order-level fields and amount rule

Field or ruleRequirement
order_idRequired for every order.
currencyRequired for every order.
total_amountMust be greater than zero for normal purchase orders. A zero-value first-use recurrence is the documented card-verification exception.
sub_total + total_tax_amount = total_amountEnforced whenever a subtotal or total tax amount is supplied.

Vertical field guide#

QSR, cinema, banking, and retail are documentation patterns based on the standard checkout order type. They are not separate order-type values. Airlines use the dedicated airline order contract.

VerticalOrder typePrimary field setHow to use it
QSRDEUNA_CHECKOUTitems[].id, items[].sku, options, shipping_options, scheduled_at, user_instructionsIdentify menu lines and modifiers, the service mode and store, the preparation time, and handoff instructions. The items array is required.
AirlinesAIRLINE_ORDERairline_information.booking_items, pnr, ticket_number, passenger, legs, ancillariesSend booking, ticket, agency, passenger, itinerary, and paid-service detail. Airline information is required; the items array is optional at the base-contract level.
CinemaDEUNA_CHECKOUTitems, type, options, shipping_options.details, expires_atModel tickets and concessions as separate lines, identify event tickets, and attach screening time, seats, venue, recipient, and the seat-hold deadline. The items array is required.
BankingDEUNA_CHECKOUTitems, type, description, statement_descriptor, initiator_type, channel_type, metadataModel the payment as a service and send masked or tokenized business references. The items array is required. Never put full account numbers or credentials in metadata.
RetailDEUNA_CHECKOUTitems, discounts, shipping_address, shipping_method, shipping_optionsSend product and variant identity, promotions, destination, delivery method, and fulfillment context. The items array is required. Keep item discount references aligned with the order-level discount array.

Complete examples#

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"
    }
  }
}

What stays common#

Every industry uses the same core contract:

  • order_id, store_code, and currency identify the merchant business context.
  • Amounts are integers in minor currency units and must reconcile with item, tax, discount, and shipping details.
  • items describe what the customer is buying or paying for.
  • payer_info, channel_type, and initiator_type clarify who initiated the flow and where.
  • callback_urls and the returned order_token connect the synchronous request to its final outcome.
  • metadata carries merchant-defined references; supported typed fields should be preferred whenever they exist.

Continue the integration#