Editing bookings

NB. This feature is currently in beta and should only be used when the restrictions are fully understood and match your use case exactly.

Through the edit booking functionality a previously made booking can be altered providing customers the ability to amend their bookings without having to deal with refunds and multiple bookings.

Currently there are a number of restrictions on editing bookings:

  • The booking can't contain any concessions (tickets only)
  • Only external payment providers are supported (no Vista payment processing)
  • Only simple ticket types are supported (no Package/Loyalty Recognition/Voucher/Third Party member tickets)

Starting a booking edit

When called, the Edit Booking endpoint will return a new order, along with a new userSessionId, that contains the contents of the booking.

POST /cinemas//bookings//edit

Response:

{
    "order": {
        "cinemaId": "0000000001",
        "userSessionId": "7af20a3da7f04a58a3be6fb47c0c971f",
        "orderTotalValueInCents": 0,
        "taxValueInCents": 0,
        "bookingFeeTotalValueInCents": 0,
        "bookingFeeTaxValueInCents": 0,
        "sessions": [
            {
                "id": 2552,
                "filmTitle": "Back to the Future",
                "allocatedSeating": true,
                "tickets": [
                    {
                        "ticketDetails": {
                            "ticketId": 1,
                            "ticketTypeCode": "0001",
                            "description": "Adult",
                            "finalPriceInCents": 3450,
                            "originalPriceInCents": 3450,
                            "taxInCents": 450,
                            "voucherBarcode": "",
                            "loyaltyRecognitionId": null,
                            "loyaltyRecognitionSequence": null,
                            "dealDefinitionId": null,
                            "dealDescription": null,
                            "dealSequence": null,
                            "isTicketPackage": false,
                            "childTickets": [],
                            "childConcessions": [],
                            "bookingStatus": 2
                        },
                        "seats": [
                            {
                                "areaCategoryCode": "0000000001",
                                "areaNumber": 1,
                                "rowIndex": 6,
                                "columnIndex": 14,
                                "rowDisplay": "J",
                                "columnDisplay": "4"
                            }
                        ]
                    }
                ]
            }
        ],
        "bookingFees": [
            {
                "finalPriceInCents": 500,
                "taxInCents": 152,
                "bookingStatus": 2
            }
        ],
        "expiryDateUtc": "2018-10-01T04:02:02.90122Z"
    },
    "suggestedDeals": [
        {
            "id": "0000000032",
            "description": "Super Saver",
            "isSeasonPass": false,
            "isTicketUpgrade": false,
            "limitPerOrder": null,
            "requiresLoyalty": false,
            "requiresVoucher": false,
            "excludesExistingDeals": true,
            "excludesExistingDealsAvailable": 1
        }
    ]
}

Order properties when editing

  • The order returned when a booking is being edited will contain both the original booking items and any changes

  • The bookingStatus property of Tickets, Concessions and Booking fees indicate whether the item has been added, removed or is unchanged from original booking:

  • Added items have been added in the order but not booked (or committed) to booking yet

  • Booked items have been booked already on a previous order

  • Removed items were once booked but have been removed in current order

  • The orderTotalValueInCents, taxValueInCents, bookingFeeTotalValueInCents, and bookingFeeTaxValueInCents represent the value of changes in the order.

Booking fees when editing

  • Any booking fees paid as part of original booking are re-calculated whenever as part of the edit based on the current booking fee pricing and a combination of the original booking and any changes in the current order.
  • If booking fee pricing or rules have changed since the original booking it is possible that an outstanding balance may exist as soon as the booking is edited as the booking fees are re-calculated
  • The only way to 'lock' booking fees when editing is to use the booking fee override functionality and by-pass the default auto-calculated booking fee process

Editing a booking

The following endpoints are supported when a booking is in an edit state:

  • AddTickets (without SelectedSeats property)
  • RemoveTickets
  • SetSelectedSeats
  • GetOrder
  • ResetOrderExpiry
  • CancelOrder
  • CompleteEditBooking

The AddTickets, RemoveTickets, SetSelectedSeats, ResetOrderExpiry, and GetOrder endpoints will function as with a regular order, with the exception that the returned order value properties will display the difference in value between the original booking and current order.

For example, in the following call a ticket is added to the order. In the response order we can see that the order value is equal to the cost of the added ticket only.

POST: /RESTTicketing.svc/order/tickets

Request:

