Cinema payments and orders
Build cinema checkout with screening, venue, seating, ticket delivery, concession, and payment context.
Keep tickets, assigned seats, concessions, and payment in one order lifecycle. DEUNA lets cinema teams sell the complete visit while retaining the event context required to issue tickets and support customers.
This guide covers the documented cinema fields. Other entertainment models use the standard order and supported merchant metadata; do not infer general event or ticketing fields from the cinema example.
Complete cinema order payload#
The event details live in shipping_options.details, while tickets and concessions remain distinct line items for operations and reconciliation.
Cinema
Process the payment in one request by sending the order, payer, and tokenized payment source inline.
/v2/merchants/orders/purchaseScreening, venue, assigned seats, ticket delivery, and concessions in one order lifecycle.
itemsshipping_options.details.event_dateevent_seatingrecipient_email{
"payer_info": {
"email": "alex@example.com"
},
"payment_source": {
"method_type": "credit_card",
"payment_method": "TOKENIZED_PAYMENT_METHOD"
},
"order_type": "DEUNA_CHECKOUT",
"order": {
"order_id": "cinema-77821",
"store_code": "mx-polanco-12",
"currency": "MXN",
"items_total_amount": 42000,
"sub_total": 42000,
"total_tax_amount": 6720,
"total_amount": 48720,
"items": [
{
"id": "show-20261115-1930-screen-05",
"sku": "ADULT-2D",
"name": "Two adult tickets",
"description": "Evening screening · Screen 5",
"options": "Seats E10 and E11",
"quantity": 2,
"category": "movie_tickets",
"type": "event",
"taxable": true,
"unit_price": {
"amount": 15000,
"currency": "MXN",
"currency_symbol": "$"
},
"total_amount": {
"amount": 30000,
"original_amount": 30000,
"currency": "MXN",
"currency_symbol": "$",
"total_discount": 0
},
"tax_amount": {
"amount": 4800,
"currency": "MXN",
"currency_symbol": "$"
}
},
{
"id": "concession-combo-02",
"sku": "POPCORN-COMBO-L",
"name": "Large popcorn combo",
"quantity": 1,
"category": "concessions",
"taxable": true,
"unit_price": {
"amount": 12000,
"currency": "MXN",
"currency_symbol": "$"
},
"total_amount": {
"amount": 12000,
"original_amount": 12000,
"currency": "MXN",
"currency_symbol": "$",
"total_discount": 0
},
"tax_amount": {
"amount": 1920,
"currency": "MXN",
"currency_symbol": "$"
}
}
],
"shipping_options": {
"type": "pickup",
"method": "digital_ticket",
"requires_shipping": false,
"details": {
"store_id": "mx-polanco-12",
"store_name": "Polanco Cinema",
"address": "Avenida Ejército Nacional 843, Ciudad de México",
"address_coordinates": {
"lat": 19.4391,
"lng": -99.2019
},
"contact": {
"name": "Guest services",
"phone": "+525500000000"
},
"event_date": "2026-11-15T19:30:00-06:00",
"event_seating": "E10, E11",
"event_city": "Ciudad de México",
"event_country_code": "MX",
"recipient_email": "alex@example.com"
}
},
"expires_at": "2026-11-15T19:15:00-06:00",
"metadata": {
"vertical": "cinema",
"movie_id": "movie-4408",
"format": "2D"
}
},
"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 |
|---|---|
| Screening | event_date, store and movie identifiers |
| Venue | store_id, store_name, address, city, country, and coordinates |
| Seats | event_seating and ticket item options |
| Ticket delivery | recipient_email and payer contact |
| Concessions | Separate items[] with their own SKU, quantity, tax, and total |
Production checklist#
- Keep the cinema show ID and seat reservation stable through the payment attempt.
- Make the order expiration consistent with the reservation system’s hold duration.
- Separate ticket and concession lines for tax, fulfillment, refund, and reporting needs.
- Send the correct ticket recipient when the buyer and attendee differ.
- Test seat-hold expiry, retry, partial refund, canceled screening, and webhook delay scenarios.
Continue with Payment workflow and statuses and Webhooks.