Deals

Deals allow for special pricing and free items to be offered to users as they shop. Throughout the Connect order endpoints, deals are automatically suggested as an order gets close to qualifying for a certain deal, and are applied automatically when the order qualifies for it.

There are two methods for using in Connect:

  • show deals to customers first, before they add items to their order
  • let customers add items to their order first, and then suggest deals as applicable

Note: The examples on this page have been truncated for brevity.

Supported deals

Deals Feature Feature Description Supported
Season passes Admission to multiple sessions
Volume discount Buy 1 item for $2, 2 for $3.50, 3 for $5, etc
Minimum spend deal Spend $X to unlock a deal
Price reduction to a different item Buy one, get one half price
Price reduction to an additional item Buy one, get one half price and another item at a discount
Offering discounted item as a deal If an item has a discount, choose to offer it as a deal or not
Item price off deal Get a free small popcorn with an optional upgrade for discounted price
Deals exclusive to vouchers Deals only available with a valid voucher
Deals exclusive to loyalty recognition Deals only available with a loyalty recognition
Credit card deals Deals only available with a certain credit card brand
Deal triggers Configurable triggers for suggesting deals
Worse deals Selecting a worse deal than the deal automatically selected by Connect
Double dealing Applying more than one deal to a single item

View deals first

Deals can be viewed via the OData Get Deals endpoint.

GET: /OData.svc/Deals?$format=json

Response:

{
    "odata.metadata": "https://abccinemas.com/WSVistaWebClient/OData.svc/$metadata#Deals",
    "value": [
        {
            "ID": "0000000006",
            "Description": "Sweet Treats",
            "ExtendedDescription": "Buy a ticket and get a choc top half price",
            "RequiresVoucher": false,
            "RequiresLoyalty": false,
            "IsSeasonPass": false,
            "IsTicketUpgrade": false,
            "LimitPerOrder": null,
            "Priority": 1,
            "CinemaIds": [
                "0002"
            ],
            "SalesChannels": [
                "CALL",
                "WWW",
                "POS",
            ]
        },
        {
            "ID": "0000000008",
            "Description": "Date Night Deal",
            "ExtendedDescription": "Buy one Adult ticket and get a second for cheap",
            "RequiresVoucher": false,
            "RequiresLoyalty": false,
            "IsSeasonPass": false,
            "IsTicketUpgrade": false,
            "LimitPerOrder": null,
            "Priority": 1,
            "CinemaIds": [
                "0002"
            ],
            "SalesChannels": [
                "CALL",
                "WWW",
                "POS",
            ]
        }
    ]
}

The specific items required to qualify for a deal can then be retrieved via the GetDealItems endpoint.

GET: /RESTTicketing.svc/cinemas//deal/

Response:

{
    "ExtendedResultCode": 0,
    "DealDefinitionId": "0000000008",
    "DealGroups": [
        {
            "Id": 5,
            "Description": "First ticket",
            "AcceptanceCriteria": {
                "QuantityRange": {
                    "MinimumRequired": 1,
                    "MaximumAvailable": 1
                },
                "MinimumSpend": null,
                "ForEachValueSpent": null
            },
            "Components": {
                "Tickets": [
                    {
                        "DiscountType": 0,
                        "DiscountValue": 0,
                        "TicketTypeCode": "0022",
                        "FilmCode": null,
                        "FormatCode": null,
                        "OrderedQuantity": 0
                    }
                ],
                "Concessions": []
            },
            "MatchingMovies": [
                {
                    "Id": "HO00000004",
                    "Name": "The Notebook",
                    "HOCode": "A000000006",
                    "HOPK": "HO00000004",
                    "Sessions": [
                        {
                            "Id": "4452",
                            "StartTime": "2018-03-13T17:20:00.000"
                        },
                        {
                            "Id": "4456",
                            "StartTime": "2018-03-14T17:00:00.000"
                        }
                    ]
                },
                {
                    "Id": "HO00000005",
                    "Name": "Love Actually",
                    "HOCode": "A000000008",
                    "HOPK": "HO00000005",
                    "Sessions": [
                        {
                            "Id": "4450",
                            "StartTime": "2018-03-13T12:05:00.000"
                        },
                        {
                            "Id": "4454",
                            "StartTime": "2018-03-14T11:45:00.000"
                        }
                    ]
                }
            ],
            "MatchingConcessions": []
        },
        {
            "Id": 6,
            "Description": "Discounted ticket",
            "AcceptanceCriteria": {
                "QuantityRange": {
                    "MinimumRequired": 1,
                    "MaximumAvailable": 1
                },
                "MinimumSpend": null,
                "ForEachValueSpent": null
            },
            "Components": {
                "Tickets": [
                    {
                        "DiscountType": 1,
                        "DiscountValue": 10,
                        "TicketTypeCode": "0022",
                        "FilmCode": null,
                        "FormatCode": null,
                        "OrderedQuantity": 0
                    }
                ],
                "Concessions": []
            },
            "MatchingMovies": [
                {
                    "Id": "HO00000004",
                    "Name": "The Notebook",
                    "HOCode": "A000000006",
                    "HOPK": "HO00000004",
                    "Sessions": [
                        {
                            "Id": "4452",
                            "StartTime": "2018-03-13T17:20:00.000"
                        },
                        {
                            "Id": "4456",
                            "StartTime": "2018-03-14T17:00:00.000"
                        }
                    ]
                },
                {
                    "Id": "HO00000005",
                    "Name": "Love Actually",
                    "HOCode": "A000000008",
                    "HOPK": "HO00000005",
                    "Sessions": [
                        {
                            "Id": "4450",
                            "StartTime": "2018-03-13T12:05:00.000"
                        },
                        {
                            "Id": "4454",
                            "StartTime": "2018-03-14T11:45:00.000"
                        }
                    ]
                }
            ],
            "MatchingConcessions": []
        }
    ],
    "Result": 0,
    "ErrorDescription": null
}