{
    "UserSessionId": "7af20a3da7f04a58a3be6fb47c0c971f",
    "CinemaId": "0000000001",
    "SessionId": "2552",
    "TicketTypes": [
        {
            "TicketTypeCode": "0001"
        }   
    ],
    "BookingMode": 1,
    "ReturnOrder": true
}

Response:

{
    "ExtendedResultCode": 0,
    "Order": {
        "UserSessionId": "7af20a3da7f04a58a3be6fb47c0c971f",
        "CinemaId": "0000000001",
        "TotalValueCents": 3450,
        "TaxValueCents": 450,
        "BookingFeeValueCents": 0,
        "BookingFeeTaxValueCents": 0,
        "TotalOrderCount": 2,
        "Sessions": [
            {
                "CinemaId": "0000000001",
                "SessionId": 2552,
                "AllocatedSeating": true,
                "SeatsAllocated": true,
                "Tickets": [
                    {
                        "Id": "1",
                        "TicketTypeCode": "0001",
                        "PriceCents": 3450,
                        "SeatData": "K4",
                        "Description": "Adult",
                        "SeatNumber": "4",
                        "SeatRowId": "K",
                        "SeatAreaCatCode": "0000000001",
                        "SeatAreaNumber": "1",
                        "SeatRowIndex": 5,
                        "SeatColumnIndex": 14,
                        "DealPriceCents": 3450,
                        "DealDefinitionId": null,
                        "DealDescription": null,
                        "FinalPriceCents": 3450,
                        "TaxCents": 450
                    },
                    {
                        "Id": "2",
                        "TicketTypeCode": "0001",
                        "PriceCents": 3450,
                        "SeatData": "K5",
                        "Description": "Adult",
                        "SeatNumber": "5",
                        "SeatRowId": "K",
                        "SeatAreaCatCode": "0000000001",
                        "SeatAreaNumber": "1",
                        "SeatRowIndex": 5,
                        "SeatColumnIndex": 13,
                        "DealPriceCents": 3450,
                        "DealDefinitionId": null,
                        "DealDescription": null,
                        "FinalPriceCents": 3450,
                        "TaxCents": 450
                    }
                ],
                "FilmTitle": "Back to the Future"
            }
        ],
        "VistaTransactionNumber": 0,
        "VistaBookingNumber": 5206,
        "LastUpdated": "/Date(1538367884014+1300)/",
        "LastUpdatedUtc": "2018-10-01T04:24:44.0142743Z",
        "ExpiryDate": "/Date(1538368184014+1300)/",
        "ExpiryDateUtc": "2018-10-01T04:29:44.0142743Z",
        "SuggestedDeals": [
            {
                "Id": "0000000032",
                "Description": "Super Saver",
                "IsSeasonPass": false,
                "IsTicketUpgrade": false,
                "LimitPerOrder": null,
                "RequiresLoyalty": false,
                "RequiresVoucher": false,
                "ExcludesExistingDeals": true,
                "ExcludesExistingDealsAvailable": 2
            }
        ]
    },
    "Result": 0,
    "ErrorDescription": null
}

Cancelling an edit

The CancelOrder endpoint will cancel any changes made to the booking while it was in an edit state and return the booking to its original state.

Completing an edit

The Complete Edit Booking endpoint commits added and removed changes in the order to the booking. Any future calls made to the GetSingleBooking endpoint will return the booking with all changes made while the booking was in an edit state.

For unpaid bookings no information is required to complete an edit

POST: /orders/{{userSessionId}}/complete-edit

Request:

{
}

For paid booking with an outstanding positive balance a payment is required. Currently only external payments are supported when editing bookings.

POST: /orders/{{userSessionId}}/complete-edit

Request:

{
  "payments": {
    "externalPayments": [
      {
        "amountInCents": 1000,
        "paymentProviderReference": "BA46323354",
        "paymentTenderCategory": "CREDIT",
        "cardNumberMasked": "411111.....1111",
        "cardType": "VISA"
      }
    ]
  }
}

For paid booking with an outstanding negative balance a refund payment is required. Currently only external refund payments are supported when editing bookings.

POST: /orders/{{userSessionId}}/complete-edit

Request:

{
  "refundPayments": {
    "externalPayments": [
      {
        "amountInCents": 1000,
        "paymentProviderReference": "BA46323354",
        "paymentTenderCategory": "CREDIT",
        "cardNumberMasked": "411111.....1111",
        "cardType": "VISA"
      }
    ]
  }
}