Ticket discounts

Ticket discount promotions allow clients to apply a discount code to receive a special price or percentage discount on a ticket.

Discounts may be available to all purchasers or limited to loyalty members only, member discounts may also incur a loyalty points cost to use.

Discounts may optionally be made on already-discounted prices calculated as part of deal. Whether this behaviour is allowed or not is a property of the deal itself.

Retrieving available ticket discounts

Ticket discount codes can be made available to customers externally via marketing promotions etc. or can be returned from the API. Specifying the returnDiscountInfo parameter to the GetTicketsForSession endpoint will return discounts available for each ticket type.

GET: /RESTData.svc/cinemas//sessions//tickets?returnDiscountInfo=true

[{
    "CinemaId": "004",
    "TicketTypeCode": "0191",
    "AreaCategoryCode": "0000000001",
    "Description": "Adult",
    "PriceInCents": 1000,
    "DiscountsAvailable": [
        {
            "Description": "September Blitz Discount",
            "Code": "BLITZO",
            "PriceToUseInCents": 750,
            "LoyaltyPointsCost": 0,
            "IsLoyaltyOnly": false
        },
        {
            "Description": "Movie Club Member Discount",
            "Code": "MEMBERCLUB",
            "PriceToUseInCents": 500,
            "LoyaltyPointsCost": 10,
            "IsLoyaltyOnly": true
        }
    ]
}]

Applying ticket discounts

The tickets must be added to the order before any ticket discounting can be applied.

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

Request:

{
    "Tickets": [
        {
            "TicketDetails": {
            	"ticketTypeCode": "0191"
            }
        }
	]
}

Response:

{
    "order": {
        "cinemaId": "0001",
        "userSessionId": "b47e5287860b9c906125343c8dab09c2",
        "orderTotalValueInCents": 1000,
        "sessions": [
            {
                
                "filmTitle": "Airplane!",
                "filmClassification": "R",
                "tickets": [
                    {
                        "ticketDetails": {
                            "ticketId": 1,
                            "ticketTypeCode": "0191",
                            "description": "Adult",
                            "finalPriceInCents": 1000,
                            "originalPriceInCents": 1000
                        },
                        "seats": [
                            {
                                "rowDisplay": "J",
                                "columnDisplay": "5"
                            }
                        ]
                    }
                ]
            }
        ],
        "expiryDateUtc": "2017-11-23T01:26:50.1543587Z"
    }
}

After the ticket is added the discount can be applied via the ApplyDiscount endpoint. The ItemId in this requests represents the ID of the ticket in the order.

GET: /RESTTicketing.svc/order/discount

{
    "UserSessionId": "b47e5287860b9c906125343c8dab09c2",
    "TicketDiscounts": [
    {
        "ItemId": 1,
        "DiscountCode": "BLITZO"
    }],
    "ReturnOrder": true
}

In the response the FinalPriceCents value of the ticket should be reduced by the applied discount.

{
    "ExtendedResultCode": 0,
    "Order": {
        "UserSessionId": "b47e5287860b9c906125343c8dab09c2",
        "TotalValueCents": 750,
        "TotalOrderCount": 1,
        "Sessions": [
            {
                "Tickets": [
                    {
                        "Id": "1",
                        "PriceCents": 1000,
                        "SeatData": "J5",
                        "Description": "Adult",
                        "FinalPriceCents": 750,
                    }
                ],
                "FilmTitle": "The Jerk",
            }
        ]
    },
    "Result": 0
}

Changing/removing ticket discounts

  • Once a ticket has a discount applied another discount cannot be applied to that ticket
  • Once a ticket has a discount applied the discount cannot be removed
  • To alter/remove a discount the ticket must be removed and re-added to the order