This endpoint returns all information regarding how the deal is triggered, and what discounts are offered.

  • DealGroups contains lists of items which are either required to qualify for the deal or are discounted as part of the deal.
  • AcceptanceCriteria details how many items from the list have to be or can be purchased, and optionally how much must be spent on these items or how much will trigger an incremental deal.
  • Components details the items that are included in the deal group.
  • MatchingMovies shows the films and sessions the tickets in Components may be purchased for to qualify for the deal. Tickets may be restricted to certain films, certain movie formats (for example, 3D only), or to certain price cards (for example, Wednesday pricing only).
  • MatchingConcessions shows the concessions in Components that may be purchased to qualify for the deal. A certain class of concessions may qualify for the deal and the MatchingConcessions field will include all concessions belonging to this class.

The items specified in the GetDealItems response can then be added to the order through the standard order tickets flow and order concessions flow.

Suggested deals

As tickets and concessions are added to an order, Connect will check for available deals. This can lead to one of the following scenarios:

  • The order only needs a single item to qualify for a deal. In this case, Connect will 'suggest' the deal (return the deal in the response).

POST: /orders//sessions//set-tickets

Response:

{
    "order": {
        "cinemaId": "0002",
        "userSessionId": "d8047d81457b425b89716faa9aac60e9",
        "orderTotalValueInCents": 2325,
        "taxValueInCents": 321,
        "bookingFeeTotalValueInCents": 375,
        "bookingFeeTaxValueInCents": 52,
        "sessions": [
            {
                "id": 4452,
                "filmTitle": "The Notebook",
                "filmClassification": "M",
                "startTime": "2018-03-13T17:20:00+12:00",
                "allocatedSeating": true,
                "tickets": [
                    {
                        "ticketDetails": {
                            "ticketId": 1,
                            "ticketTypeCode": "0022",
                            "description": "Adult",
                            "finalPriceInCents": 1950,
                            "originalPriceInCents": 1950,
                            "taxInCents": 269,
                            "dealDefinitionId": null,
                            "dealDescription": null,
                            "dealSequence": null,
                        }
                    }
                ]
            }
        ]
    },
    "suggestedDeals": [
        {
            "id": "0000000008",
            "description": "Date Night Deal",
            "isSeasonPass": false,
            "isTicketUpgrade": false,
            "limitPerOrder": null,
            "requiresLoyalty": false,
            "requiresVoucher": false
        },
        {
            "id": "0000000006",
            "description": "Sweet Treats",
            "isSeasonPass": false,
            "isTicketUpgrade": false,
            "limitPerOrder": null,
            "requiresLoyalty": false,
            "requiresVoucher": false
        }
    ]
}
  • The order qualifies for a deal. In this case, Connect will apply the deal that saves the most money for the customer, and return the order with an updated deal price.

POST: /orders//sessions//set-tickets

Response:

