Express Pickup Concessions
Find concessions, build an order, and purchase for express pickup.
In this guide we will run through a basic process for finding concessions available at a theatre, and purchasing them with a credit card for express pickup (for delivery to seat refer to Purchasing Concessions for Delivery to Seat).
- Finding concessions at a theatre
- Finding a pickup time
- Creating an empty order
- Adding concessions items to the order
Finding concessions at a theatre
To get started with purchasing concessions we will begin by selecting the theatre from which we want to order concessions. In this tutorial we will be using AMC DINE-IN Studio 28. We'll construct the url using Studio 28's theatre number of 610 and to keep things simple we will look at a shortened response which only displays the items we intend to purchase.
Please note that if you do not specify a page-size in the query string, the endpoint will default to a page-size of 10 and if all the items are not returned you will need to page through the results by specifying a page-number in the query string.
Also important to note, each SKU is theatre specific, meaning the SKU for Chicken Nachos at AMC DINE-IN Studio 28 is different from the SKU for the same product at AMC Town Center 20.
Response
{
"pageSize": 2,
"pageNumber": 1,
"count": 85,
"_embedded": {
"concessions": [
{
"name": "Chicken Nachos",
"displayName": "Chicken Nachos",
"nutritionalInfo": "610-1000",
"price": 8.48,
"tax": 0.69,
"taxGroupId": 11,
"taxAtComboItemLevel": false,
"SKU": "CONCESSIONS-12632",
"prepTime": 37,
"theatreId": 610,
"concessionId": 8081287,
"media": {
"imageSmall": "http://cdn.amctheatres.com/concessions/8081287-small.png",
"imageLarge": "http://cdn.amctheatres.com/concessions/8081287-large.png"
},
"_embedded": {
"categories": [
{
"name": "Nachos",
"level": 2,
"sortOrder": 1,
"productSortOrder": 1,
"media": {
"imageSmall": "http://cdn.amctheatres.com/concessions/categories/25-small.png",
"imageLarge": "http://cdn.amctheatres.com/concessions/categories/25-large.png"
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions/categories/nachos",
"templated": false
},
"https://api.amctheatres.com/rels/v1/concessions": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions?category=nachos",
"templated": false
}
}
},
{
"name": "Entrees",
"level": 1,
"sortOrder": 4,
"media": {
"imageSmall": "http://cdn.amctheatres.com/concessions/categories/5-small.png",
"imageLarge": "http://cdn.amctheatres.com/concessions/categories/5-large.png"
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions/categories/entrees",
"templated": false
},
"https://api.amctheatres.com/rels/v1/concessions": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions?category=entrees",
"templated": false
}
}
}
],
"modifierGroups": [
{
"groupName": "Nacho Toppings",
"required": false,
"_embedded": {
"modifiers": [
{
"name": "No Guacamole ",
"displayName": "No Guacamole (***Nacho only)",
"SKU": "CONCESSIONS-42913",
"price": 0,
"tax": 0,
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/concessions/42913",
"templated": false
}
}
},
{
"name": "No Sour Cream ",
"displayName": "No Sour Cream (***Nacho only)",
"SKU": "CONCESSIONS-42914",
"price": 0,
"tax": 0,
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/concessions/42914",
"templated": false
}
}
}
]
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions/groups/170",
"templated": false
},
"https://api.amctheatres.com/rels/v1/concessions": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions?group=nacho+toppings",
"templated": false
}
}
}
]
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/concessions/12632",
"templated": false
},
"https://api.amctheatres.com/rels/v2/media": {
"href": "https://api.amctheatres.com/v1/media/concessions/8081287/{media-type}",
"templated": true
},
"https://api.amctheatres.com/rels/v2/theatre": {
"href": "https://api.amctheatres.com/v1/theatres/610",
"templated": false
}
}
},
{
"name": "Large Popcorn + 2 Large Drinks",
"displayName": "Large Popcorn + 2 Large Drinks",
"description": "",
"nutritionalInfo": "970-3010",
"size": "",
"price": 23.2,
"tax": 2.01,
"taxGroupId": 7,
"sku": "CONCESSIONS-1781559",
"prepTime": 0,
"theatreId": 610,
"concessionId": 8080778,
"media": {
"imageSmall": "https://cdn.amctheatres.com/production/2/concessions/8080778-small.jpg",
"imageLarge": "https://cdn.amctheatres.com/production/2/concessions/8080778-large.jpg"
},
"discounts": [],
"_embedded": {
"categories": [
{
"name": "1 Large Popcorn + 2 Large Drinks",
"level": 2,
"sortOrder": 1,
"productSortOrder": 0,
"categoryId": 9,
"media": {
"imageSmall": "https://cdn.amctheatres.com/production/2/concessions/categories/9-small.jpg",
"imageLarge": "https://cdn.amctheatres.com/production/2/concessions/categories/9-large.jpg"
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions/categories/1+large+popcorn+%2b+2+large+drinks",
"templated": false
},
"https://api.amctheatres.com/rels/v1/concessions": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions?category=1+large+popcorn+%2b+2+large+drinks",
"templated": false
},
"https://api.amctheatres.com/rels/v2/media": {
"href": "https://api.amctheatres.com/v2/media/product-categories/9/{media-type}",
"templated": true
}
}
},
{
"name": "Combos",
"level": 1,
"sortOrder": 1,
"categoryId": 2,
"media": {
"imageSmall": "https://cdn.amctheatres.com/production/2/concessions/categories/2-small.jpg",
"imageLarge": "https://cdn.amctheatres.com/production/2/concessions/categories/2-large.jpg"
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions/categories/combos",
"templated": false
},
"https://api.amctheatres.com/rels/v1/concessions": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions?category=combos",
"templated": false
},
"https://api.amctheatres.com/rels/v2/media": {
"href": "https://api.amctheatres.com/v2/media/product-categories/2/{media-type}",
"templated": true
}
}
}
],
"comboComponents": [
{
"name": "Large Popcorn Tub",
"sku": "CONCESSIONS-2267122",
"type": "Concession",
"quantity": 1,
"sortOrder": 1,
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/concessions/2267122",
"templated": false
}
}
},
{
"name": "Large Drink",
"sku": "CONCESSIONS-2270585",
"type": "Concession",
"quantity": 2,
"sortOrder": 2,
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/concessions/2270585",
"templated": false
}
}
}
]
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/concessions/1781559",
"templated": false
},
"https://api.amctheatres.com/rels/v2/media": {
"href": "https://api.amctheatres.com/v2/media/products/8080778/{media-type}",
"templated": true
},
"https://api.amctheatres.com/rels/v2/theatre": {
"href": "https://api.amctheatres.com/v1/theatres/610",
"templated": false
}
}
}
]
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions?page-number=1&page-size=167",
"templated": false
},
"upSellProduct": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions/up-sell",
"templated": false
}
}
}
The response above provides us with the blueprint for ordering the desired concessions items just the way we want. If we want to add Chicken Nachos to the order we will need to make note of it's SKU:
"SKU": "CONCESSIONS-12632"
Some items, such as Chicken Nachos can be modified. How an item can be modified is described within the "modifierGroups" section, certain items will require one or more modifier selections. In this example, you can modify the Chicken Nachos by specifying "No Gaucomole" or "No Sour Cream", neither of which are required. If we want "No Sour Cream" we will need to note the SKU:
"SKU": "CONCESSIONS-42914"
Please note: The prices on concessions are not final and are for display only.
Finding a pickup time
Now we need to find an acceptable pickup time for specifying when we want to pickup our concessions items. The pickup time tells the kitchen when to have your concessions prepared for pickup. If you are placing an order with no associated showtime (such as one with no tickets) you must first check that the theatre does not require a showtime to be associated with the concessions. To do this, query the theatre and check the value of the hasMultipleKitchens field. If hasMultipleKitchens is true, the theatre will require that a showtime is provided with all concession orders.
Response
{
"deliveryToSeat": false,
"id": 610,
"longName": "AMC DINE-IN Studio 28",
"name": "AMC DINE-IN Studio 28",
"guestServicesPhoneNumber": "9133933030",
"utcOffset": "-05:00",
"timezone": "CENTRAL TIME",
"slug": "amc-dine-in-studio-28",
"onlineConcessions": true,
"hasMultipleKitchens": false,
"concessionsDeliveryOptions": [
"EXPRESSPICKUP"
],
"convenienceFeeTaxPercent": 9.475,
"convenienceFeeTaxFlatAmount": 0,
"brand": "DIT",
"subscriptionUsageLevel": 1
}
If hasMultipleKitchens is false then concessions orders may be placed without providing a showtime id. In this scenario, you can obtain a list of pickup times by issuing the following request which specifies the theatre, year, month and day.
Response
{
"theatreId": 610,
"showtimeId": 0,
"pickupTimes": [
{
"pickupDateTimeUtc": "2019-01-27T15:30:00Z",
"pickupDateTimeLocal": "2019-01-27T09:30:00",
"available": 10,
"isDefault": false
},
{
"pickupDateTimeUtc": "2019-01-27T20:10:00Z",
"pickupDateTimeLocal": "2019-01-27T14:10:00",
"available": 5,
"isDefault": false
},
{
"pickupDateTimeUtc": "2019-01-28T05:00:00Z",
"pickupDateTimeLocal": "2019-01-27T23:00:00",
"available": 10,
"isDefault": false
}
],
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/theatres/610/concessions/pickup-times/2019/1/27",
"templated": false
}
}
}
Make note of the desired pickup time and make sure that there are spots available. The following time has 5 available spots so we know the theatre's kitchen will have staff available to prepare the order.
"pickupDateTimeLocal": "2019-01-27T14:10:00"
Alternatively, if your order contains tickets or if you have associated your concessions products with a showtime using the DeliveryShowtimeId value as demonstrated in step 4 you should obtain pickup times using the following request which uses the showtime id.
Response
{
"theatreId": 610,
"showtimeId": 76386058,
"pickupTimes": [
{
"pickupDateTimeUtc": "2019-01-27T22:25:00Z",
"pickupDateTimeLocal": "2019-01-27T16:25:00",
"available": 10,
"isDefault": false
},
{
"pickupDateTimeUtc": "2019-01-27T22:35:00Z",
"pickupDateTimeLocal": "2019-01-27T16:35:00",
"available": 5,
"isDefault": false
},
{
"pickupDateTimeUtc": "2019-01-27T22:45:00Z",
"pickupDateTimeLocal": "2019-01-27T16:45:00",
"available": 10,
"isDefault": true
},
{
"pickupDateTimeUtc": "2019-01-27T22:55:00Z",
"pickupDateTimeLocal": "2019-01-27T16:55:00",
"available": 10,
"isDefault": false
}
],
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/showtimes/76386058/concession-pickup-times",
"templated": false
}
}
}
Again, take note of the desired pickup time and make sure that there are spots available. The following time has 5 available spots so we know the theatre's kitchen will have staff available to prepare the order.
"pickupDateTimeLocal": "2019-01-27T16:35:00"
Creating an empty order
To create a basic guest order we just need to send a quick post to the order service with an email address:
Request
{
"email": "[email protected]"
}
Response
HTTP/1.1 201 Created
Location: https://api.amctheatres.com/v3/orders/98096
Assuming our email address is valid we should get back a 201 (created) response, and a Location header value which is the base URI for all operations we can perform on the order.
Location: https://api.amctheatres.com/v3/orders/98096
Following the new Location Url found in the Location Header we get our empty order and can use the hypermedia links to complete the order.
Response
{
"email": "[email protected]",
"status": "Pending",
"createdDateUtc": "2019-01-27T08:33:14.513Z",
"total": 0.00,
"subtotal": 0.0,
"paid": 0.0,
"token": "92e325ab-2b96-429f-ae67-3815a1b3449b",
"paymentOptions": [
"creditCard",
"giftCard"
],
"_embedded": {
"products": [],
"payments": []
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v3/orders/98096",
"templated": false
},
"https://api.amctheatres.com/rels/v3/order-payments": {
"href": "https://api.amctheatres.com/v3/orders/98096/payments",
"templated": false
},
"https://api.amctheatres.com/rels/v3/order-products": {
"href": "https://api.amctheatres.com/v3/orders/98096/products",
"templated": false
},
"https://api.amctheatres.com/rels/v3/order-fulfillment": {
"href": "https://api.amctheatres.com/v3/orders/98096/fulfill",
"templated": false
}
}
}
As you can see in the above example, we provide a list of links to endpoints (payments, products, and fulfill) which allow you to perform order actions or review the order (self).
Adding Chicken Nachos with No Sour Cream
Now that we have our base order in addition to the SKU for the Chicken Nachos (the top-level product), and the SKU for the No Sour Cream modifier, we're ready to add them to our order with some additional information about how we would like to receive the order after fulfillment.
We require you to include the next 3 fields for each top-level/parent express pickup concessions item. First, the ConcessionOrderName value which specifies who the order is for (and who will be picking it up, i.e. the customer's firstname):
"ConcessionOrderName": "Stephen"
Secondly the DeliveryType. There are two methods of delivery: ExpressPickup and DeliveryToSeat, you must choose one and specify it by passing the value in DeliveryType field. DeliveryToSeat orders require other field values to be specified which are covered in the guide to Purchasing Concessions for Delivery to Seat.
"DeliveryType": "ExpressPickup"
And lastly you must set a DeliveryDateTimeLocal value which we obtained in the previous step.
"DeliveryDateTimeLocal": "2019-01-27T16:35:00"
Optionally, to associate these concessions with a particular showtime, you may set the DeliveryShowtimeId value which will allow you to get pickup times specific to the provided showtime. Remember that if the hasMultipleKitchens field on the theatre is true as described in step 2, then DeliveryShowtimeId is a required field.
"DeliveryShowtimeId": 76438629
Now we're ready to add the Chicken Nachos and No Sour Cream modifier to the order:
Request
{
"SKU": "CONCESSIONS-12632",
"Quantity": 1,
"ConcessionOrderName": "Stephen",
"DeliveryType": "ExpressPickup",
"DeliveryDateTimeLocal": "2019-01-27T16:35:00",
"DeliveryShowtimeId": 76438629,
"Modifiers": [
{
"SKU": "CONCESSIONS-42914",
"Quantity": 1
}
]
}
Response
HTTP/1.1 201 Created
Location: https://api.amctheatres.com/v3/orders/98096/products/1
Next we pull down the updated order and find our new product is added inside the embedded products list with a status of "Held" and our subtotal has increased to 8.48 and the total to 9.17.
Response
{
"email": "[email protected]",
"status": "Pending",
"createdDateUtc": "2019-01-27T08:33:14.513Z",
"total": 9.17,
"subtotal": 8.48,
"paid": 0,
"token": "92e325ab-2b96-429f-ae67-3815a1b3449b",
"paymentOptions": [
"creditCard",
"giftCard"
],
"expirationDateUtc": "2019-01-2708:40:14.513Z",
"_embedded": {
"products": [
{
"sku": "CONCESSIONS-12632",
"quantity": 1,
"status": "Held",
"cost": 8.48,
"tax": 0.69,
"name": "Chicken Nachos",
"theatre": "AMC DINE-IN Studio 28",
"theatreId": 610,
"deliveryDateTimeLocal": "2019-01-27T14:10:00",
"concessionOrderName": "Stephen",
"deliveryType": "ExpressPickup",
"components": [],
"modifiers": [
{
"name": "No Sour Cream",
"sku": "CONCESSIONS-42914",
"status": "Held",
"cost": 0,
"tax": 0,
"token": "628b8e0d-6b1e-4631-9035-139e90dd24f4"
}
],
"token": "628b8e0d-6b1e-4631-9035-139e90dd24f4",
"fees": [],
"_links": {
"self": {
"href": "https://api.amctheatres.com/v3/orders/98096/products/1",
"templated": false
}
},
"lineItemNumber": 1
}
],
"payments": []
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v3/orders/98096",
"templated": false
},
"https://api.amctheatres.com/rels/v3/order-payments": {
"href": "https://api.amctheatres.com/v3/orders/98096/payments",
"templated": false
},
"https://api.amctheatres.com/rels/v3/order-products": {
"href": "https://api.amctheatres.com/v3/orders/98096/products",
"templated": false
}
}
}
Adding a Combo with 2 Fountain Drinks (with flavor modifiers) and a Popcorn
Now that we've seen an example of how to add a standard product with modifier to our order, let's have a look at how one adds a combo with its components which also have modifiers.
We will refer back to the Step #1 where we retrieved the list of concessions for AMC DINE-IN Studio 28. The SKU for the combo we wish to order is:
CONCESSIONS-1781559
Next we need to identify the quanties of the component SKUs which are listed in the "comboComponents" section. We can see that there are 2 Large Drink components which have the SKU:
CONCESSIONS-2270585
And lastly there is a single Large Popcorn Tub component with the SKU:
CONCESSIONS-2267122
Now we need to check if these components have any required modifiers by issuing a GET request against the URL provided in their self links, so for the 2x Large Drinks we can see that there is a required "Freestyle Flavors" modifier group within the "modifierGroups" list:
Response
{
"name": "Large Drink",
"displayName": "Large",
"description": "",
"nutritionalInfo": "0-880",
"size": "Large",
"price": 6.52,
"tax": 0.53,
"taxGroupId": 11,
"taxAtComboItemLevel": false,
"sku": "CONCESSIONS-19816",
"prepTime": 37,
"theatreId": 38,
"concessionId": 19816,
"_embedded": {
"categories": [
{
"name": "Coca-Cola Freestyle",
"level": 2,
"sortOrder": 0,
"productSortOrder": 1,
"categoryId": 17
},
{
"name": "Drinks",
"level": 1,
"sortOrder": 3,
"categoryId": 4
}
]
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v1/concessions/2270585",
"templated": false
}
}
}
Unlike delivery to seat, express pickup theatres do not provide drink modifiers as the guest is responsible for filling their own drink. All that's left to do now is to submit the request to add our new product which specifies the combo, it's components, and it's component's modifiers.
Request
{
"SKU": "CONCESSIONS-1781559",
"Quantity": 1,
"ConcessionOrderName": "Stephen",
"DeliveryType": "ExpressPickup",
"DeliveryDateTimeLocal": "2019-01-27T16:35:00",
"DeliveryShowtimeId": 76438629,
"Components": [
{
"SKU": "CONCESSIONS-2270585",
"Quantity": 1
},
{
"SKU": "CONCESSIONS-2270585",
"Quantity": 1
},
{
"SKU": "CONCESSIONS-2267122",
"Quantity": 1
}
]
}
Response
HTTP/1.1 201 Created
Location: https://api.amctheatres.com/v3/orders/98096/products/1
Next we pull down the updated order and find our new product is now represented within the embedded products list with a status of "Held" and our subtotal has increased to 27.95 and the total to 30.36.
Response
{
"email": "[email protected]",
"status": "Pending",
"createdDateUtc": "2019-01-27T08:33:14.513Z",
"total": 30.36,
"subtotal": 27.95,
"paid": 0,
"token": "92e325ab-2b96-429f-ae67-3815a1b3449b",
"paymentOptions": [
"creditCard",
"giftCard"
],
"expirationDateUtc": "2019-01-27T08:40:14.513Z",
"_embedded": {
"products": [
{
"sku": "CONCESSIONS-12632",
"quantity": 1,
"status": "Held",
"cost": 8.48,
"tax": 0.69,
"name": "Chicken Nachos",
"theatre": "AMC DINE-IN Studio 28",
"theatreId": 610,
"deliveryDateTimeLocal": "2019-01-27T16:35:00",
"concessionOrderName": "Stephen",
"deliveryType": "ExpressPickup",
"components": [],
"modifiers": [],
"token": "628b8e0d-6b1e-4631-9035-139e90dd24f4",
"fees": [],
"_links": {
"self": {
"href": "https://api.amctheatres.com/v3/orders/98096/products/1",
"templated": false
}
},
"lineItemNumber": 1
},
{
"sku": "CONCESSIONS-1781559",
"status": "Held",
"cost": 21.19,
"tax": 1.72,
"name": "Large Popcorn + 2 Large Drinks",
"theatre": "AMC DINE-IN Studio 28",
"theatreId": 610,
"deliveryDateTimeLocal": "2019-01-27T16:35:00",
"concessionOrderName": "Stephen",
"deliveryType": "ExpressPickup",
"components": [
{
"name": "Large Drink",
"token": "37bfc6b8-c077-46a9-99a6-5ddddbbded77",
"sku": "CONCESSIONS-2270585",
"modifiers": []
},
{
"name": "Large Drink",
"token": "60f39073-0a40-4a02-a40a-13336eb70768",
"sku": "CONCESSIONS-2270585",
"modifiers": []
},
{
"name": "Large Popcorn Tub",
"token": "cfab6a4a-8a3b-44ac-9949-cc7d169a3cae",
"sku": "CONCESSIONS-2267122",
"modifiers": []
}
],
"modifiers": [],
"token": "5d3c2b28-9b79-47c6-9ef0-7f72fffca185",
"fees": [],
"_links": {
"self": {
"href": "https://api.amctheatres.com/v3/orders/98096/products/2",
"templated": false
}
},
"lineItemNumber": 2
}
],
"payments": []
},
"_links": {
"self": {
"href": "https://api.amctheatres.com/v3/orders/98096",
"templated": false
},
"https://api.amctheatres.com/rels/v3/order-payments": {
"href": "https://api.amctheatres.com/v3/orders/98096/payments",
"templated": false
},
"https://api.amctheatres.com/rels/v3/order-products": {
"href": "https://api.amctheatres.com/v3/orders/98096/products",
"templated": false
}
}
}