{
    "order": {
        "cinemaId": "0002",
        "userSessionId": "d8047d81457b425b89716faa9aac60e9",
        "orderTotalValueInCents": 3450,
        "taxValueInCents": 476,
        "bookingFeeTotalValueInCents": 500,
        "bookingFeeTaxValueInCents": 69,
        "sessions": [
            {
                "id": 4452,
                "filmTitle": "The Notebook",
                "startTime": "2018-03-13T17:20:00+12:00",
                "tickets": [
                    {
                        "ticketDetails": {
                            "ticketId": 1,
                            "ticketTypeCode": "0022",
                            "description": "Adult",
                            "finalPriceInCents": 1950,
                            "originalPriceInCents": 1950,
                            "taxInCents": 269,
                            "dealDefinitionId": "0000000008",
                            "dealDescription": "Date Night Deal",
                            "dealSequence": 1
                        }
                    },
                    {
                        "ticketDetails": {
                            "ticketId": 2,
                            "ticketTypeCode": "0022",
                            "description": "Adult",
                            "finalPriceInCents": 1000,
                            "originalPriceInCents": 1950,
                            "taxInCents": 138,
                            "dealDefinitionId": "0000000008",
                            "dealDescription": "Date Night Deal",
                            "dealSequence": 1
                        }
                    }
                ]
            }
        ]
    }
}

Deals and suggestions are recalculated when items are removed from the order.

If you want to get suggested deals for a specific set of tickets and concessions before adding them to an order (for example, if you hold a virtual order in your app rather than calling Connect on every new item), then the GetDealSuggestions endpoint can be used.

POST: /RESTTicketing.svc/dealsuggestions

Request:

{
  "CinemaId": "0002",
  "Sessions": [
  	{
  		"SessionId": 4452,
  		"TicketTypes": [
  			{
  				"TicketTypeCode": "0022",
  				"Quantity": 1
  			}
  		]
  	}
  ]
}

Response:

{
    "ExtendedResultCode": 0,
    "CinemaId": "0002",
    "Concessions": [],
    "Sessions": [
        {
            "SessionId": 4460,
            "TicketTypes": [
                {
                    "TicketTypeCode": "0022",
                    "Description": "Adult",
                    "IsPackage": false,
                    "ChildTickets": null,
                    "ChildConcessions": null,
                    "PriceEachCents": 1950,
                    "DealPriceCents": 1950,
                    "DealDefinitionId": null,
                    "DealDescription": null
                }
            ]
        }
    ],
    "SuggestedDeals": [
        {
            "Id": "0000000006",
            "Description": "Sweet Treats",
            "IsSeasonPass": false,
            "IsTicketUpgrade": false,
            "LimitPerOrder": null,
            "RequiresLoyalty": false,
            "RequiresVoucher": false
        },
        {
            "Id": "0000000008",
            "Description": "Date Night Deal",
            "IsSeasonPass": false,
            "IsTicketUpgrade": false,
            "LimitPerOrder": null,
            "RequiresLoyalty": false,
            "RequiresVoucher": false
        }
    ],
    "Result": 0,
    "ErrorDescription": null
}

Loyalty recognition deals

Loyalty recognition deals are supported within Connect. However, the following criteria need to be met before Connect can suggest or apply this kind of deal:

  • A loyalty member must be logged in
  • The loyalty member has to be eligible for the recognition. This means the recognition has to be available to the member, and the member must have enough points to redeem the recognition
  • The deal can only be applied as many times as the member can afford the points cost, or as many times as the recognition is limited per order

Voucher deals

This requires Vista Vouchers and Gift Cards 4.5.8 or above

Deals exclusive to a voucher are supported within Connect. The voucher must be configured as a miscellaneous voucher, and the deal should be configured to be exclusive to this voucher.

To apply the deal, call the ApplyDealVoucher endpoint with the userSessionId of your order, specifying the barcode of the voucher and the ID of the deal to be applied. Note that the items for the deal must still be added to the order separately, applying the voucher only enables the deal to be applied.

POST: /orders//deal-voucher

{
	"barcode": "DV0010000001",
	"dealDefinitionId": "0000000032"
}

To determine what deals are available for a voucher, call the GetVoucherDetails endpoint with the barcode of the voucher.

GET: /vouchers/

Response:

{
    "id": "DV0010000001",
    "code": "DV001",
    "typeName": "Deal voucher",
    "miscellaneousRedemptions": {
        "available": 1,
        "deals": [
			{
				"id": "0000000032",
				"cinemaIds": ["0001", "0002", "0003"],
				"description": "Deal exclusive to voucher"
			}
		]
    },
    "status": "Issued",
}