Introduction
Welcome to the Coras API documentation, where you can learn how to access information on available theater shows and tours.
You can view code examples for each API endpoint in the pane to the right.
Example code will appear here.
Version
All api endpoint URLs include version number. This document describes Coras API version: v2
.
Other versions
Changes in V2
- Categories:
- Endpoint is no longer available
- Attractions
category_id
query parameter is no longer supported and has been replaced bygroup_id
. Also, attractions don’t havecategory_id
attribute anymore but instead they havegroup_id
attribute.- Each attraction can be associated with category and subcategory
- New query parameter
categories
is available that can be used to filter out attractions by subcategory
- Common:
- Returns groups (previously
categories
) and categories
- Returns groups (previously
- Theater Attractions:
attraction
no longer hascategory_id
attribute. Instead usegroup_id
which is an ID of a group
- Tour Attractions:
attraction
no longer hascategory_id
attribute. Instead usegroup_id
which is an ID of a group
Authentication
Most API requests require one or more of these headers:
- Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc
- Content-Type: application/json
- Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223
Coras-Distributor
must be your Distributor ID, provided to you offline by a Coras account manager.
Booking-Session
will be your booking session token received from Booking Session and must be included in all transactional API methods.
Quickstart Guide
Use the Coras API to supplement your own checkout process by offering tickets to a variety of attractions.
A typical use case might consist of the following steps:
- Create a booking session.
- Get a list of attractions for a given location and date.
- Once an attraction is selected, display a list of instances for that attraction.
- Reserve tickets.
- Optionally, get a summary of the booking.
- Confirm your booking, OR:
- Cancel your booking
Now let’s look at each of the endpoints that facilitate the above use case.
Create a Booking Session
$ curl -X POST https://sandbox.coras.io/v2/booking-session \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223" \
-d '{"distributor_session_id": "21db05c675d678b1b43c81dd8ea6def1",
"user_id": "08387ee961ebf5e96ccf5ba9e5a0c1a8",
"language": "en"}'
{
"booking-session": "6f299e0ce1ef66e612ac45552cf9fabc"
}
To get a list of attractions a booking session ID is required. This guarantees prices for the duration of the session. Obtain a valid booking session token using the Booking Session endpoint, and setting the Booking-Session
header in all subsequent ticket reservation requests. A booking session token will expire after 20 minutes of inactivity or a successful transaction confirmation. In the case of expiration, all tickets reserved during that session will automatically be released for other bookings.
Get Attractions List
$ curl -X GET "https://sandbox.coras.io/v2/attractions/?city=London&date_start=2018-07-24&date_end=2018-07-30&size=1" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fa" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"alternative_results": false,
"results": [
{
"address": "Shaftesbury Avenue, London, W1D 7ES",
"attraction_details_url": "/theater-events/54d07c194cc410e6325d9535d86c036d",
"attraction_id": "54d07c194cc410e6325d9535d86c036d",
"attraction_name": "THRILLER LIVE",
"attraction_type_id": 1,
"group_id": 4,
"city": "London",
"description": "Now in its record breaking 9th sensational year, THRILLER LIVE is a spectacular concert created to celebrate the career of the world’s greatest entertainer. Already seen by over three million people in over 30 countries, THRILLER LIVE continues to moonwalk around the world, taking you on a visual, audio and electrifying journey through the magic of Michael’s 40 year musical history. Experience over two hours of non-stop hits from pop to rock, soul to disco in a show that pays homage to Jackson’s legendary live performances and innovative dance moves executed with flair, precision and passion in a show that you will never forget.",
"duration": 140,
"geolocation_points": [],
"images": {
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress"
},
"label_blue": "Selling fast!",
"label_red": "Most popular!",
"location_name": "Lyric Theatre",
"min_price": {
"AUD": 6616,
"CHF": 4337,
"DKK": 20280,
"EUR": 3775,
"GBP": 2365,
"HRK": 30403,
"MAD": 43045,
"NOK": 25849,
"PLN": 16285,
"SEK": 28429,
"USD": 4421
},
"max_price": {
"AUD": 6616,
"CHF": 4337,
"DKK": 20280,
"EUR": 3775,
"GBP": 2365,
"HRK": 30403,
"MAD": 43045,
"NOK": 25849,
"PLN": 16285,
"SEK": 28429,
"USD": 4421
},
"priority": 2,
"timezone": "Europe/London",
"upcoming_instances": [
"2018-07-24T18:30:00+00:00",
"2018-07-25T18:30:00+00:00",
"2018-07-26T18:30:00+00:00",
"2018-07-27T18:30:00+00:00",
"2018-07-28T15:00:00+00:00",
"2018-07-28T19:00:00+00:00",
"2018-07-29T14:30:00+00:00",
"2018-07-29T18:30:00+00:00"
],
"tags": []
},
{
"address": "",
"attraction_details_url": "/tours/08e36beb3acadc1e69823b4d67aea83d",
"attraction_id": "08e36beb3acadc1e69823b4d67aea83d",
"attraction_name": "The Total London Experience with Free Lunch Pack",
"attraction_type_id": 2,
"group_id": 3,
"city": "London",
"description": "Panoramic tour of London - Entry to St. Paul’s Cathedral - See the Changing of the Guard at Buckingham Palace - Entry to Tower of London - Free Thames River boat ride - Spectacular experience on the London Eye - Complimentary Lunch Pack",
"duration": 240,
"geolocation_points": [],
"images": {
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress"
},
"label_blue": "",
"label_red": "",
"location_name": "",
"max_price": {
"AUD": 8828,
"CHF": 5780,
"DKK": 30580,
"EUR": 5033,
"GBP": 4400,
"HRK": 40520,
"MAD": 57397,
"NOK": 38970,
"PLN": 21713,
"SEK": 42182,
"USD": 5895
},
"min_price": {
"AUD": 8828,
"CHF": 5780,
"DKK": 30580,
"EUR": 5033,
"GBP": 4400,
"HRK": 40520,
"MAD": 57397,
"NOK": 38970,
"PLN": 21713,
"SEK": 42182,
"USD": 5895
},
"priority": 77,
"tags": [
{
"name": "best deal",
"tag_id": 1
},
{
"name": "music",
"tag_id": 2
}
],
"timezone": "Europe/London",
"upcoming_instances": [
"2018-07-24T06:30:00+00:00",
"2018-07-25T06:30:00+00:00",
"2018-07-26T06:30:00+00:00",
"2018-07-27T06:30:00+00:00",
"2018-07-30T06:30:00+00:00",
"2018-07-30T06:30:00+00:00"
]
}
],
"total": 2
}
Get a list of Attractions using the Attractions endpoint.
Currently, two types of attractions are available: Theater tickets and Tours.
Example request values
Argument | Value |
---|---|
city | London |
date_end | 2018-07-30 |
date_start | 2018-07-24 |
size | 1 |
See Attractions for an example response.
Get Attraction Details
$ curl -X GET "https://sandbox.coras.io/v2/theater-events/54d07c194cc410e6325d9535d86c036d?date_start=2018-07-24&date_end=2018-07-30" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"attraction": {
"address": "Shaftesbury Avenue, London, W1D 7ES",
"attraction_name": "THRILLER LIVE",
"group_id": 4,
"city": "London",
"description": "Panoramic tour of London - Entry to St. Paul’s Cathedral - See the Changing of the Guard at Buckingham Palace - Entry to Tower of London - Free Thames River boat ride - Spectacular experience on the London Eye - Complimentary Lunch Pack",
"duration": 140,
"images": {
"image_w96_h96": "",
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w279_h213": "",
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w304_h81": "",
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress",
},
"latitude": null,
"location_name": "Lyric Theatre",
"longitude": null,
"mandatory_attendee": false,
"multiple_purchases": false,
"seat_map": null,
"seats_sales_enabled": false,
"tags": [{
"name": "music",
"tag_id": 2
}],
"max_tickets_per_order": 8,
"categories": [1, 2],
"timezone": "Europe/London"
},
"instances": [
{
"instance_id": "a7c9798a0fb33d5a5883a3dca5682741",
"price_bands": [
{
"id": "E29",
"category_id": 22829224,
"section_name": "Balcony",
"section_id": null,
"spaces_remaining": 18,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"AUD": 601,
"CHF": 394,
"DKK": 1844,
"EUR": 343,
"GBP": 300,
"HRK": 2762,
"MAD": 3914,
"NOK": 2350,
"PLN": 1583,
"SEK": 2584,
"USD": 402
},
"max_booking_fee": {
"AUD": 601,
"CHF": 394,
"DKK": 1844,
"EUR": 343,
"GBP": 300,
"HRK": 2762,
"MAD": 3914,
"NOK": 2350,
"PLN": 1583,
"SEK": 2584,
"USD": 402
},
"min_full_price": {
"AUD": 6616,
"CHF": 4337,
"DKK": 20280,
"EUR": 3775,
"GBP": 2365,
"HRK": 30403,
"MAD": 43045,
"NOK": 25849,
"PLN": 16285,
"SEK": 28429,
"USD": 4421
},
"max_full_price": {
"AUD": 6616,
"CHF": 4337,
"DKK": 20280,
"EUR": 3775,
"GBP": 2365,
"HRK": 30403,
"MAD": 43045,
"NOK": 25849,
"PLN": 16285,
"SEK": 28429,
"USD": 4421
},
"price": {
"AUD": 6014,
"CHF": 3941,
"DKK": 18436,
"EUR": 3431,
"GBP": 2065,
"HRK": 27628,
"MAD": 39131,
"NOK": 23499,
"PLN": 14805,
"SEK": 25845,
"USD": 4019
}
}]
},
{
"id": "D39",
"category_id": 43913235,
"section_name": "Upper Circle",
"section_id": null,
"spaces_remaining": 8,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"AUD": 803,
"CHF": 525,
"DKK": 2459,
"EUR": 458,
"GBP": 400,
"HRK": 3684,
"MAD": 5219,
"NOK": 3133,
"PLN": 1974,
"SEK": 3446,
"USD": 536
},
"max_booking_fee": {
"AUD": 803,
"CHF": 525,
"DKK": 2459,
"EUR": 458,
"GBP": 400,
"HRK": 3684,
"MAD": 5219,
"NOK": 3133,
"PLN": 1974,
"SEK": 3446,
"USD": 536
},
"min_full_price": {
"AUD": 8828,
"CHF": 5780,
"DKK": 30580,
"EUR": 5033,
"GBP": 4400,
"HRK": 40520,
"MAD": 57397,
"NOK": 38970,
"PLN": 21713,
"SEK": 42182,
"USD": 5895
},
"max_full_price": {
"AUD": 8828,
"CHF": 5780,
"DKK": 30580,
"EUR": 5033,
"GBP": 4400,
"HRK": 40520,
"MAD": 57397,
"NOK": 38970,
"PLN": 21713,
"SEK": 42182,
"USD": 5895
},
"price": {
"NOK": 35837,
"EUR": 4575,
"SEK": 308736,
"PLN": 19739,
"GBP": 4000,
"DKK": 28121,
"USD": 5359
},
}]
},
{
"id": "E29",
"price_band_name": "Price Band E",
"category_id": 22829224,
"section_name": "Upper Circle",
"section_id": null,
"spaces_remaining": 33,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 2687,
"EUR": 343,
"SEK": 2955,
"PLN": 1480,
"GBP": 300,
"DKK": 2108,
"USD": 402
},
"max_booking_fee": {
"NOK": 2687,
"EUR": 343,
"SEK": 2955,
"PLN": 1480,
"GBP": 300,
"DKK": 2108,
"USD": 402
},
"min_full_price": {
"NOK": 29571,
"EUR": 3775,
"SEK": 23204,
"PLN": 16285,
"GBP": 3300,
"DKK": 32522,
"USD": 4421
},
"max_full_price": {
"NOK": 29571,
"EUR": 3775,
"SEK": 23204,
"PLN": 16285,
"GBP": 3300,
"DKK": 32522,
"USD": 4421
},
"price": {
"NOK": 26876,
"EUR": 3431,
"SEK": 21089,
"PLN": 14805,
"GBP": 3000,
"DKK": 29558,
"USD": 4019
},
}]
}
],
"start_datetime": "2018-07-10T14:00:00+00:00",
"provisional_date": false,
}
],
"total_instances": 1
}
Use an Attraction ID to fetch details for an attraction. This will include a list of attraction instances along with their price bands.
Example
Argument | Value |
---|---|
attraction_id | cbaf5eeef64219eadfa184e564c2af2c |
date_end | 2018-07-30 |
date_start | 2018-07-24 |
For details on Theater tickets, see Theater Attractions.
For details on Tours, see Tour Attractions.
Reserve Tickets
$ curl -X POST https://sandbox.coras.io/v2/theater-events/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-d '{"attraction_id": "54d07c194cc410e6325d9535d86c036d",
"instance_id": 212705,
"language_code": "en",
"tickets": [{
"section_id": null,
"price_type_id": "E29",
"number_of_tickets": 2,
"booking_fee": 300,
"seats": []
}]}'
{
"reservation_id": "7a7216e7509d4f1eba24135ef4757fb1",
"seat_range": "E21 - E22",
"ticket_delivery_method": 0,
"tickets": [
{
"booking_fee": 300,
"coras_seat_id": "5ee5667f409bda4c88fa83fc58f030711eddb793",
"description": "",
"full_price": 3300,
"name": "Full Price",
"price": 3000,
"price_type_id": "E29",
"restricted_view_description": "has a slightly restricted view",
"row_id": 92,
"row_name": "E",
"seat_id": 1,
"seat_name": "E21",
"seat_number": "21",
"seatsio_seat_id": "BALCONY-E-21",
"section": "Balcony",
"section_id": null
}
]
}
To reserve one or more tickets to a particular attraction instance, use the reservations endpoint for theater tickets or the tour reservations endpoint for tours. A reservation is created with the requested number of tickets. Reservations are stored against the booking session.
Example (theater reservation)
Argument | Value |
---|---|
attraction_id | 54d07c194cc410e6325d9535d86c036d |
currency | GBP |
instance_id | 212705 |
language_code | en |
tickets | List of tickets to be reserved |
Get Reservation Summary
$ curl -X GET https://sandbox.coras.io/v2/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"reservations": [
{
"attraction_id": "54d07c194cc410e6325d9535d86c036d",
"attraction_name": "THRILLER LIVE",
"attraction_type_id": 1,
"city": "London",
"currency": "GBP",
"end_datetime": "",
"is_seatsio_reservation": false,
"images": {
"image_w96_h96": "",
"image_w200_h200": "",
"image_w279_h213": "",
"image_w288_h125": "",
"image_w304_h81": "",
"image_w345_h237": ""
},
"location_name": "Lyric Theatre",
"number_of_tickets": 2,
"reservation_id": "7a7216e7509d4f1eba24135ef4757fb1",
"start_datetime": "2018-07-24T18:30:00+00:00",
"ticket_delivery_method": 0,
"tickets": [
{
"booking_fee": 300,
"coras_seat_id": "5ee5667f409bda4c88fa83fc58f030711eddb793",
"description": "",
"full_price": 3300,
"name": "Full Price",
"price": 3000,
"price_type_id": "E29",
"restricted_view_description": "has a slightly restricted view",
"row_id": 92,
"row_name": "E",
"seat_id": 1,
"seat_name": "E21",
"seat_number": "21",
"seatsio_seat_id": "BALCONY-E-21",
"section": "Balcony",
"section_id": null
}
],
"timezone": "Europe/London",
"total_price": 3300
}
],
"total_price": 3300
}
Get a summary for a given booking session by using the summary endpoint and providing a valid booking session ID.
Confirm Reservations
$ curl -X PUT https://sandbox.coras.io/v2/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223" \
-d '{"email": "jon.snow@example.com",
"first_name": "Jon",
"phone_number": "111-222-333",
"reservations": [
"7a7216e7509d4f1eba24135ef4757fb1"
],
"second_name": "Snow"'
{
"transaction_id": "123406179e47a6a8f06f6c486abcde",
"user_id": "6123c32027abcd2ac07c4c5a887abcd",
"client_secret": "pi_1FAB04K10yRCtOElcyFjdy6r_secret_0RvQ10CfZC3FnJJo047OJIDMH"
}
You can now confirm the reservations
Payment for the booking is facilitated using Stripe. Use the Confirm Reservation endpoint to start the payment process.
Integrate your frontend application with Stripe.js to provide card details and handle 3D Secure step-ups that might be required as a result of Strong Customer Authentication (a rule in effect as of September 14, 2019).
You can use the Transaction ID provided in the response to check the status of the booking (see Get User Transactions).
Example
Argument | Value |
---|---|
jon.snow@example.com | |
first_name | Jon |
last_name | Snow |
phone_number | 111-222-333 |
products | 123abc-cf3a-490a-9091-e72d2a814379 |
Get User Transactions
$ curl -X GET "https://sandbox.coras.io/v2/users/ba35b0d5e2fc4928b960a1ce18cad23f/transactions" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
[
{
"created_at": "2017-05-12 07:20:49.380048",
"reference_id": "Q0423ABC",
"status": "ADDED",
"transaction_id": "123406179e47a6a8f06f6c486abcde"
}
]
Payment is handled asynchronously, so you may want to periodically check the status of a recent transaction using this API method.
Every new transaction is created with status ADDED
which changes to PENDING
once the payment is handled with Stripe.js. Successfully processed transactions then change to PAID
.
If the transaction could not be completed its status is set to FAILED
.
SUSPENDED
status means there was something wrong with the card and the user
can enter card details once again.
Cancel Reservation
Cancelling can only be done if a booking has not already been confirmed. After confirmation, the booking session is closed and cancelling is no longer possible.
You can cancel either a single reservation or all of the reservations associated with a booking session.
Cancel a single reservation
$ curl -X DELETE https://sandbox.coras.io/v2/reservations/7a7216e7509d4f1eba24135ef4757fb1 \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
Cancel a single reservation by using the Remove Single Reservation endpoint and providing a reservation ID.
Example
Argument | Value |
---|---|
reservation_id | 123abc-cf3a-490a-9091-e72d2a814379 |
Cancel all reservations
$ curl -X DELETE https://sandbox.coras.io/v2/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
Cancel all reservations on a booking session by using the remove all reservations endpoint.
Booking Session
All actions (requesting attractions, attraction instances, confirming and applying tickets) are made in the context of a booking session. A booking session token can be obtained using the Booking Session endpoint.
A booking session token will expire after 20 minutes of inactivity, but will be also revoked when user confirms a transaction (Confirm Reservation).
Calling an endpoint which requires a booking session token will refresh the expiration timeout of the provided token. After a booking session token has expired, any reservation endpoint will return a 401 Unauthorized
response.
Create booking session
Creates a new booking session, and returns a booking session token.
When creating a new booking session, you can assign additional custom information from your own domain into the User ID and Session ID fields to better facilitate reporting use cases at a later date.
$ curl -X POST https://sandbox.coras.io/v2/booking-session \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223" \
-d '{"distributor_session_id": "21db05c675d678b1b43c81dd8ea6def1",
"user_id": "08387ee961ebf5e96ccf5ba9e5a0c1a8",
"language": "en"}'
{
"booking-session": "6f299e0ce1ef66e612ac45552cf9fabc"
}
Request
POST https://sandbox.coras.io/v2/booking-session
Headers
Name | Type | Required | Description |
---|---|---|---|
Coras-Distributor | String | Yes | Distributor ID |
Content-Type | String | Yes | Accepts only application/json |
Arguments
Name | Type | Required | Description |
---|---|---|---|
distributor_session_id | UUID4 | No | Session ID generated by distributor |
language | String | No | Selected language |
user_id | UUID4 | No | User ID |
Response
Name | Type | Description |
---|---|---|
booking-session | String | Booking session token |
HTTP 400
status code when user does not exist
Update booking session data
Update data assigned to an existing booking session.
$ curl -X PUT https://sandbox.coras.io/v2/booking-session \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223" \
-d '{"user_id": "08387ee961ebf5e96ccf5ba9e5a0c1a8",
"language": "en"}'
Request
PUT https://sandbox.coras.io/v2/booking-session
Headers
Name | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | UUID4 | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
language | String | No | Selected language |
user_id | String | No | User ID |
Output
HTTP 204
status code when reservation was removed
HTTP 400
status code when another user is already assigned to a booking session
Attractions
There are two types of attractions.
- Theater events
- Tours
To get detailed information about attractions, use the appropriate endpoint for that attraction type.
- Get Theater attraction
-


Booking various types of attractions requires sending a different set of parameters. For this reason, there are separate endpoints for booking individual types of attractions.
Attractions List
Returns a list of attractions for given location (city) and date range.
$ curl -X GET "https://sandbox.coras.io/v2/attractions?city=London&date_start=2018-07-24&date_end=2018-07-30&size=2" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fa" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"alternative_results": false,
"results": [
{
"address": "Shaftesbury Avenue, London, W1D 7ES",
"attraction_details_url": "/theater-events/54d07c194cc410e6325d9535d86c036d",
"attraction_id": "54d07c194cc410e6325d9535d86c036d",
"attraction_name": "THRILLER LIVE",
"attraction_type_id": 1,
"group_id": 4,
"city": "London",
"description": "Now in its record breaking 9th sensational year, THRILLER LIVE is a spectacular concert created to celebrate the career of the world’s greatest entertainer. Already seen by over three million people in over 30 countries, THRILLER LIVE continues to moonwalk around the world, taking you on a visual, audio and electrifying journey through the magic of Michael’s 40 year musical history. Experience over two hours of non-stop hits from pop to rock, soul to disco in a show that pays homage to Jackson’s legendary live performances and innovative dance moves executed with flair, precision and passion in a show that you will never forget.",
"duration": 140,
"geolocation_points": [],
"images": {
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress"
},
"label_blue": "Selling fast!",
"label_red": "Most popular!",
"location_name": "Lyric Theatre",
"max_price": {
"GBP": 12000,
"EUR": 13829,
"PLN": 60069,
"SEK": 148307,
"NOK": 136319,
"DKK": 103275,
"MAD": 147870,
"HRK": 102351,
"USD": 15291,
"CHF": 15157,
"AUD": 22505
},
"min_price": {
"GBP": 12000,
"EUR": 13829,
"PLN": 60069,
"SEK": 148307,
"NOK": 136319,
"DKK": 103275,
"MAD": 147870,
"HRK": 102351,
"USD": 15291,
"CHF": 15157,
"AUD": 22505
},
"priority": 2,
"timezone": "Europe/London",
"upcoming_instances": [
"2018-07-24T18:30:00+00:00",
"2018-07-25T18:30:00+00:00",
"2018-07-26T18:30:00+00:00",
"2018-07-27T18:30:00+00:00",
"2018-07-28T15:00:00+00:00",
"2018-07-28T19:00:00+00:00",
"2018-07-29T14:30:00+00:00",
"2018-07-29T18:30:00+00:00"
],
"tags": []
},
{
"address": "",
"attraction_details_url": "/tours/08e36beb3acadc1e69823b4d67aea83d",
"attraction_id": "08e36beb3acadc1e69823b4d67aea83d",
"attraction_name": "The Total London Experience with Free Lunch Pack",
"attraction_type_id": 2,
"group_id": 3,
"city": "London",
"description": "Panoramic tour of London - Entry to St. Paul’s Cathedral - See the Changing of the Guard at Buckingham Palace - Entry to Tower of London - Free Thames River boat ride - Spectacular experience on the London Eye - Complimentary Lunch Pack",
"duration": 240,
"geolocation_points": [],
"images": {
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress"
},
"label_blue": "",
"label_red": "",
"location_name": "",
"max_price": {
"GBP": 12000,
"EUR": 13829,
"PLN": 60069,
"SEK": 148307,
"NOK": 136319,
"DKK": 103275,
"MAD": 147870,
"HRK": 102351,
"USD": 15291,
"CHF": 15157,
"AUD": 22505
},
"min_price": {
"GBP": 12000,
"EUR": 13829,
"PLN": 60069,
"SEK": 148307,
"NOK": 136319,
"DKK": 103275,
"MAD": 147870,
"HRK": 102351,
"USD": 15291,
"CHF": 15157,
"AUD": 22505
},
"priority": 77,
"tags": [
{
"name": "best deal",
"tag_id": 1
},
{
"name": "music",
"tag_id": 2
}
],
"timezone": "Europe/London",
"upcoming_instances": [
"2018-07-24T06:30:00+00:00",
"2018-07-25T06:30:00+00:00",
"2018-07-26T06:30:00+00:00",
"2018-07-27T06:30:00+00:00",
"2018-07-30T06:30:00+00:00",
"2018-07-30T06:30:00+00:00"
]
}
],
"total": 2,
"categories_count": {
1: 6,
2: 14,
3: 9
}
}
Request
GET https://sandbox.coras.io/v2/attractions?city={city}&date_start={date_start}&date_end={date_end}&size={size}&page={page}
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Querystring parameters
Name | Type | Required | Description |
---|---|---|---|
alternative_results | Boolean | No | Indicates if alternative results should be returned. See more about alternative results |
attraction_type_id | Integer | No | Type of the attractions to return. See more about attraction types |
group_id | Integer | No | Attraction group ID. Available groups can be obtained from the common endpoint |
city | String | No | Name of city. List of available cities |
date_start | String | Yes | Date range from (YYYY-MM-DD) |
date_end | String | No | Date range to (YYYY-MM-DD) |
language_code | String | No | Selected language (default: en ) |
page | Integer | No | Page number (default: 0) |
size | Integer | No | Number of attractions to return (default: 10, max: 1000) per single page |
search_term | String | No | Query string to be used for search in Attraction’s name and description |
currency | String | No | Supported currency |
latitude | Float | No | A geographic coordinate that specifies search point |
longitude | Float | No | A geographic coordinate that specifies search point |
radius | Float | No | Search radius, i.e. the distance from the given point within which to search for attractions |
radius_unit | String | No | Unit for radius (mm, cm, m and km); (default m) |
tag_ids | Integer | No | Comma separated list of tag IDs used to filter search results (e.g., tag_ids=1,3,2 ) |
categories | Integer | No | Comma separated list of subcategory IDs (e.g., categories=1,2,3 ) |
Response
Name | Type | Description |
---|---|---|
alternative_results | Boolean | Indicates the presence of alternative results in the response |
results | List of Attractions | List of available attractions |
total | Integer | Number of attractions found |
categories_count | Object | Mapping with number of occurrences for each category ID key |
Attraction
Name | Type | Description |
---|---|---|
address | String | Location address |
attraction_details_url | String | Relative URL to the details of given attraction |
attraction_id | String | Attraction ID. Maximum length is 50 characters |
attraction_name | String | Attraction name. Maximum length is 250 characters |
attraction_type_id | Integer | Type of the attraction. See more about attraction types |
categories | List | List of category IDs the attraction is associated with. Available categories can be obtained from the common endpoint |
group_id | Integer | Attraction group ID. Available groups can be obtained from the common endpoint |
city | String | Location city |
description | String | Short descriptions of an attraction |
duration | Integer | Approximate attraction duration in minutes |
geolocation_points | List | List of coordinates of the most important points on the tour route |
images | List of Images | Attraction images |
label_blue | String | Attraction blue label |
label_red | String | Attraction red label |
location_name | String | Location name. Maximum length is 64 characters |
max_price | Price | Maximum available price in multiple currencies. |
min_price | Price | Minimum available price in multiple currencies. |
priority | Integer | Attraction priority. By default the return list of attractions is sorted by this value |
subcategories | List | List of subcategory IDs the attraction is associated with. Available categories can be obtained from the common endpoint |
tags | List | List of Tags assigned to the attraction |
timezone | String | Attraction timezone |
upcoming_instances | List | List of up to 100 dates in which instance of the attraction take place |
Geolocation Point
Name | Type | Description |
---|---|---|
latitude | Float | A geographic coordinate that specifies the north–south position of a point on the Earth’s surface. |
longitude | Float | A geographic coordinate that specifies the east-west position of a point on the Earth’s surface. |
name | String | Short description of point |
Some tourist attractions might have several geo-points, such as start and end.
Price
{
"PLN": "9900",
"GBP": "1650",
"EUR": "3300",
}
Name | Type | Description |
---|---|---|
EUR | Integer | Price in Euro |
GBP | Integer | Price in British Pound |
PLN | Integer | Price in Polish Zloty |
etc. | Integer | See all supported currencies |
Image
Name | Type | Description |
---|---|---|
image_w200_h200 | String | URL to the image with width of 200px and height of 200px |
image_w288_h125 | String | URL to the image with width of 288px and height of 125px |
image_w345_h237 | String | URL to the image with width of 345px and height of 237px |
Tag
Name | Type | Description |
---|---|---|
name | String | Tag name (in selected language) |
tag_id | Int | Tag ID used for searching by tags |
There is a special tag Best Deal
used by Coras to highlight selected attractions
Alternative results
The Attractions API supports returning alternative results in the case that a search request with
the desired criteria would return no results. If the alternative_results
parameter is provided along
with other parameters then in case of no results found the following will happen:
- If no results found for given parameters, then search by the same parameters except
search_term
and group_id
if they have been provided in the first place.
- If above would return no results then expand the date range by increasing end_date
by four weeks
Attraction types
Currently two types of attraction are supported: Theater events and tours. The list of attraction types can be retrieved from the Attraction types endpoint.
Get Attraction
Returns details for both types of attractions.
The structure of returned data is different for both types and mimics the structure returned by Get Theater attraction and Get Tour attraction for theater events and tourist attractions respectively.
$ curl -X GET "https://sandbox.coras.io/v2/attractions/54d07c194cc410e6325d9535d86c036d" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fa" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"attraction_type": "TOUR",
"attraction": {
"attendee_city_required": false,
"attendee_country_code_required": false,
"attendee_date_of_birth_required": false,
"attendee_email_required": false,
"attendee_first_name_required": false,
"attendee_gender_required": false,
"attendee_id_number_required": false,
"attendee_phone_number_required": false,
"attendee_province_required": false,
"attendee_second_name_required": false,
"phone_number_verification_required": false,
"coras_tour_id": "08e36beb3acadc1e69823b4d67aea83d",
"attraction_name": "The Total London Experience with Free Lunch Pack",
"group_id": 3,
"city": "London",
"duration": 600,
"geolocation_points": [
{
"name": "London",
"longitude": -0.1262362,
"latitude": 51.5001524
}
],
"images": {
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w1600_h300": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=1600&h=300&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w288_h204": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=204&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w446_h300": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=446&h=300&fit=crop&crop=edges&auto=format,enhance,compress",
"images_w750_h340": [
"https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/675dd6eb-95f0-5fca-aa37-8a245069e089.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/131a7d8e-d2bf-511e-9b21-0fd56a048e6a.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/f6822249-1973-5095-bf04-7d7489aca3a5.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/dd83f806-9e16-5ed1-b054-58250dc81508.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress"
],
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress"
},
"languages_spoken": ["English - Guide", "English - Audio", "English - Written"],
"min_booking_size": 1,
"max_booking_size": 10,
"min_price": {
"AUD": 24265,
"CHF": 15794,
"DKK": 111170,
"EUR": 13730,
"GBP": 12000,
"HRK": 110858,
"MAD": 156449,
"NOK": 149518,
"PLN": 59330,
"SEK": 157679,
"USD": 16071
},
"summary": "<p>Panoramic tour of London - Entry to St. Paul’s Cathedral - See the Changing of the Guard at Buckingham Palace - Entry to Tower of London - Free Thames River boat ride - Spectacular experience on the London Eye - Complimentary Lunch Pack</p>",
"itinerary": "<p>Daily</p><p>Check-in: 8:00am Departure: 8:30amReturn (approx.): 6:00pm</p><p>Departure point: 4 Fountain Square, 123-151 Buckingham Palace Road, London SW1W 9SHReturn point: London Eye Pier</p>",
"duration_description": "<p>Approx. 10 hours</p>",
"highlights": "<ul><li>Panoramic tour of London</li><li>Entry to St. Paul’s Cathedral</li><li>See the Changing of the Guard at Buckingham Palace</li><li>Entry to Tower of London</li><li>Free Thames River boat ride</li><li>Spectacular experience on the London Eye</li><li>Complimentary Lunch Pack</li></ul>",
"included": "<ul><li>Admissions to Tower of London and St. Paul\'s Cathedral</li><li>Panoramic Tour of London</li><li>River Boat Ride</li><li>Coca-Cola London Eye Experience</li><li>Free Lunch Pack</li><li>Transportation by Air-Conditioned Coach </li><li>Professional Guide</li></ul>",
"excluded": "<ul><li>Gratuities</li><li>Hotel pick-up & return</li><li>Food and beverages unless stated differently</li></ul>",
"please_note": "<ul><li>On Sunday due to Church services, there is no guiding inside St Paul’s Cathedral</li><li>Bookings made after midnight for the same day will not receive a free lunch</li><li>During Peak Periods, Additional Vehicles Without Wi-Fi May Be Used</li><li>The Guard Change may not be operational in bad weather conditions. On these occasions we will visit the Horse Guards for a photostop instead</li><li>No Greenwich on the below days due to Thames Clipper- LRD planned Greenwich Pier closure. The tours will operate with a boat ride from Tower Pier to London Eye where the tour will end. Dates: 7, 9, 10, 16, 17 February 2018</li></ul>",
"restrictions": "",
"extras_upgrades": "",
"essential_information": "<p>Tel: 44 (0)20 7233 7030/ 1 800 548 7083Email: london@grayline.com</p><p>Check-in: 8:00am Departure: 8:30amReturn (approx.): 6:00pm</p><p>Departure point: 4 Fountain Square, 123-151 Buckingham Palace Road, London SW1W 9SHReturn point: London Eye Pier</p><p>**The complimentary hotel pick-up service will not be operating from 1st April 2017, guests will have to make their own way to Golden Tours Visitor Centre in Victoria</p>",
"cancellation_policy": "For a full refund, cancel at least 24 hours in advance of the start date of the experience.",
"requirements": "",
"return_details": "",
"departure_time": "8:00 AM",
"departure_point": "4 Fountain Square, 123-151 Buckingham Palace Road, London SW1W 9SH",
"admission": "",
"special_offer": "",
"sales_enabled": true,
"tags": [{
"name": "music",
"tag_id": 2
}],
"categories": [1, 3],
"timezone": "Europe/London",
"tour_operator_url": "https://www.goldentours.com/contact-us",
"tour_operator_information": 1,
"sale_periods": [
{
"start": "2019-04-08 00:00:00",
"end": "2019-04-08 00:00:00"
},
{
"start": "2019-04-15 00:00:00",
"end": "2019-04-15 00:00:00"
},
{
"start": "2019-04-22 00:00:00",
"end": "2019-04-22 00:00:00"
}
],
"mandatory_attendee": false,
"pickup_available": true,
"pickup_required": true,
"pickup_on_request": true,
},
"instances": [
{
"instance_id": "351107",
"start_datetime": "2018-07-30T06:30:00+00:00"
}
],
"price_types": [
{
"price_type_id": "6ca2ffe69a88f2bd02f6a35203b424fa",
"name": "Adult",
"description": "12-54",
"agerange_min": 12,
"agerange_max": 54,
"can_be_guardian": true,
"require_guardian": false
}, {
"price_type_id": "4dc8aef85a0dd10cb2f9b0ae206f274f",
"name": "Senior",
"description": "55-99",
"agerange_min": 55,
"agerange_max": 99,
"can_be_guardian": true,
"require_guardian": false
}, {
"price_type_id": "00f3d3644378e0e33214d2f87f4995ce",
"name": "Child",
"description": "6-11",
"agerange_min": 6,
"agerange_max": 11,
"can_be_guardian": false,
"require_guardian": true
}, {
"price_type_id": "c091af3e5c8bf9fc412f64e889a86d73",
"name": "Infant",
"description": null,
"agerange_min": 0,
"agerange_max": 5,
"can_be_guardian": false,
"require_guardian": true
}
],
"total": 1,
"first_instance_date": "2018-07-30T06:30:00+00:00",
"last_instance_date": "2019-08-22T06:30:00+00:00"
}
{
"attraction_type": "THEATER",
"attraction": {
"attendee_city_required": false,
"attendee_country_code_required": false,
"attendee_date_of_birth_required": false,
"attendee_email_required": false,
"attendee_first_name_required": false,
"attendee_gender_required": false,
"attendee_id_number_required": false,
"attendee_phone_number_required": false,
"attendee_province_required": false,
"attendee_second_name_required": false,
"phone_number_verification_required": false,
"address": "Shaftesbury Avenue, London, W1D 7ES",
"attraction_name": "THRILLER LIVE",
"group_id": 4,
"city": "London",
"description": "Now in its record breaking 9th sensational year, THRILLER LIVE is a spectacular concert created to celebrate the career of the world’s greatest entertainer.",
"duration": 140,
"images": {
"image_w96_h96": "",
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w279_h213": "",
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w304_h81": "",
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress"
},
"latitude": null,
"location_name": "Lyric TheatER",
"longitude": null,
"mandatory_attendee": false,
"multiple_purchases": false,
"seat_map": null,
"seats_sales_enabled": false,
"tags": [{
"name": "music",
"tag_id": 2
}],
"timezone": "Europe/London",
"categories": [1, 3],
"max_tickets_per_order": 8,
},
"instances": [
{
"instance_id": "a7c9798a0fb33d5a5883a3dca5682741",
"price_bands": [
{
"id": "E29",
"price_band_name": "Price Band E",
"category_id": 22829224,
"section_name": "Balcony",
"section_id": null,
"spaces_remaining": 18,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 2350,
"GBP": 300,
"DKK": 1844,
"EUR": 343,
"SEK": 2584,
"PLN": 1480,
"USD": 402
},
"max_booking_fee": {
"NOK": 2350,
"GBP": 300,
"DKK": 1844,
"EUR": 343,
"SEK": 2584,
"PLN": 1480,
"USD": 402
},
"min_full_price": {
"NOK": 25849,
"GBP": 2365,
"DKK": 20280,
"EUR": 3775,
"SEK": 28429,
"PLN": 16285,
"USD": 4421
},
"max_full_price": {
"NOK": 25849,
"GBP": 2365,
"DKK": 20280,
"EUR": 3775,
"SEK": 28429,
"PLN": 16285,
"USD": 4421
},
"price": {
"NOK": 23499,
"GBP": 3000,
"DKK": 18436,
"EUR": 3431,
"SEK": 25845,
"PLN": 14805,
"USD": 4019
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
},
{
"id": "D39",
"price_band_name": "Price Band D",
"category_id": 43913235,
"section_name": "Upper Circle",
"section_id": null,
"spaces_remaining": 8,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 3133,
"GBP": 400,
"DKK": 2459,
"EUR": 458,
"SEK": 3446,
"PLN": 1974,
"USD": 536
},
"max_booking_fee": {
"NOK": 3133,
"GBP": 400,
"DKK": 2459,
"EUR": 458,
"SEK": 3446,
"PLN": 1974,
"USD": 536
},
"min_full_price": {
"NOK": 39425,
"EUR": 5033,
"SEK": 43359,
"PLN": 21713,
"GBP": 4400,
"DKK": 30936,
"USD": 5895
},
"max_full_price": {
"NOK": 39425,
"EUR": 5033,
"SEK": 43359,
"PLN": 21713,
"GBP": 4400,
"DKK": 30936,
"USD": 5895
},
"price": {
"NOK": 35837,
"EUR": 4575,
"SEK": 308736,
"PLN": 19739,
"GBP": 4000,
"DKK": 28121,
"USD": 5359
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
},
{
"id": "E29",
"price_band_name": "Price Band E",
"category_id": 22829224,
"section_name": "Upper Circle",
"section_id": null,
"spaces_remaining": 33,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 2687,
"EUR": 343,
"SEK": 2955,
"PLN": 1480,
"GBP": 300,
"DKK": 2108,
"USD": 402
},
"max_booking_fee": {
"NOK": 2687,
"EUR": 343,
"SEK": 2955,
"PLN": 1480,
"GBP": 300,
"DKK": 2108,
"USD": 402
},
"min_full_price": {
"NOK": 29571,
"EUR": 3775,
"SEK": 23204,
"PLN": 16285,
"GBP": 3300,
"DKK": 32522,
"USD": 4421
},
"max_full_price": {
"NOK": 29571,
"EUR": 3775,
"SEK": 23204,
"PLN": 16285,
"GBP": 3300,
"DKK": 32522,
"USD": 4421
},
"price": {
"NOK": 26876,
"EUR": 3431,
"SEK": 21089,
"PLN": 14805,
"GBP": 3000,
"DKK": 29558,
"USD": 4019
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
}
],
"start_datetime": "2018-07-10T14:00:00+00:00",
"provisional_date": false,
}
],
"total_instances": 1
}
Request
GET https://sandbox.coras.io/v2/attractions/{attraction_id}
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
attraction_id | String | Yes | Attraction ID. Maximum length is 36 characters |
Querystring parameters
Name | Type | Required | Description |
---|---|---|---|
currency | String | No | Supported currency |
date_start | String | Yes | Date range from (YYYY-MM-DD) |
date_end | String | No | Date range to (YYYY-MM-DD) |
language_code | String | No | Selected language (default: en ) |
page | Integer | No | Page number (default: 0) |
size | Integer | No | Number of instances to return (default: 10, max: 1000) per single page |
Response
Name | Type | Description |
---|---|---|
attraction_type | String | Indicates the type of the attraction. THEATER for theater event or TOUR for tourist attraction. |
attraction | Theater event or Tour attraction | Details of the attraction. |
instances | Theater event instances or Tour instances | Instances of the attraction |
price_types | List of Tour Price Types | List of available price types. Only present for tourist attraction (attraction_type is TOUR ). |
total | Integer | Number of instances attached to attraction. Only present for tourist attraction (attraction_type is TOUR ). |
first_instance_date | String | The date and time of the attraction instance closest to the present time |
last_instance_date | String | The date and time of the attraction’s last instance |
total_instances | Integer | Total number of instances found. Only present for theater attraction (attraction_type is THEATER ). |
Tour Attraction
Name | Type | Description |
---|---|---|
attendee_city_required | Boolean | Indicates if providing city for each attendee is required |
attendee_country_code_required | Boolean | Indicates if providing country_code for each attendee is required |
attendee_date_of_birth_required | Boolean | Indicates if providing date_of_birth for each attendee is required |
attendee_email_required | Boolean | Indicates if providing email for each attendee is required |
attendee_first_name_required | Boolean | Indicates if providing first_name for each attendee is required |
attendee_gender_required | Boolean | Indicates if providing gender for each attendee is required |
attendee_id_number_required | Boolean | Indicates if providing id_number for each attendee is required |
attendee_phone_number_required | Boolean | Indicates if providing phone_number for each attendee is required |
attendee_province_required | Boolean | Indicates if providing province for each attendee is required |
attendee_second_name_required | Boolean | Indicates if providing second_name for each attendee is required |
phone_number_verification_required | Boolean | Indicates if phone number of lead customer must be verified |
admission | String | Coras only field |
attraction_name | String | Name of attraction |
cancellation_policy | String | Describes the rules of cancellation and refunds |
categories | List | List of Subcategory IDs assigned to the attraction |
city | String | City name |
coras_tour_id | string | Tour attraction ID |
departure_point | String | HTML-formatted natural-language description of this tour’s departure location |
departure_time | String | HTML-formatted natural-language description of this tour’s departure times |
duration | Integer | Approximate tour duration in minutes |
duration_description | String | Natural-language description of this tour’s duration |
essential_information | String | HTML-formatted natural-language description of extra information pertaining to this tour |
excluded | String | HTML-formatted natural-language exclusions for this tour |
extras_upgrades | String | Extras / upgrades |
geolocation_points | List | List of coordinates of the most important points on the tour route |
group_id | Integer | Attraction group ID. Available groups can be obtained via common endpoint |
highlights | String | Natural-language ‘selling points’ for this tour |
images | List of Images | Attraction images |
included | String | HTML-formatted features included in this tour |
itinerary | String | HTML-formatted description of the itinerary of this tour if available |
languages_spoken | List | Possible languages to choose during attraction (English translated identifiers, e.g. “English - Audio”) |
mandatory_attendee | Boolean | Attendees have to be added for each ticket (see Attendees endpoint) |
max_booking_size | Integer | Maximum number of tickets |
min_booking_size | Integer | Minimum number of tickets |
min_price | Price | Minimum available price in multiple currencies. |
pickup_available | Boolean | Indicates pickup points availability for a given tour |
pickup_on_request | Boolean | true if customer can provide a freetext pickup point |
pickup_required | Boolean | true if a pickup point has to be chosen to make a reservation |
please_note | String | HTML-formatted clauses providing additional information about this tour |
restrictions | String | Restrictions - e.g. Pets, minimum age / children permitted, whether requires a preexisting skill, etc. |
summary | String | Natural-language description (shortened) of this tour |
requirements | String | Natural-language description of any requirements pertaining to the admission/use of the voucher |
return_details | String | HTML-formatted natural-language description of this tour’s drop-off details (if available) |
sale_periods | List of Sale periods | Information when attraction is available for sale |
sales_enabled | Boolean | Coras only field (currently API returns only attractions with sales_enabled=true ) |
special_offer | String | Natural-language description of any special offers available for this tour |
tags | List | List of Tags assigned to the attraction |
timezone | String | Attraction timezone |
tour_operator_information | Integer | The operator information is: 1 - on the operator’s website, 2 - on the voucher |
tour_operator_url | String | Direct URL to operator |
Tour Instances
Name | Type | Description |
---|---|---|
instance_id | String | Coras only field |
start_datetime | String | Start date and time |
NOTE: For tour attractions a single instance can correspond to multiple options (at different times of the day) - for available options call Tour Availability.
Tour Price Types
Name | Type | Description |
---|---|---|
agerange_max | Integer | Years. If blank, assume is adult |
agerange_min | Integer | Years. i.e. Senior will have agerange_min=65 |
can_be_guardian | Boolean | Whether ticket can be bought together with type require_guardian=True |
description | String | Optional price type description |
name | String | Price type name, e.g. Adult |
price_type_id | String | Price type ID |
require_guardian | Boolean | Whether ticket can be bought with ticket type can_be_guardian=True |
Tour Images
Name | Type | Description |
---|---|---|
image_w288_h125 | String | URL to the image with width of 288px and height of 125px |
image_w200_h200 | String | URL to the image with width of 200px and height of 200px |
image_w288_h204 | String | URL to the image with width of 288px and height of 204px |
image_w345_h237 | String | URL to the image with width of 345px and height of 237px |
image_w446_h300 | String | URL to the image with width of 466px and height of 300px |
image_w1600_h300 | String | URL to the image with width of 1600px and height of 300px |
images_w750_h340 | String | URL to the image with width of 750px and height of 340px |
Sale periods
Name | Type | Description |
---|---|---|
end | String | End date and time of the sale |
start | String | Start date and time of the sale |
Theater Attraction
Name | Type | Description |
---|---|---|
attendee_city_required | Boolean | Indicates if providing city for each attendee is required |
attendee_country_code_required | Boolean | Indicates if providing country_code for each attendee is required |
attendee_date_of_birth_required | Boolean | Indicates if providing date_of_birth for each attendee is required |
attendee_email_required | Boolean | Indicates if providing email for each attendee is required |
attendee_first_name_required | Boolean | Indicates if providing first_name for each attendee is required |
attendee_gender_required | Boolean | Indicates if providing gender for each attendee is required |
attendee_id_number_required | Boolean | Indicates if providing id_number for each attendee is required |
attendee_phone_number_required | Boolean | Indicates if providing phone_number for each attendee is required |
attendee_province_required | Boolean | Indicates if providing province for each attendee is required |
attendee_second_name_required | Boolean | Indicates if providing second_name for each attendee is required |
phone_number_verification_required | Boolean | Indicates if phone number of lead customer must be verified |
address | String | Venue street address |
attraction_name | String | Attraction title. Maximum length is 250 characters |
group_id | Integer | Attraction group ID. Available groups can be obtained from the common endpoint |
city | String | Venue city |
description | String | Attraction description in requested language |
duration | Integer | Approximate attraction duration in minutes |
images | List of Image | Attraction images |
latitude | Float | A geographic coordinate that specifies the north–south position of a point on the Earth’s surface. |
location_name | String | Location name. Maximum length is 64 characters |
longitude | Float | A geographic coordinate that specifies the east-west position of a point on the Earth’s surface. |
mandatory_attendee | Boolean | The flag indicates whether or not it is required to provide the data of the event’s attendees |
multiple_purchases | Boolean | If this flag is set to false, the customer can make orders for many tickets but only from one section and at the same price band. |
seat_map | String | URL address to seat map in requested language |
seats_sales_enabled | Boolean | Flag indicating whether the sale is carried out with the use of a seating plan |
tags | List | List of Tags assigned to the attraction |
categories | List | List of Subcategory IDs assigned to the attraction |
timezone | String | Venue timezone |
Theater Instances
Name | Type | Description |
---|---|---|
instance_id | String | Instance ID |
price_bands | List of Theater Price Bands | List of available price bands |
start_datetime | String | Datetime when performance starts |
provisional_date | Boolean | Indicates if returned start_datetime is provisional and may change in the future |
Theater Price Bands
Name | Type | Description |
---|---|---|
id | String | Price band ID |
price_band_name | String | Price band name |
category_id | Integer | Seats.io category ID |
section_name | String | Name of section |
section_id | String | Section ID DEPRECATED |
spaces_remaining | Integer | Number of seats left |
is_general_admission | Boolean | Indicates if the section is in a general admission scheme which means the section is most likely seat-less or seats are not pre-assigned. Location from which customer will watch the event is determined upon arrival at the venue. |
price_category | String | Price category |
updating | Boolean | Information if specific price band is being updated |
price_types | List of Theater Price Types | List of available price types |
Theater Price Types
Name | Type | Description |
---|---|---|
min_booking_fee | Integer | Minimum Fees per ticket for current distributor |
max_booking_fee | Integer | Maximum Fees per ticket for current distributor |
min_full_price | Integer | Ticket price including face value and minimum fees for current distributor |
max_full_price | Integer | Ticket price including face value and maximum fees for current distributor |
price | Integer | Face value per ticket |
price_type | String | Price type |
price_type_id | String | Price type ID |
valid_splits | List of Integer | The list of numbers representing how many tickets can be selected for the price type |
Theater Images
Name | Type | Description |
---|---|---|
image_w96_h96 | String | URL to the image with width of 96px and height of 96px |
image_w200_h200 | String | URL to the image with width of 200px and height of 200px |
image_w279_h213 | String | URL to the image with width of 279px and height of 213px |
image_w288_h125 | String | URL to the image with width of 288px and height of 125px |
image_w304_h81 | String | URL to the image with width of 304px and height of 81px |
image_w345_h237 | String | URL to the image with width of 345px and height of 237px |
Get Showcased Attractions
$ curl -X GET "https://sandbox.coras.io/v2/showcases" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fa" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"top_showcase": [
{
"attraction_id": "9edc81d6a65c99c86f6d0c6da79b2813",
"attraction_type_id": 1,
"redirect_url": null,
"visible_on_mobile": false,
"visible_on_desktop": true,
"image_w1600_h380": "https://coras-local.imgix.net/event-images%1Gk9af453e-2c6c-44dd-8426-d0c63d81e6d3.png?auto=compress",
"image_w320_h196": "https://coras-local.imgix.net/event-images%1Gk9af453e-2c6c-44dd-8426-d0c63d81e6d3.png?auto=compress",
"first_instance_date": "2019-09-19T18:30:00+00:00"
},
{
"attraction_id": null,
"attraction_type_id": null,
"redirect_url": null,
"visible_on_mobile": true,
"visible_on_desktop": false,
"image_w1600_h380": "https://coras-local.imgix.net/event-images%1Dd9af453e-2c6c-44dd-8426-d0c63d81e6d3.png?auto=compress",
"image_w320_h196": "https://coras-local.imgix.net/event-images%1Fg9af453e-2c6c-44dd-8426-d0c63d81e6d3.png?auto=compress",
"first_instance_date": null
}
],
"main_showcase": [
{
"attraction_id": null,
"attraction_type_id": null,
"redirect_url": "/results?category=Tourist%20Attractions&dateStart=2019-07-08&dateEnd=2019-07-18&city=Brussels",
"visible_on_mobile": true,
"visible_on_desktop": true,
"image_w1600_h380": "https://coras-local.imgix.net/event-images%1Ab9af453e-2c6c-44dd-8426-d0c63d81e6d3.png?auto=compress",
"image_w320_h196": "https://coras-local.imgix.net/event-images%1Bc9af453e-2c6c-44dd-8426-d0c63d81e6d3.png?auto=compress",
"first_instance_date": null
}
]
}
Returns a list of currently available showcases and corresponding attractions. Showcases are prepared by Coras team, have custom banners and can link to either an attraction, a static image or a list of results on the Microsite.
Request
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Coras-Distributor | String | Yes | Distributor ID |
Content-Type | String | Yes | Accepts only application/json |
Response
Object mapping of showcase name to a Showcased Attraction. Currently available ones are top_showcase
and main_showcase
.
Name | Type | Description |
---|---|---|
<showcase_name> | Showcased Attraction | Object representing single showcase |
Showcased Attraction
Showcased attraction can either link to an existing attraction (attraction_id
,
attraction_type_id
, first_instance_date
will be filled in), a static image (both images
will be provided)
or to a filtered list of results (redirect_url
will be an internal Microsite relative URL).
Name | Type | Description |
---|---|---|
attraction_id | String (nullable) | Attraction ID. Maximum length is 36 characters |
attraction_type_id | Integer (nullable) | Attraction Type ID |
first_instance_date | String (nullable) | Date of the first occurrence of the event (in the future) |
image_w320_h196 | String | URL to the image with width of 320px and height of 196px |
image_w1600_h380 | String | URL to the image with width of 1600px and height of 380px |
redirect_url | String (nullable) | Relative URL to Microsite |
visible_on_mobile | Boolean | Indicates if a showcase is meant to be visible on mobile |
visible_on_desktop | Boolean | Indicates if a showcase is meant to be visible on desktop |
Get Attraction types
$ curl -X GET "https://sandbox.coras.io/v2/attraction-types" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
[
{
"id": 1,
"name": "THEATER"
},
{
"id": 2,
"name": "TOUR"
}
]
Returns a list of the attraction types currently available.
Request
GET https://sandbox.coras.io/v2/attraction-types
Headers
Header | Type | Required | Description |
---|---|---|---|
Coras-Distributor | String | Yes | Distributor ID |
Content-Type | String | Yes | Accepts only application/json |
Response
Name | Type | Description |
---|---|---|
id | Integer | Attraction type ID |
name | String | Attraction name |
Request
Header | Type | Required | Description |
---|---|---|---|
Coras-Distributor | String | Yes | Distributor ID |
Content-Type | String | Yes | Accepts only application/json |
Theater Attractions
Get Theater Attraction
$ curl -X GET "https://sandbox.coras.io/v2/theater-events/54d07c194cc410e6325d9535d86c036d?date_start=2018-07-24&date_end=2018-07-30" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"attraction": {
"attendee_city_required": false,
"attendee_country_code_required": false,
"attendee_date_of_birth_required": false,
"attendee_email_required": false,
"attendee_first_name_required": false,
"attendee_gender_required": false,
"attendee_id_number_required": false,
"attendee_phone_number_required": false,
"attendee_province_required": false,
"attendee_second_name_required": false,
"phone_number_verification_required": false,
"address": "Shaftesbury Avenue, London, W1D 7ES",
"attraction_name": "THRILLER LIVE",
"group_id": 4,
"city": "London",
"description": "Panoramic tour of London - Entry to St. Paul’s Cathedral - See the Changing of the Guard at Buckingham Palace - Entry to Tower of London - Free Thames River boat ride - Spectacular experience on the London Eye - Complimentary Lunch Pack",
"duration": 140,
"images": {
"image_w96_h96": "",
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w279_h213": "",
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w304_h81": "",
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress"
},
"latitude": null,
"location_name": "Lyric Theatre",
"longitude": null,
"mandatory_attendee": false,
"multiple_purchases": false,
"seat_map": null,
"seats_sales_enabled": false,
"tags": [{
"name": "music",
"tag_id": 2
}],
"timezone": "Europe/London",
"categories": [1, 3],
"max_tickets_per_order": 8,
},
"instances": [
{
"instance_id": "a7c9798a0fb33d5a5883a3dca5682741",
"price_bands": [
{
"id": "E29",
"price_band_name": "Price Band E",
"category_id": 22829224,
"section_name": "Balcony",
"section_id": null,
"spaces_remaining": 18,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 2350,
"GBP": 300,
"DKK": 1844,
"EUR": 343,
"SEK": 2584,
"PLN": 1480,
"USD": 402
},
"max_booking_fee": {
"NOK": 2350,
"GBP": 300,
"DKK": 1844,
"EUR": 343,
"SEK": 2584,
"PLN": 1480,
"USD": 402
},
"min_full_price": {
"NOK": 25849,
"GBP": 2365,
"DKK": 20280,
"EUR": 3775,
"SEK": 28429,
"PLN": 16285,
"USD": 4421
},
"max_full_price": {
"NOK": 25849,
"GBP": 2365,
"DKK": 20280,
"EUR": 3775,
"SEK": 28429,
"PLN": 16285,
"USD": 4421
},
"price": {
"NOK": 23499,
"GBP": 3000,
"DKK": 18436,
"EUR": 3431,
"SEK": 25845,
"PLN": 14805,
"USD": 4019
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
},
{
"id": "D39",
"price_band_name": "Price Band D",
"category_id": 43913235,
"section_name": "Upper Circle",
"section_id": null,
"spaces_remaining": 8,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 3133,
"GBP": 400,
"DKK": 2459,
"EUR": 458,
"SEK": 3446,
"PLN": 1974,
"USD": 536
},
"max_booking_fee": {
"NOK": 3133,
"GBP": 400,
"DKK": 2459,
"EUR": 458,
"SEK": 3446,
"PLN": 1974,
"USD": 536
},
"min_full_price": {
"NOK": 39425,
"EUR": 5033,
"SEK": 43359,
"PLN": 21713,
"GBP": 4400,
"DKK": 30936,
"USD": 5895
},
"max_full_price": {
"NOK": 39425,
"EUR": 5033,
"SEK": 43359,
"PLN": 21713,
"GBP": 4400,
"DKK": 30936,
"USD": 5895
},
"price": {
"NOK": 35837,
"EUR": 4575,
"SEK": 308736,
"PLN": 19739,
"GBP": 4000,
"DKK": 28121,
"USD": 5359
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
},
{
"id": "E29",
"price_band_name": "Price Band E",
"category_id": 22829224,
"section_name": "Upper Circle",
"section_id": null,
"spaces_remaining": 33,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 2687,
"EUR": 343,
"SEK": 2955,
"PLN": 1480,
"GBP": 300,
"DKK": 2108,
"USD": 402
},
"max_booking_fee": {
"NOK": 2687,
"EUR": 343,
"SEK": 2955,
"PLN": 1480,
"GBP": 300,
"DKK": 2108,
"USD": 402
},
"min_full_price": {
"NOK": 29571,
"EUR": 3775,
"SEK": 23204,
"PLN": 16285,
"GBP": 3300,
"DKK": 32522,
"USD": 4421
},
"max_full_price": {
"NOK": 29571,
"EUR": 3775,
"SEK": 23204,
"PLN": 16285,
"GBP": 3300,
"DKK": 32522,
"USD": 4421
},
"price": {
"NOK": 26876,
"EUR": 3431,
"SEK": 21089,
"PLN": 14805,
"GBP": 3000,
"DKK": 29558,
"USD": 4019
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
}
],
"start_datetime": "2018-07-10T14:00:00+00:00",
"provisional_date": false,
}
],
"total_instances": 1
}
Returns a list of theater event instances for a given (theater) attraction ID and date range.
Request
GET https://sandbox.coras.io/v2/theater-events/{attraction_id}?language_code={language_code}&date_start={date_start}&date_end={date_end}&size={size}&page={page}
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
attraction_id | String | Yes | Attraction ID. Maximum length is 50 characters |
Querystring parameters
Name | Type | Required | Description |
---|---|---|---|
date_end | String | No | Date range to (YYYY-MM-DD) |
date_start | String | Yes | Date range from (YYYY-MM-DD) |
language_code | String | No | Selected language (deafult: en ) |
page | Integer | No | Page number (default: 0) |
size | Integer | No | Number of attractions to return (default: 10, max: 100) per single page |
currency | String | No | Supported currency |
Response
Name | Type | Description |
---|---|---|
attraction | Theater Attraction | Attraction details |
instances | List of Attraction Instances | List of theater instances |
total_instances | Integer | Total number of instances found |
first_instance_date | String | The date of attraction instance closes to present time |
Theater Attraction Details
Name | Type | Description |
---|---|---|
attendee_city_required | Boolean | Indicates if providing city for each attendee is required |
attendee_country_code_required | Boolean | Indicates if providing country_code for each attendee is required |
attendee_date_of_birth_required | Boolean | Indicates if providing date_of_birth for each attendee is required |
attendee_email_required | Boolean | Indicates if providing email for each attendee is required |
attendee_first_name_required | Boolean | Indicates if providing first_name for each attendee is required |
attendee_gender_required | Boolean | Indicates if providing gender for each attendee is required |
attendee_id_number_required | Boolean | Indicates if providing id_number for each attendee is required |
attendee_phone_number_required | Boolean | Indicates if providing phone_number for each attendee is required |
attendee_province_required | Boolean | Indicates if providing province for each attendee is required |
attendee_second_name_required | Boolean | Indicates if providing second_name for each attendee is required |
phone_number_verification_required | Boolean | Indicates if phone number of lead customer must be verified |
address | String | Venue street address |
attraction_name | String | Attraction title. Maximum length is 250 characters |
group_id | Integer | Attraction group ID. Available groups can be obtained from the common endpoint |
city | String | Venue city |
description | String | Attraction description in requested language |
duration | Integer | Approximate attraction duration in minutes |
images | List of Image | Attraction images |
latitude | Float | A geographic coordinate that specifies the north–south position of a point on the Earth’s surface. |
location_name | String | Location name. Maximum length is 64 characters |
longitude | Float | A geographic coordinate that specifies the east-west position of a point on the Earth’s surface. |
max_tickets_per_order | Integer | The maximum number of tickets that can be purchased in one order |
mandatory_attendee | Boolean | The flag indicates whether or not it is required to provide the data of the event’s attendees |
multiple_purchases | Boolean | If this flag is set to false, the customer can make orders for many tickets but only from one section and at the same price band. |
seat_map | String | URL address to seat map in requested language |
seats_sales_enabled | Boolean | Flag indicating whether the sale is carried out with the use of a seating plan |
tags | List | List of Tags assigned to the attraction |
categories | List | List of Subcategory IDs assigned to the attraction |
timezone | String | Venue timezone |
Theater Attraction Images
Name | Type | Description |
---|---|---|
image_w96_h96 | String | URL to the image with width of 96px and height of 96px |
image_w200_h200 | String | URL to the image with width of 200px and height of 200px |
image_w279_h213 | String | URL to the image with width of 279px and height of 213px |
image_w288_h125 | String | URL to the image with width of 288px and height of 125px |
image_w304_h81 | String | URL to the image with width of 304px and height of 81px |
image_w345_h237 | String | URL to the image with width of 345px and height of 237px |
Get Theater Attraction Instance
$ curl -X GET "https://sandbox.coras.io/v2/theater-events/54d07c194cc410e6325d9535d86c036d/instances/a7c9798a0fb33d5a5883a3dca5682741" \
-H "Content-Type: application/json" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"instance_id": "a7c9798a0fb33d5a5883a3dca5682741",
"price_bands": [
{
"id": "E29",
"price_band_name": "Price Band E",
"category_id": 22829224,
"section_name": "Balcony",
"section_id": null,
"spaces_remaining": 18,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 2350,
"GBP": 300,
"DKK": 1844,
"EUR": 343,
"SEK": 2584,
"PLN": 1480,
"USD": 402
},
"max_booking_fee": {
"NOK": 2350,
"GBP": 300,
"DKK": 1844,
"EUR": 343,
"SEK": 2584,
"PLN": 1480,
"USD": 402
},
"min_full_price": {
"NOK": 25849,
"GBP": 2365,
"DKK": 20280,
"EUR": 3775,
"SEK": 28429,
"PLN": 16285,
"USD": 4421
},
"max_full_price": {
"NOK": 25849,
"GBP": 2365,
"DKK": 20280,
"EUR": 3775,
"SEK": 28429,
"PLN": 16285,
"USD": 4421
},
"price": {
"NOK": 23499,
"GBP": 3000,
"DKK": 18436,
"EUR": 3431,
"SEK": 25845,
"PLN": 14805,
"USD": 4019
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
},
{
"id": "D39",
"price_band_name": "Price Band D",
"category_id": 43913235,
"section_name": "Upper Circle",
"section_id": null,
"spaces_remaining": 8,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 3133,
"GBP": 400,
"DKK": 2459,
"EUR": 458,
"SEK": 3446,
"PLN": 1974,
"USD": 536
},
"max_booking_fee": {
"NOK": 3133,
"GBP": 400,
"DKK": 2459,
"EUR": 458,
"SEK": 3446,
"PLN": 1974,
"USD": 536
},
"min_full_price": {
"NOK": 39425,
"EUR": 5033,
"SEK": 43359,
"PLN": 21713,
"GBP": 4400,
"DKK": 30936,
"USD": 5895
},
"max_full_price": {
"NOK": 39425,
"EUR": 5033,
"SEK": 43359,
"PLN": 21713,
"GBP": 4400,
"DKK": 30936,
"USD": 5895
},
"price": {
"NOK": 35837,
"EUR": 4575,
"SEK": 308736,
"PLN": 19739,
"GBP": 4000,
"DKK": 28121,
"USD": 5359
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
},
{
"id": "E29",
"price_band_name": "Price Band E",
"category_id": 22829224,
"section_name": "Upper Circle",
"section_id": null,
"spaces_remaining": 33,
"is_general_admission": false,
"price_category": "Band A",
"updating": false,
"price_types": [{
"price_type": "Fuul Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"min_booking_fee": {
"NOK": 2687,
"EUR": 343,
"SEK": 2955,
"PLN": 1480,
"GBP": 300,
"DKK": 2108,
"USD": 402
},
"max_booking_fee": {
"NOK": 2687,
"EUR": 343,
"SEK": 2955,
"PLN": 1480,
"GBP": 300,
"DKK": 2108,
"USD": 402
},
"min_full_price": {
"NOK": 29571,
"EUR": 3775,
"SEK": 23204,
"PLN": 16285,
"GBP": 3300,
"DKK": 32522,
"USD": 4421
},
"max_full_price": {
"NOK": 29571,
"EUR": 3775,
"SEK": 23204,
"PLN": 16285,
"GBP": 3300,
"DKK": 32522,
"USD": 4421
},
"price": {
"NOK": 26876,
"EUR": 3431,
"SEK": 21089,
"PLN": 14805,
"GBP": 3000,
"DKK": 29558,
"USD": 4019
},
"valid_splits": [1, 2, 3, 4, 5, 6, 7, 8]
}]
}
],
"start_datetime": "2018-07-10T14:00:00+00:00",
"provisional_date": false,
}
For selected attraction ID and attraction instance ID, this endpoints returns information for that attraction instance.
Request
GET https://sandbox.coras.io/v2/theater-events/{attraction_id}/instances/{instance_id}
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
attraction_id | String | Yes | Attraction ID. Maximum length is 50 characters |
instance_id | String | Yes | Instance ID. Maximum length is 50 characters |
Querystring parameters
Name | Type | Required | Description |
---|---|---|---|
currency | String | No | Supported currency |
language_code | String | No | Selected language (default: en ) |
Response
Name | Type | Description |
---|---|---|
instance_id | String | Instance ID |
price_bands | List of Price Bands | List of available price bands |
start_datetime | String | Datetime when performance starts |
provisional_date | Boolean | Indicates if returned start_datetime is provisional and may change in the future |
Price Bands
Name | Type | Description |
---|---|---|
id | String | Price band ID |
price_band_name | String | Price band name |
category_id | Integer | Seats.io category ID |
section_name | String | Name of section |
section_id | String | Section ID DEPRECATED |
spaces_remaining | Integer | Number of seats left |
is_general_admission | Boolean | Indicates if the section is in a general admission scheme which means the section is most likely seat-less or seats are not pre-assigned. Location from which customer will watch the event is determined upon arrival at the venue. |
price_category | String | Price category |
updating | Boolean | Information if specific price band is being updated |
price_types | List of Price Types | List of available price types |
Price Types
Name | Type | Description |
---|---|---|
min_booking_fee | Integer | Minimum Fees per ticket for current distributor |
max_booking_fee | Integer | Maximum Fees per ticket for current distributor |
min_full_price | Integer | Ticket price including face value and minimum fees for current distributor |
max_full_price | Integer | Ticket price including face value and maximum fees for current distributor |
price | Integer | Face value per ticket |
price_type | String | Price type |
price_type_id | String | Price type ID |
valid_splits | List of Integer | The list of numbers representing how many tickets can be selected for the price type |
Seats
Get seats
Returns a list of available seats for given event and instance.
$ curl -X GET "https://sandbox.coras.io/v2/theater-events/54d07c194cc410e6325d9535d86c036d/instances/a7c9798a0fb33d5a5883a3dca5682741/seats" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
[
{
"category_id": 88303523,
"seats": {
"UPPER CIRCLE-B-14": {
"coras_seat_id": "f7f4ea4f26acf34566df36143c1ae209484fa80e",
"restricted_view": "Due to the complex set, there are times the audience may miss parts of the production",
"section_id": null,
"price_category_id" : "b6d2f4de7b7fd91ba97795cdef1c254c",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN"
},
"UPPER CIRCLE-B-13": {
"coras_seat_id": "ebc0eeb577b9e368841fa7a2073b8223bff797ba",
"restricted_view": "Has a slightly restricted view",
"section_id": null,
"price_category_id" : "b6d2f4de7b7fd91ba97795cdef1c254c",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN"
}
}
},
{
"category_id": 85639122,
"seats": {
"BALCONY-K-16": {
"coras_seat_id": "22ffb9c2115707ca5aead341798c6230a4187bbb",
"restricted_view": null,
"section_id": null,
"price_category_id" : "57374630dff0a00c8d77fa025bb83923",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN"
},
"BALCONY-K-15": {
"coras_seat_id": "78de2f297811b3452c08c4add13fd2d1218978be",
"restricted_view": "Safety Rail: May slightly restrict your view",
"section_id": null,
"price_category_id" : "57374630dff0a00c8d77fa025bb83923",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN"
}
}
}
]
HTTP Request
GET https://sandbox.coras.io/v2/theater-events/{attraction_id}/instances/{instance_id}/seats
Headers
Name | Type | Required | Description |
---|---|---|---|
Coras-Distributor | String | Yes | Distributor ID |
Content-Type | String | Yes | Accepts only application/json |
Arguments
Name | Type | Required | Description |
---|---|---|---|
language_code | String | No | Selected language (default: en ) |
Response
Name | Type | Description |
---|---|---|
seats | Object | SeatsIO object ID (String) to Seat mapping |
category_id | Integer | Price category, matches category_id from Theater Attraction or Theater Instance Details |
Seat
Name | Type | Description |
---|---|---|
coras_seat_id | String | ID used to identify the seat. Can be included in the request to make a reservation |
restricted_view | String (nullable) | Restricted view description |
price_category_id | String | Coras only field DEPRECATED |
section_id | String | Coras only field DEPRECATED |
price_type_id | String | Coras only field DEPRECATED |
HTTP 404
status code when an attraction with the given ID does not exist
HTTP 400
status code when sale through seats.io is disabled or a seating chart
is not assigned to this attraction
Tour Attractions
Get Tour Attraction
$ curl -X GET "https://sandbox.coras.io/v2/tours/08e36beb3acadc1e69823b4d67aea83d?date_start=2018-07-24&date_end=2018-07-30" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"attraction": {
"attendee_city_required": false,
"attendee_country_code_required": false,
"attendee_date_of_birth_required": false,
"attendee_email_required": false,
"attendee_first_name_required": false,
"attendee_gender_required": false,
"attendee_id_number_required": false,
"attendee_phone_number_required": false,
"attendee_province_required": false,
"attendee_second_name_required": false,
"phone_number_verification_required": false,
"coras_tour_id": "08e36beb3acadc1e69823b4d67aea83d",
"attraction_name": "The Total London Experience with Free Lunch Pack",
"group_id": 3,
"city": "London",
"duration": 600,
"geolocation_points": [
{
"name": "London",
"longitude": -0.1262362,
"latitude": 51.5001524
}
],
"images": {
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w1600_h300": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=1600&h=300&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w288_h204": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=204&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w446_h300": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=446&h=300&fit=crop&crop=edges&auto=format,enhance,compress",
"images_w750_h340": [
"https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/675dd6eb-95f0-5fca-aa37-8a245069e089.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/131a7d8e-d2bf-511e-9b21-0fd56a048e6a.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/f6822249-1973-5095-bf04-7d7489aca3a5.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/dd83f806-9e16-5ed1-b054-58250dc81508.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress"
],
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress"
},
"languages_spoken": ["English - Guide", "English - Audio", "English - Written"],
"min_booking_size": 1,
"max_booking_size": 10,
"min_price": {
"AUD": 24265,
"CHF": 15794,
"DKK": 111170,
"EUR": 13730,
"GBP": 12000,
"HRK": 110858,
"MAD": 156449,
"NOK": 149518,
"PLN": 59330,
"SEK": 157679,
"USD": 16071
},
"summary": "<p>Panoramic tour of London - Entry to St. Paul’s Cathedral - See the Changing of the Guard at Buckingham Palace - Entry to Tower of London - Free Thames River boat ride - Spectacular experience on the London Eye - Complimentary Lunch Pack</p>",
"itinerary": "<p>Daily</p><p>Check-in: 8:00am Departure: 8:30amReturn (approx.): 6:00pm</p><p>Departure point: 4 Fountain Square, 123-151 Buckingham Palace Road, London SW1W 9SHReturn point: London Eye Pier</p>",
"duration_description": "<p>Approx. 10 hours</p>",
"highlights": "<ul><li>Panoramic tour of London</li><li>Entry to St. Paul’s Cathedral</li><li>See the Changing of the Guard at Buckingham Palace</li><li>Entry to Tower of London</li><li>Free Thames River boat ride</li><li>Spectacular experience on the London Eye</li><li>Complimentary Lunch Pack</li></ul>",
"included": "<ul><li>Admissions to Tower of London and St. Paul's Cathedral</li><li>Panoramic Tour of London</li><li>River Boat Ride</li><li>Coca-Cola London Eye Experience</li><li>Free Lunch Pack</li><li>Transportation by Air-Conditioned Coach </li><li>Professional Guide</li></ul>",
"excluded": "<ul><li>Gratuities</li><li>Hotel pick-up & return</li><li>Food and beverages unless stated differently</li></ul>",
"please_note": "<ul><li>On Sunday due to Church services, there is no guiding inside St Paul’s Cathedral</li><li>Bookings made after midnight for the same day will not receive a free lunch</li><li>During Peak Periods, Additional Vehicles Without Wi-Fi May Be Used</li><li>The Guard Change may not be operational in bad weather conditions. On these occasions we will visit the Horse Guards for a photostop instead</li><li>No Greenwich on the below days due to Thames Clipper- LRD planned Greenwich Pier closure. The tours will operate with a boat ride from Tower Pier to London Eye where the tour will end. Dates: 7, 9, 10, 16, 17 February 2018</li></ul>",
"restrictions": "",
"extras_upgrades": "",
"essential_information": "<p>Tel: 44 (0)20 7233 7030/ 1 800 548 7083Email: london@grayline.com</p><p>Check-in: 8:00am Departure: 8:30amReturn (approx.): 6:00pm</p><p>Departure point: 4 Fountain Square, 123-151 Buckingham Palace Road, London SW1W 9SHReturn point: London Eye Pier</p><p>**The complimentary hotel pick-up service will not be operating from 1st April 2017, guests will have to make their own way to Golden Tours Visitor Centre in Victoria</p>",
"cancellation_policy": "For a full refund, cancel at least 24 hours in advance of the start date of the experience.",
"requirements": "",
"return_details": "",
"departure_time": "8:00 AM",
"departure_point": "4 Fountain Square, 123-151 Buckingham Palace Road, London SW1W 9SH",
"admission": "",
"special_offer": "",
"sales_enabled": true,
"tags": [{
"name": "music",
"tag_id": 2
}],
"categories": [1, 3],
"timezone": "Europe/London",
"tour_operator_url": "https://www.goldentours.com/contact-us",
"tour_operator_information": 1,
"sale_periods": [
{
"start": "2019-04-08 00:00:00",
"end": "2019-04-08 00:00:00"
},
{
"start": "2019-04-15 00:00:00",
"end": "2019-04-15 00:00:00"
},
{
"start": "2019-04-22 00:00:00",
"end": "2019-04-22 00:00:00"
}
],
"mandatory_attendee": false,
"pickup_available": true,
"pickup_required": true,
"pickup_on_request": true,
},
"instances": [
{
"instance_id": "351107",
"start_datetime": "2018-07-30T06:30:00+00:00"
}
],
"price_types": [
{
"price_type_id": "6ca2ffe69a88f2bd02f6a35203b424fa",
"name": "Adult",
"description": "12-54",
"agerange_min": 12,
"agerange_max": 54,
"can_be_guardian": true,
"require_guardian": false
}, {
"price_type_id": "4dc8aef85a0dd10cb2f9b0ae206f274f",
"name": "Senior",
"description": "55-99",
"agerange_min": 55,
"agerange_max": 99,
"can_be_guardian": true,
"require_guardian": false
}, {
"price_type_id": "00f3d3644378e0e33214d2f87f4995ce",
"name": "Child",
"description": "6-11",
"agerange_min": 6,
"agerange_max": 11,
"can_be_guardian": false,
"require_guardian": true
}, {
"price_type_id": "c091af3e5c8bf9fc412f64e889a86d73",
"name": "Infant",
"description": null,
"agerange_min": 0,
"agerange_max": 5,
"can_be_guardian": false,
"require_guardian": true
}
],
"total": 1,
"first_instance_date": "2018-07-30T06:30:00+00:00",
"last_instance_date": "2019-08-22T06:30:00+00:00"
}
Returns information about a tour attraction for a given date range including a list of related tour instances and price types.
Request
GET https://sandbox.coras.io/v2/tours/{attraction_id}
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
attraction_id | String | Yes | Attraction Tour ID. Maximum length is 36 characters |
Querystring parameters
Name | Type | Required | Description |
---|---|---|---|
currency | String | No | Supported currency |
date_start | String | Yes | Date range from (YYYY-MM-DD) |
date_end | String | No | Date range to (YYYY-MM-DD) |
language_code | String | No | Selected language (default: en ) |
page | Integer | No | Page number (default: 0) |
size | Integer | No | Number of instances to return (default: 10, max: 1000) per single page |
Response
Name | Type | Description |
---|---|---|
attraction | Tour Attraction | Basic information about an attraction |
first_instance_date | String | The date and time of the attraction instance closest to the present time |
instances | List of Tour Instances | List of tour instances |
last_instance_date | String | The date and time of the attraction’s last instance |
price_types | List of Price Types | List of available price types |
total | Integer | Number of instances attached to attraction |
Tour Attraction
Name | Type | Description |
---|---|---|
attendee_city_required | Boolean | Indicates if providing city for each attendee is required |
attendee_country_code_required | Boolean | Indicates if providing country_code for each attendee is required |
attendee_date_of_birth_required | Boolean | Indicates if providing date_of_birth for each attendee is required |
attendee_email_required | Boolean | Indicates if providing email for each attendee is required |
attendee_first_name_required | Boolean | Indicates if providing first_name for each attendee is required |
attendee_gender_required | Boolean | Indicates if providing gender for each attendee is required |
attendee_id_number_required | Boolean | Indicates if providing id_number for each attendee is required |
attendee_phone_number_required | Boolean | Indicates if providing phone_number for each attendee is required |
attendee_province_required | Boolean | Indicates if providing province for each attendee is required |
attendee_second_name_required | Boolean | Indicates if providing second_name for each attendee is required |
phone_number_verification_required | Boolean | Indicates if phone number of lead customer must be verified |
admission | String | Coras only field |
attraction_name | String | Name of attraction |
cancellation_policy | String | Describes the rules of cancellation and refunds |
categories | List | List of Subcategory IDs assigned to the attraction |
city | String | City name |
coras_tour_id | string | Tour attraction ID |
departure_point | String | HTML-formatted natural-language description of this tour’s departure location |
departure_time | String | HTML-formatted natural-language description of this tour’s departure times |
duration | Integer | Approximate tour duration in minutes |
duration_description | String | Natural-language description of this tour’s duration |
essential_information | String | HTML-formatted natural-language description of extra information pertaining to this tour |
excluded | String | HTML-formatted natural-language exclusions for this tour |
extras_upgrades | String | Extras / upgrades |
geolocation_points | List | List of coordinates of the most important points on the tour route |
group_id | Integer | Attraction group ID. Available groups can be obtained via common endpoint |
highlights | String | Natural-language ‘selling points’ for this tour |
images | List of Images | Attraction images |
included | String | HTML-formatted features included in this tour |
itinerary | String | HTML-formatted description of the itinerary of this tour if available |
languages_spoken | List | Possible languages to choose during attraction (English translated identifiers, e.g. “English - Audio”) |
mandatory_attendee | Boolean | Attendees have to be added for each ticket (see Attendees endpoint) |
max_booking_size | Integer | Maximum number of tickets |
min_booking_size | Integer | Minimum number of tickets |
min_price | Price | Minimum available price in multiple currencies. |
pickup_available | Boolean | Indicates pickup points availability for a given tour |
pickup_on_request | Boolean | true if customer can provide a freetext pickup point |
pickup_required | Boolean | true if a pickup point has to be chosen to make a reservation |
please_note | String | HTML-formatted clauses providing additional information about this tour |
restrictions | String | Restrictions - e.g. Pets, minimum age / children permitted, whether requires a preexisting skill, etc. |
summary | String | Natural-language description (shortened) of this tour |
requirements | String | Natural-language description of any requirements pertaining to the admission/use of the voucher |
return_details | String | HTML-formatted natural-language description of this tour’s drop-off details (if available) |
sale_periods | List of Sale periods | Information when attraction is available for sale |
sales_enabled | Boolean | Coras only field (currently API returns only attractions with sales_enabled=true ) |
special_offer | String | Natural-language description of any special offers available for this tour |
tags | List | List of Tags assigned to the attraction |
timezone | String | Attraction timezone |
tour_operator_information | Integer | The operator information is: 1 - on the operator’s website, 2 - on the voucher |
tour_operator_url | String | Direct URL to operator |
Tour Instances
Name | Type | Description |
---|---|---|
instance_id | String | Coras only field |
start_datetime | String | Start date and time |
NOTE: For tour attractions a single instance can correspond to multiple options (at different times of the day) - for available options call Tour Availability.
Price Types
Name | Type | Description |
---|---|---|
agerange_max | Integer | Years. If blank, assume is adult |
agerange_min | Integer | Years. i.e. Senior will have agerange_min=65 |
can_be_guardian | Boolean | Whether ticket can be bought together with type require_guardian=True |
description | String | Optional price type description |
name | String | Price type name, e.g. Adult |
price_type_id | String | Price type ID |
require_guardian | Boolean | Whether ticket can be bought with ticket type can_be_guardian=True |
Images
Name | Type | Description |
---|---|---|
image_w288_h125 | String | URL to the image with width of 288px and height of 125px |
image_w200_h200 | String | URL to the image with width of 200px and height of 200px |
image_w288_h204 | String | URL to the image with width of 288px and height of 204px |
image_w345_h237 | String | URL to the image with width of 345px and height of 237px |
image_w446_h300 | String | URL to the image with width of 466px and height of 300px |
image_w1600_h300 | String | URL to the image with width of 1600px and height of 300px |
images_w750_h340 | String | URL to the image with width of 750px and height of 340px |
Sale periods
Name | Type | Description |
---|---|---|
end | String | End date and time of the sale |
start | String | Start date and time of the sale |
Get Tour Availability
$ curl -X POST "https://sandbox.coras.io/v2/tours/availability" \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
-d '{"attraction_id": "08e36beb3acadc1e69823b4d67aea83d",
"date": 2019-01-01,
"language_code": "en",
"currency": "EUR",
"tickets": [{
"price_type_id": "6ca2ffe69a88f2bd02f6a35203b424fa",
"number_of_tickets": 2
}, {
"price_type_id": "4dc8aef85a0dd10cb2f9b0ae206f274f",
"number_of_tickets": 1
}]}'
[
{
"available": true,
"selection_id": "ZitVdTZOTjBWWVUwVGJ1VDhuby9JK3kyYUFjNzZHM3B1djRqWm9ldnE5SVRLU1FVYkdIV1BackJqYjNqZ2RlaQ==",
"name": "11:15 AM Departure",
"description": null,
"timezone": "Europe/London",
"start_datetime": "2019-01-01T11:15:00+00:00",
"end_datetime": "2019-01-01T13:15:00+00:00",
"full_day": false,
"languages_spoken": {
"en/SERVICE_WRITTEN": "English - Written",
"en/SERVICE_AUDIO": "English - Audio"
},
"min_booking_fee": {
"EUR": 0,
"GBP": 0,
"PLN": 0
},
"min_full_price": {
"EUR": 21600,
"GBP": 19452,
"PLN": 94560
},
"max_booking_fee": {
"EUR": 0,
"GBP": 0,
"PLN": 0
},
"max_full_price": {
"EUR": 21600,
"GBP": 19452,
"PLN": 94560
},
"prices": [
{
"price_type_id": "6ca2ffe69a88f2bd02f6a35203b424fa",
"price_type_name": "Adult",
"description": "",
"agerange_min": 12,
"agerange_max": 100,
"can_be_guardian": true,
"require_guardian": false,
"min_booking_fee": {
"EUR": 0,
"GBP": 0,
"PLN": 0
},
"min_full_price": {
"EUR": 5900,
"GBP": 5313,
"PLN": 25829
},
"max_booking_fee": {
"EUR": 0,
"GBP": 0,
"PLN": 0
},
"max_full_price": {
"EUR": 5900,
"GBP": 5313,
"PLN": 25829
},
"number_of_tickets": 2,
"price": {
"EUR": 5900,
"GBP": 5313,
"PLN": 25829
}
},
{
"price_type_id": "4dc8aef85a0dd10cb2f9b0ae206f274f",
"price_type_name": "Child",
"description": "3-11",
"agerange_min": 4,
"agerange_max": 11,
"can_be_guardian": false,
"require_guardian": false,
"min_booking_fee": {
"EUR": 0,
"GBP": 0,
"PLN": 0
},
"min_full_price": {
"EUR": 4900,
"GBP": 4413,
"PLN": 21451
},
"max_booking_fee": {
"EUR": 0,
"GBP": 0,
"PLN": 0
},
"max_full_price": {
"EUR": 4900,
"GBP": 4413,
"PLN": 21451
},
"number_of_tickets": 2,
"price": {
"EUR": 4900,
"GBP": 4413,
"PLN": 21451
}
}
],
"price_types_required": null,
"pickup_points": []
},
{
"available": false,
"selection_id": null,
"name": "7:15 PM Departure",
"description": null,
"timezone": "Europe/London",
"start_datetime": "2019-01-01T19:45:00+00:00",
"end_datetime": "2019-01-01T21:45:00+00:00",
"full_day": false,
"languages_spoken": {
"en/SERVICE_WRITTEN": "English - Written",
"en/SERVICE_AUDIO": "English - Audio"
},
"min_booking_fee": {
"EUR": 0,
"GBP": 0,
"PLN": 0
},
"min_full_price": {
"EUR": 21600,
"GBP": 19452,
"PLN": 94560
},
"max_booking_fee": {
"EUR": 0,
"GBP": 0,
"PLN": 0
},
"max_full_price": {
"EUR": 21600,
"GBP": 19452,
"PLN": 94560
},
"prices": null,
"price_types_required": [
[
{
"price_type_id": "6ca2ffe69a88f2bd02f6a35203b424fa",
"min_count_required": 4,
"max_count_required": null,
"price_type_name": "Adult"
},
{
"price_type_id": "4dc8aef85a0dd10cb2f9b0ae206f274f",
"min_count_required": 0,
"max_count_required": 15,
"price_type_name": "Child"
}
]
],
"pickup_points": [
{
"pickup_address": null,
"pickup_name": "I don't see my pick up location",
"geolocation_point": null,
"pickup_description": "",
"coras_pickup_id": "notListed",
"postcode": null
},
{
"pickup_address": "Agiou Konstantinou 31",
"pickup_name": "Achillion",
"geolocation_point": [
23.72419,
37.984771
],
"pickup_description": "",
"coras_pickup_id": "6387574fc0c696c6579bfc18bdbfa224",
"postcode": "10437, Athens"
},
{
"pickup_address": "87-89 Alexandras Ave",
"pickup_name": "Zafolia Hotel",
"geolocation_point": [
23.732533,
37.947574
],
"pickup_description": "",
"coras_pickup_id": "906b3e946cb5d3a5436b9cd843b8259b",
"postcode": "11474, Athens"
}
]
}
]
Returns available options for a given tour, date and ticket configuration. Price per ticket might differ depending on the traveller mix.
Request
POST https://sandbox.coras.io/v2/tours/availability
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Body Arguments
Name | Type | Required | Description |
---|---|---|---|
attraction_id | String | Yes | Attraction ID. Maximum length is 36 characters |
currency | String | No | Supported currency |
date | String | Yes | Date to search in following format: YYYY-MM-DD, e.g. 2019-03-12 |
language_code | String | No | Selected language (default: en ) |
tickets | List | Yes | Tickets configuration |
Tickets Argument
Name | Type | Required | Description |
---|---|---|---|
number_of_tickets | Integer | Yes | Number of requested tickets |
price_type_id | String | Yes | Price type ID |
Response
List of available options
Options
Name | Type | Description |
---|---|---|
available | Boolean | Indicates if a given option is available for booking |
description | String (nullable) | Option description |
end_datetime | String (nullable) | Option end date and time (null if full_day is true ) |
full_day | Boolean | Information if given option activities take whole day |
languages_spoken | Object | Possible languages to choose (mapping of key to localized string) |
max_booking_fee | Price | Maximum fee per traveller mix for current distributor |
max_full_price | Price | Maximum price per traveller mix (maximum booking fee + price) for current distributor |
min_booking_fee | Price | Minimum booking fee per traveller mix for current distributor |
min_full_price | Price | Minimum price per traveller mix (minimum booking fee + price) for current distributor |
name | String | Name of the option |
pickup_points | List of Pickup points | Pickup points in alphabetical order (notListed first if applicable) |
price_types_required | List of Price Types Required (nullable) | Traveler mix requirements (null if available is true ) |
prices | List of Price Types (nullable) | Pricing based on provided traveller mix (null if available is false ) |
selection_id | String (nullable) | Option ID to be used during booking process |
start_datetime | String | Option start date and time |
timezone | String | Timezone |
Price Type
These are in fact Price Types obtained from Get Tour attraction extended with pricing information:
Name | Type | Description |
---|---|---|
agerange_max | Integer | Years. If blank, assume is adult |
agerange_min | Integer | Years. i.e. Senior will have agerange_min=65 |
can_be_guardian | Boolean | Whether ticket can be bought together with type require_guardian=True |
description | String | Optional price type description |
max_booking_fee | Price | Maximum booking fee per ticket for current distributor |
max_full_price | Price | Maximum price per ticket (maximum booking fee + face value) for current distributor |
min_booking_fee | Price | Minimum booking fee per ticket for current distributor |
min_full_price | Price | Minimum price per ticket (minimum booking fee + face value) for current distributor |
number_of_tickets | Integer | Number of tickets provided with the request for given type |
price | Price | Face value price per ticket |
price_type_id | String | Price type ID |
price_type_name | String | Price type name, e.g. Adult |
require_guardian | Boolean | Whether ticket can be bought with ticket type can_be_guardian=True |
Price Types Required
Traveler mix requirements listed so that the customer can elect to alter their ticket configuration to suit - this feature is available only for some tours (for unavailable options not supporting this feature, it will be an empty list).
Each element of price_types_required
is a list of following objects:
Name | Type | Description |
---|---|---|
max_count_required | Integer (nullable) | Maximum number of tickets required |
min_count_required | Integer | Minimum number of tickets required |
price_type_id | String | Price type ID |
price_type_name | String | Price type name |
NOTE: Bear in mind that min_booking_size
and max_booking_size
from
Tour endpoint also have to be satisfied.
Pickup Points
Some tour attractions offer a list of pickup points such as hotels and bus stops
(refer to pickup_available
and pickup_required
fields from
Tour endpoint response).
For tours with pickup_on_request: true
the first entry on the list will
be a manual pickup point with coras_pickup_id
set to notListed
. It requires
an input field to be shown to the user, so he can provide the details
of the pickup location. Its value should be sent under pickup_entry
field
when reserving the tickets.
NOTE: choosing notListed
pickup point does not guarantee that the custom
location will be accepted by the ticket provider.
Name | Type | Description |
---|---|---|
coras_pickup_id | String | Identifier of the pickup |
geolocation_point | List | Geo-point expressed as an array with the format: [lon, lat] |
pickup_address | String | Pickup address (joined with \n if multiline) |
pickup_description | String | Any extra information for the client, e.g. “Meet in the reception lounge” |
pickup_name | String | Text name for the pickup point (e.g. a hotel or bus stop) |
postcode | String | Postcode and city |
Reservations
Reserve Theater Tickets
# Theater Attraction example
$ curl -X POST https://sandbox.coras.io/v2/theater-events/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-d '{"attraction_id": "54d07c194cc410e6325d9535d86c036d",
"instance_id": 212705,
"language_code": "en",
"tickets": [{
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"number_of_tickets": 2,
"booking_fee": 300,
"seats": []
}],
"to_basket": false
}'
{
"reservation_id": "7a7216e7509d4f1eba24135ef4757fb1",
"seat_range": "E21 - E22",
"ticket_delivery_method": 0,
"tickets": [
{
"attendee_filled": false,
"attendee_required": false,
"ticket_id": "28594a27-d624-48b7-9877-7905e94a1db2",
"booking_fee": 300,
"coras_seat_id": "5ee5667f409bda4c88fa83fc58f030711eddb793",
"description": "",
"full_price": 3300,
"name": "Full Price",
"price": 3000,
"price_category": "Band A",
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"restricted_view_description": "has a slightly restricted view",
"row_id": 92,
"row_name": "E",
"seat_id": 1,
"seat_name": "E21",
"seat_number": "21",
"seatsio_seat_id": "BALCONY-E-21",
"section": "Balcony",
"section_id": null,
"is_general_admission": false
},
{
"attendee_filled": false,
"attendee_required": false,
"ticket_id": "12523a54-v254-56s4-5846-7896e65d2fg5",
"booking_fee": 300,
"coras_seat_id": "d58b75b3746d84bdb0193eae44b4e9e5d9a612c4",
"description": "",
"full_price": 3300,
"name": "Full Price",
"price": 3000,
"price_category": "Band A",
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"restricted_view_description": "has a slightly restricted view",
"row_id": 92,
"row_name": "E",
"seat_id": 2,
"seat_name": "E22",
"seat_number": "22",
"seatsio_seat_id": "BALCONY-E-22",
"section": "Balcony",
"section_id": null,
"is_general_admission": false
}
]
}
# Reservation cannot be created for the given attraction because there are already
# other reservations in the basket that are not compatible.
$ curl -X POST https://sandbox.coras.io/v2/theater-events/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-d '{"attraction_id": "54d07c194cc410e6325d9535d86c036d",
"instance_id": 212705,
"language_code": "en",
"tickets": [{
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"number_of_tickets": 2,
"booking_fee": 300,
"seats": []
}],
"to_basket": false
}'
{
"title": "400 Bad Request",
"description": "Attractions cannot be purchased together within the same transaction",
"code": 36,
"timestamp": "2024-02-06T14:24:02.172544+00:00",
"exception_id": "965dc1ac60d244b9b9a837a841e45fdd",
"request_id": "4351f39722a94630aaa64613359d1750"
}
$ curl -X POST https://sandbox.coras.io/v2/theater-events/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-d '{"currency": "EUR",
"tickets": [
{
"number_of_tickets": 1,
"booking_fee": 6521,
"price_type_id": "3c629b86eb8a9c930956d5bffb2e8428"
},
{
"number_of_tickets": 1,
"booking_fee": 6521,
"price_type_id": "640997c8a95122b1b4549806985c5d90"
}
],
"attraction_id": "d57b83b08c74c5fbeda466d5a96b9e3e",
"instance_id": "acf87476f3ce51ca70423f464f51d257",
"language_code": "en",
}'
{
"title": "Multipurchase not supported",
"description": "d57b83b08c74c5fbeda466d5a96b9e3e does not support purchase of tickets from more than one price band. Please create separate reservation for tickets from each price band.",
"code": 2,
"timestamp": "2024-02-06T14:28:08.042055+00:00",
"exception_id": "696ef916e2d54feaa901c5e97093badd",
"request_id": "5c0c0b34c73247d398266f9b7ea940c8"
}
Reserves a given number of tickets for a given performance and price band, and adds them to a booking session.
Request
POST https://sandbox.coras.io/v2/theater-events/reservations
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Body Arguments
Name | Type | Required | Description |
---|---|---|---|
attraction_id | String | Yes | Attraction ID. Maximum length is 36 characters |
currency | String | Yes | Supported currency |
instance_id | String | Yes | Theater instance ID or Tour instance ID |
language_code | String | No | Selected language (default: en ) |
tickets | List | Yes | List of tickets to be reserved |
to_basket | Boolean | No | Indicates if reservation should be automatically added to the basket. True by default. |
Theater Tickets Argument
Name | Type | Required | Description |
---|---|---|---|
price_type_id | String | Yes | Price type ID - specifies ticket type |
seats | List of String | No | List of unique seats ID. IDs can be obtained from Seats |
number_of_tickets | Integer | Yes | Number of requested tickets |
booking_fee | Integer | Yes | Custom booking fee which have to be in range returned by previous API calls |
Response
Name | Type | Description |
---|---|---|
reservation_id | String | Unique ID per reservation |
seat_range | String | Seat range - DEPRECATED |
ticket_delivery_method | Integer | Ticket Delivery Method ID |
tickets | List of Tickets | List of prebooked tickets |
Ticket
Name | Type | Description |
---|---|---|
attendee_filled | Boolean | Indicates if attendee data has been already provided for the ticket |
attendee_required | Boolean | Indicates if attendee data must be provided for the ticket |
booking_fee | Integer | Booking fee value |
coras_seat_id | String | Seat ID |
description | String | Description of the seat |
full_price | Integer | Price including booking fee |
is_general_admission | Boolean | Indicates if the section is in a general admission scheme which means the section is most likely seat-less or seats are not pre-assigned. Location from which customer will watch the event is determined upon arrival at the venue. |
name | String | Name assign to price i.e. Adult |
price | Integer | Base price |
price_type | String | Matches price_type in Price Types |
price_category | String | Matches price_category in Price Bands |
price_type_id | String | Price type ID |
restricted_view_description | String | Short description about restricted view |
row_id | Integer | Row ID DEPRECATED |
row_name | String | Row label DEPRECATED |
seat_id | Integer | Seat number index DEPRECATED |
seat_name | String | Seat number DEPRECATED |
seat_number | Integer | Seat number DEPRECATED |
seatsio_seat_id | String | The seats.io seat ID |
section | String | Section name |
section_id | String | Section ID DEPRECATED |
ticket_id | String | ID of the ticket |
Summary for Theater
Returns a summary of active (theater) reservations for a given booking session.
# Theater Attraction example
$ curl -X GET https://sandbox.coras.io/v2/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"reservations": [
{
"attraction_id": "54d07c194cc410e6325d9535d86c036d",
"attraction_name": "THRILLER LIVE",
"attraction_type_id": 1,
"city": "London",
"currency": "GBP",
"end_datetime": "",
"is_seatsio_reservation": false,
"images": {
"image_w96_h96": "",
"image_w153_h121": "",
"image_w200_h200": "",
"image_w264_h125": "",
"image_w304_h88": "",
"image_w288_h125": "",
"image_w124_h124": "",
"image_w288_h204": "",
"image_w279_h213": "",
"image_w304_h81": "",
"image_w345_h237": ""
},
"location_name": "Lyric Theatre",
"number_of_tickets": 2,
"reservation_id": "7a7216e7509d4f1eba24135ef4757fb1",
"start_datetime": "2018-07-24T18:30:00+00:00",
"ticket_delivery_method": 1,
"tickets": [
{
"ticket_id": "28594a27-d624-48b7-9877-7905e94a1db2",
"booking_fee": 300,
"coras_seat_id": "5ee5667f409bda4c88fa83fc58f030711eddb793",
"description": "",
"full_price": 3300,
"name": "Full Price",
"price": 3000,
"price_category": "Band A",
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"restricted_view_description": "has a slightly restricted view",
"row_id": 92,
"row_name": "E",
"seat_id": 1,
"seat_name": "E21",
"seat_number": "21",
"seatsio_seat_id": "BALCONY-E-21",
"section": "Balcony",
"section_id": null,
"is_general_admission": false
},
{
"ticket_id": "12523a54-v254-56s4-5846-7896e65d2fg5",
"booking_fee": 300,
"coras_seat_id": "d58b75b3746d84bdb0193eae44b4e9e5d9a612c4",
"description": "",
"full_price": 3300,
"name": "Full Price",
"price": 3000,
"price_category": "Band A",
"price_type": "Full Price",
"price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN",
"restricted_view_description": "has a slightly restricted view",
"row_id": 92,
"row_name": "E",
"seat_id": 2,
"seat_name": "E22",
"seat_number": "22",
"seatsio_seat_id": "BALCONY-E-22",
"section": "Balcony",
"section_id": null,
"is_general_admission": false
}
],
"timezone": "Europe/London",
"total_price": 6600
}
],
"total_price": 6600
}
Request
GET http://sandbox.coras.io/v2/reservations
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Querystring parameters
Name | Type | Required | Description |
---|---|---|---|
language_code | String | No | Selected language (default: en ) |
Response
Name | Type | Description |
---|---|---|
reservations | List of Reservations | List of active reservations |
total_price | Integer | Combined price of all active reservations (in minor units, eg. cents or pence) |
Reservation
Name | Type | Description |
---|---|---|
attraction_id | String | Attraction ID |
attraction_name | String | Attraction title |
attraction_type_id | Integer | Type of the attractions to return. See more about attraction types |
city | String | Location city |
currency | String | Supported currency |
end_datetime | String | Datetime when attraction ends |
images | List of Image | Attraction images |
is_seatsio_reservation | Boolean | A flag indicating whether a purchase was made using the seat map |
location_name | String | Location name. Maximum length is 64 characters |
number_of_tickets | Integer | Number of prebooked tickets |
reservation_id | String | Unique ID per reservation |
start_datetime | String | Datetime when attraction starts |
ticket_delivery_method | Integer | Ticket Delivery Method ID |
tickets | List of Tickets | List of pre-booked tickets |
timezone | String | Attraction timezone |
total_price | Integer | Total price of all tickets in reservation (in minor units, eg. cents or pence) |
Ticket Delivery Methods
ID | Description |
---|---|
0 | A ticket for pickup at the ticket office |
1 | An electronic ticket sent by mail as an attachment (Ticket generated by Coras) |
2 | An electronic ticket attached to a message sent separately by the event provider |
3 | An electronic ticket sent by mail as an attachment (Ticket generated by event provider) |
4 | An electronic ticket sent by mail as an attachment 48 hours before the event |
5 | An electronic ticket sent by mail as a link to download |
Reserve Tour Tickets
# Tour Attraction example
$ curl -X POST https://sandbox.coras.io/v2/tours/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-d '{"attraction_id": "08e36beb3acadc1e69823b4d67aea83d",
"date": "2019-01-01",
"language_code": "en",
"currency": "EUR",
"selection_id": "ZitVdTZOTjBWWVUwVGJ1VDhuby9JK3kyYUFjNzZHM3B1djRqWm9ldnE5SVRLU1FVYkdIV1BackJqYjNqZ2RlaQ==",
"tickets": [{
"price_type_id": "6ca2ffe69a88f2bd02f6a35203b424fa",
"number_of_tickets": 2,
"booking_fee": 0
}, {
"price_type_id": "4dc8aef85a0dd10cb2f9b0ae206f274f",
"number_of_tickets": 1,
"booking_fee": 0
}],
"to_basket": true,
"tour_language": "en/SERVICE_WRITTEN",
"pickup_id": "notListed",
"pickup_entry": "Mercure Hotel, Roosevelta 20, 60-829 Poznan"
}'
{
"selection_name": "11:15 AM Departure",
"tickets": [
{
"ticket_id": "746c9eda-ca35-4a15-aaf7-c43a5c85314e",
"price": 5035,
"full_price": 5035,
"booking_fee": 0,
"age_category": "adult",
"price_type_id": 1,
"description": "",
"name": "Adult"
},
{
"ticket_id": "15284859-84db-4a19-835d-430e0bbdb03e",
"price": 5035,
"full_price": 5035,
"booking_fee": 0,
"age_category": "adult",
"price_type_id": 1,
"description": "",
"name": "Adult"
},
{
"ticket_id": "6102c6bd-8885-44c2-8ebb-4830db0e221a",
"price": 4367,
"full_price": 4367,
"booking_fee": 0,
"age_category": "senior",
"price_type_id": 5,
"description": "",
"name": "Senior"
}
],
"start_datetime": "2019-03-02T08:00:00+00:00",
"end_datetime": null,
"timezone": "Europe/London",
"reservation_id": "15b4347a75954f1c88bf5c69a3ba8b10",
"ticket_delivery_method": 1,
"selection_description": null,
"city": "London",
"tour_language": "English - Written",
"attraction_name": "The Total London Experience with Free Lunch Pack",
"full_day": false
}
# Reservation cannot be created for the given attraction because there are already
# other reservations in the basket that are not compatible.
$ curl -X POST https://sandbox.coras.io/v2/tours/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-d '{"attraction_id": "08e36beb3acadc1e69823b4d67aea83d",
"date": "2019-01-01",
"language_code": "en",
"currency": "EUR",
"selection_id": "ZitVdTZOTjBWWVUwVGJ1VDhuby9JK3kyYUFjNzZHM3B1djRqWm9ldnE5SVRLU1FVYkdIV1BackJqYjNqZ2RlaQ==",
"tickets": [{
"price_type_id": "6ca2ffe69a88f2bd02f6a35203b424fa",
"number_of_tickets": 2,
"booking_fee": 0
}, {
"price_type_id": "4dc8aef85a0dd10cb2f9b0ae206f274f",
"number_of_tickets": 1,
"booking_fee": 0
}],
"to_basket": true,
"tour_language": "en/SERVICE_WRITTEN",
"pickup_id": "notListed",
"pickup_entry": "Mercure Hotel, Roosevelta 20, 60-829 Poznan"
}'
{
"title": "400 Bad Request",
"description": "Attractions cannot be purchased together within the same transaction",
"code": 36,
"timestamp": "2024-02-06T14:24:02.172544+00:00",
"exception_id": "965dc1ac60d244b9b9a837a841e45fdd",
"request_id": "4351f39722a94630aaa64613359d1750"
}
From Tour Availability select one option for a given number of tickets for given tour instance, and adds them to a booking session.
Request
POST https://sandbox.coras.io/v2/tours/reservations
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Body Arguments
Name | Type | Required | Description |
---|---|---|---|
attraction_id | String | Yes | Tour attraction ID. Maximum length is 36 characters |
currency | String | Yes | Supported currency |
date | String | Yes | Date to search in following format: YYYY-MM-DD, e.g. 2019-03-12 |
language_code | String | No | Selected language (default: en ) |
tickets | List of Tickets | Yes | List of tickets to be reserved |
to_basket | Boolean | No | Indicates if reservation should be automatically added to the basket. True by default. |
tour_language | String | No | The language used during the trip, e.g. the language used by the guide |
pickup_id | String | Yes/No | ID of the chosen pickup point (refer to Pickup Points section) |
pickup_entry | String | Yes/No | Details of the custom pickup location chosen. Must be provided only if notListed pickup has been chosen. |
selection_id | String | Yes | Option ID to be used during booking process, should be taken from Get Tour Availability endpoint |
Tour Tickets Argument
Name | Type | Required | Description |
---|---|---|---|
price_type_id | String | Yes | Price type ID. This specifies ticket type required. |
number_of_tickets | Integer | Yes | Number of requested tickets |
booking_fee | Integer | Yes | Custom booking fee which have to be in range returned by previous API calls |
Response
Name | Type | Description |
---|---|---|
attraction_name | String | Attraction name. Maximum length is 250 characters |
city | String | City name |
full_day | Boolean | Information if current departure activities takes whole day |
reservation_id | String | Reservation ID |
selection_description | String | Given option description |
selection_name | String | Name of the option |
start_datetime | String | The start date and time of attraction in the selected option. (ISO 8601) |
end_datetime | String | The end date and time of attraction in the selected option. (ISO 8601) |
ticket_delivery_method | Integer | Ticket Delivery Method ID |
tickets | List of Tour Tickets | List of reserved tickets |
timezone | String | Timezone |
tour_language | String (nullable) | The language used during the trip, e.g. the language used by the guide |
Tour Tickets
Name | Type | Description |
---|---|---|
age_category | String | Describes ticket age category |
attendee_filled | Boolean | Indicates if attendee data has been already provided for the ticket |
attendee_required | Boolean | Indicates if attendee data must be provided for the ticket |
booking_fee | Integer | Fees per ticket in selected currency |
description | String | Short description in selected language |
full_price | Integer | Full amount due for the ticket in selected currency |
name | String | Ticket type name in selected language |
price | Integer | Base price per ticket in selected currency |
price_type_id | String | Price type ID |
ticket_id | String | Ticket ID |
Summary for Tour
Returns a summary of active tour reservations for a given booking session.
# Tour Attraction example
$ curl -X GET https://sandbox.coras.io/v2/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"reservations": [
{
"attraction_id": "08e36beb3acadc1e69823b4d67aea83d",
"attraction_name": "The Total London Experience with Free Lunch Pack",
"attraction_type_id": 2,
"city": "London",
"currency": "EUR",
"departure_notes": "English",
"end_datetime": "2018-07-25T17:00:00+00:00",
"full_day": false,
"images": {
"image_w200_h200": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=200&h=200&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w1600_h300": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=1600&h=300&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w288_h204": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=204&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w288_h125": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=288&h=125&fit=crop&crop=edges&auto=format,enhance,compress",
"image_w446_h300": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=446&h=300&fit=crop&crop=edges&auto=format,enhance,compress",
"images_w750_h340": [
"https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/675dd6eb-95f0-5fca-aa37-8a245069e089.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/131a7d8e-d2bf-511e-9b21-0fd56a048e6a.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/f6822249-1973-5095-bf04-7d7489aca3a5.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress",
"https://coras-local.imgix.net/images/dd83f806-9e16-5ed1-b054-58250dc81508.jpg?w=750&h=340&fit=crop&crop=edges&auto=format,enhance,compress"
],
"image_w345_h237": "https://coras-local.imgix.net/images/9591c55d-4511-570c-a7dd-4129f01adcc1.jpg?w=345&h=237&fit=crop&crop=edges&auto=format,enhance,compress"
},
"location_name": "",
"number_of_tickets": 3,
"reservation_id": "06a8d4c2d2f74328ad9df6f2a8c8b0d7",
"selection_name": "Victoria departure point",
"start_datetime": "2018-07-25T06:30:00+00:00",
"ticket_delivery_method": 0,
"tickets": [
{
"ticket_id": "746c9eda-ca35-4a15-aaf7-c43a5c85314e",
"price": 5035,
"full_price": 5035,
"booking_fee": 0,
"age_category": "adult",
"price_type_id": 1,
"description": "",
"name": "Adult"
},
{
"ticket_id": "15284859-84db-4a19-835d-430e0bbdb03e",
"price": 5035,
"full_price": 5035,
"booking_fee": 0,
"age_category": "adult",
"price_type_id": 1,
"description": "",
"name": "Adult"
},
{
"ticket_id": "6102c6bd-8885-44c2-8ebb-4830db0e221a",
"price": 4367,
"full_price": 4367,
"booking_fee": 0,
"age_category": "senior",
"price_type_id": 5,
"description": "",
"name": "Senior"
}
],
"pickup_point": {
"coras_pickup_id": "b7e7b4c6716a9f35a704d3bbf34afe16",
"pickup_name": "London Heathrow Airport, Terminal 1",
"pickup_description": "Your driver will have a sign with your name on. If you cannot see your sign, meet your driver at the airport information desk.",
"pickup_address": "London Heathrow Airport, Longford TW6,",
"postcode": "TW6 1AP",
"geolocation_point": [-0.182063, 51.153662],
"pickup_entry": null
},
"timezone": "Europe/London",
"total_price": 40612,
"tour_language": "English guid"
}
],
"total_price": 40612
}
Request
GET http://sandbox.coras.io/v2/reservations
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
language_code | String | No | Selected language (default: en ) |
Response
Name | Type | Description |
---|---|---|
reservations | List of Tour Reservations | List of active reservations |
total_price | Integer | Combined price of all active reservations (in minor units, eg. cents or pence) |
Tour Reservations
Name | Type | Description |
---|---|---|
attraction_id | String | Show or tour ID |
attraction_name | String | Show title or name of tour |
attraction_type_id | Integer | Type of the attractions to return. See more about attraction types |
city | String | Venue or location city |
currency | String | Supported currency |
departure_notes | String | Additional departure information |
end_datetime | String | Datetime when attraction ends |
full_day | Boolean | Information if current departure activities takes whole day |
images | List of Images | Attraction images |
location_name | String | Location name. Maximum length is 64 characters |
number_of_tickets | Integer | Number of prebooked tickets |
pickup_point | Pickup Points | Information about chosen pickup point |
reservation_id | String | Unique ID per reservation |
selection_name | String | Name of the selected option |
start_datetime | String | Datetime when attraction starts |
ticket_delivery_method | Integer | Ticket Delivery Method ID |
tickets | List of Tour Tickets | List of pre-booked tickets |
timezone | String | Timezone |
total_price | Integer | Total price of all tickets in reservation (in minor units, eg. cents or pence) |
tour_language | String | The language used during the trip, e.g. the language used by the guide |
Confirm Reservations (SCA ready)
Confirm in-basket reservations associated with the given booking session. At the moment, payment for Coras tickets is only supported via Stripe.
$ curl -X PUT https://sandbox.coras.io/v2/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223" \
-d '{"email": "jon.snow@example.com",
"first_name": "Jon",
"phone_number": "111-222-333",
"reservations": [
"7a7216e7509d4f1eba24135ef4757fb1"
],
"second_name": "Snow"}'
{
"transaction_id": "123406179e47a6a8f06f6c486abcde",
"user_id": "6123c32027abcd2ac07c4c5a887abcd",
"client_secret": "pi_1FAB04K10yRCtOElcyFjdy6r_secret_0RvQ10CfZC3FnJJo047OJIDMH"
}
You will need Stripe publishable key provided to you offline by a Coras account manager.
Collect card details. See an example of how you can collect card details on the client here. However, using Stripe Elements is optional as you can generate the PaymentMethod on your server using one of Stripe API library (e.g. Stripe Python) and pass the PaymentMethod ID to the stripe.handleCardPayment call in step 3.
Call this endpoint to generate the
client_secret
that you will need to confirm the payment intent in the next step.Use stripe.handleCardPayment to confirm the payment intent and trigger a 3D Secure authentication challenge whenever necessary.
You have to retry step 3. until the status of the PaymentIntent received from the response is
requires_capture
. If the customer’s card was denied or he didn’t pass the 3D Secure authentication challenge, the status remains asrequires_payment_method
.Poll for the transaction status
Manually handling 3D Secure authentication with redirect
To handle 3D Secure authentication manually, you can embed the 3D Secure
authentication UI into your payment flow as an <iframe>
to a url provided
by Stripe or redirect the customer.
- Just use stripe.confirmPaymentIntent
instead in step 3 of the previous instruction. Provide
return_url
as the return path for the redirect and handle next actions yourself.
Payment confirmation process is asynchronous
Poll for the transaction status by calling Get User Transactions endpoint.
If the status is "SUSPENDED"
it means there was something wrong with the card
or the 3D Secure authentication failed. See how to retry the payment process here (IN PROGRESS).
User ID
During the process of the ticket booking confirmation if the user ID is not assigned to a booking session, a new user ID is created. The user ID is a part of URL returned by confirm reservation endpoint.
Request
PUT https://sandbox.coras.io/v2/reservations
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Body Arguments
Name | Type | Required | Description |
---|---|---|---|
String | Yes | Customer email address | |
first_name | String | Yes | Customer first name |
phone_number | String | Yes | Customer phone number |
reservations | List of String | Yes | IDs of reservations in the basket |
attendees | List of Attendee | No | List of attendees |
second_name | String | Yes | Customer second name |
phone_number_verification_code | Integer | Required if any reservation is for attraction with attribute phone_number_verification_required set to true |
Verification code received via SMS message upon calling Phone Number Verification |
Response
Name | Type | Description |
---|---|---|
transaction_id | String | Unique ID per transaction |
user_id | String | Unique ID per user |
client_secret | String | PaymentIntent client_secret to use within Stripe.js |
Remove all reservations
Removes all reserved tickets from a booking session.
$ curl -X DELETE https://sandbox.coras.io/v2/reservations \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
Request
DELETE https://sandbox.coras.io/v2/reservations
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Response
HTTP 204
status code when reservations were remove
Remove single reservation
Removes one of the reserved tickets from a booking session.
$ curl -X DELETE https://sandbox.coras.io/v2/reservations/7a7216e7509d4f1eba24135ef4757fb1 \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
Request
DELETE https://sandbox.coras.io/v2/reservations/{reservation_id}
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
reservation | String | Yes | Reservation ID |
Response
HTTP 204
status code when reservation was remove
HTTP 404
status code when reservation timeouted
Mark Reservation as “in basket”
This endpoint marks selected offer as “in basket”
$ curl -X PUT https://sandbox.coras.io/v2/reservations/7a7216e7509d4f1eba24135ef4757fb1 \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
Request
PUT https://sandbox.coras.io/v2/reservations/{reservation_id}
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
reservation_id | String | Yes | Reservation ID |
Output
HTTP 204
status code when ‘in_basket’ status was successfully set
HTTP 404
status code when no reservation was found for provided reservation ID
Attendees
Add attendees to tickets
$ curl -X POST https://sandbox.coras.io/v2/attendees \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-d '{"attendees": [{
"ticket_id": "9363d8f6-2602-4703-aa5e-f3a02d1f7f61",
"first_name": "Jon",
"second_name": "Snow",
"id_number": "PERSONAL-ID-NUMBER"
}]}'
If attraction details obtained from either of the following endpoints - Get Theater attraction - Get Tour attraction
contain mandatory_attendee
field set to true
, you must supply additional
information about each traveller after reserving the tickets, but before
confirming the reservation.
Request
POST https://sandbox.coras.io/v2/attendees
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Body Arguments
Name | Type | Required | Description |
---|---|---|---|
attendees | List | Yes | List of attendees |
Attendees Argument
Name | Type | Required | Description |
---|---|---|---|
city | String | Attraction-dependent. Take a look at tour or event | The attendee’s city of residence. Maximum length is 100 characters |
country_code | Country Code | Attraction-dependent. Take a look at tour or event | The attendee’s country code of residence |
date_of_birth | String | Attraction-dependent. Take a look at tour or event | The attendee’s date of birth (YYYY-MM-DD) |
String | Attraction-dependent. Take a look at tour or event | The attendee’s email. | |
first_name | String | Attraction-dependent. Take a look at tour or event | The attendee’s first name. Maximum length is 100 characters |
gender | String | Attraction-dependent. Take a look at tour or event | The attendee’s gender. Valid values: “M” (“Male”) and “F” (“Female”) |
id_number | String | Attraction-dependent. Take a look at tour or event | The attendee’s ID or passport number. Maximum length is 50 characters |
phone_number | String | Attraction-dependent. Take a look at tour or event | The attendee’s phone number. The E.164 format is expected. |
province | String | Attraction-dependent. Take a look at tour or event | The attendee’s province. Maximum length is 50 characters |
second_name | String | Attraction-dependent. Take a look at tour or event | The attendee’s second name. Maximum length is 100 characters |
ticket_id | Integer | Yes | Ticket ID. |
Update attendees
$ curl -X PUT https://sandbox.coras.io/v2/attendees \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-d '{"attendees": [{
"ticket_id": "9363d8f6-2602-4703-aa5e-f3a02d1f7f61",
"first_name": "Jon",
"second_name": "Snow",
"id_number": "PERSONAL-ID-NUMBER"
}]}'
Update attendees data of selected tickets.
Request
POST https://sandbox.coras.io/v2/attendees
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Body Arguments
Name | Type | Required | Description |
---|---|---|---|
attendees | List | Yes | List of attendees |
Transactions
Get User Transactions
Returns a list of a user’s transactions including their status.
$ curl -X GET "https://sandbox.coras.io/v2/users/ba35b0d5e2fc4928b960a1ce18cad23f/transactions" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223" \
[
{
"created_at": "2017-05-12 07:20:49.380048",
"reference_id": "QSO74ABC",
"status": "ADDED",
"transaction_id": "c7bdb46d1da34855bb697164b6830295"
},
{
"created_at": "2017-04-03 09:34:23.823798",
"reference_id": "QS123ABC",
"status": "PAID",
"transaction_id": "f78535c3d2494c20b01a8b7e9f31e32f"
},
{
"created_at": "2017-03-19 07:08:33.328081",
"reference_id": "Q0423ABC",
"status": "PAID",
"transaction_id": "0f3eba74169a4610b447edc5187c393b"
},
{
"created_at": "2017-03-06 10:12:35.378993",
"reference_id": "QS123DEF",
"status": "PAID",
"transaction_id": "1462744c91354174afb98794c6777490"
}
]
Request
GET https://sandbox.coras.io/v2/users/{user_id}/transactions
Headers
Header | Type | Required | Description |
---|---|---|---|
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Arguments
Name | Type | Required | Description |
---|---|---|---|
user_id | String | Yes | Unique ID of the user |
Response
User transactions
Name | Type | Description |
---|---|---|
created_at | String | Date and time |
reference_id | String | Unique ID that will be presented on the user’s ticket |
status | String | Transaction status (ADDED, PENDING, SUSPENDED, PAID, FAILED, REFUNDED, PARTIAL_REFUNDED) |
transaction_id | String | Unique ID of the transaction |
Phone Number Verification
Dispatches an SMS message to the provided phone number with a unique code required to confirm reservation(s)
$ curl -X POST https://sandbox.coras.io/v2/phone-number-verification \
-H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223" \
-d '{"phone_number": "+111-222-333"}'
Request
POST https://sandbox.coras.io/v2/phone-number-verification
Headers
Header | Type | Required | Description |
---|---|---|---|
Booking-Session | String | Yes | Booking session token |
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Body Arguments
Name | Type | Required | Description |
---|---|---|---|
phone_number | String | Yes | Customer phone number. The E.164 format is expected. |
Localization
Get Common
Returns countries, cities, airports, groups, and categories based on currently available attractions.
$ curl -X GET "https://sandbox.coras.io/v2/common" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
"continents": [
{
"code": "EU",
"name": "Europe"
}
],
"categories": [
{
"name": "Sightseeing Tours",
"subcategories": [
{
"id": 5,
"name": "Walking Tours"
}
]
}
],
"countries": [
{
"cities": [
1
],
"country_code": "GB",
"continent_code": "EU",
"id": 207,
"name": "United Kingdom"
}
],
"cities": [
{
"groups": [
1,
5
],
"airports": [
1,
2
],
"country_code": "GB",
"id": 1,
"name": "London",
"search_key": "London",
"images": {
"image_w1160_h160": "https://coras-dev.imgix.net/event-images%2F7fd50a40-e19c-4a74-a713-d52905badeac.jpg?auto=compress"
}
}
],
"groups": [
{
"id": 5,
"name": "Sport Events"
},
{
"id": 1,
"name": "Theatre"
}
],
"airports": [
{
"id": 2,
"name": "London Luton",
"code": "LTN",
"city_id": 1
},
{
"id": 1,
"name": "London Stansted",
"code": "STN",
"city_id": 1
}
]
}
Request
GET https://sandbox.coras.io/v2/common
Headers
Header | Type | Required | Description |
---|---|---|---|
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Querystring parameters
Name | Type | Required | Description |
---|---|---|---|
language_code | String | No | Selected language (default: en ) |
Response
Name | Type | Description |
---|---|---|
continents | List of Continents | Continents that appear at least in one event |
countries | List of Countries | Countries that have at least one available event |
cities | List of Cities | Cities that have at least one available event |
groups | List of Groups | Groups that have at least one available event |
airports | List of Airports | Airports that have at least one available event |
categories | List of Category | All available categories to search by |
Category
Name | Type | Description |
---|---|---|
name | String | Category name |
subcategories | List of Subcategory | List of subcategories |
Subcategory
Name | Type | Description |
---|---|---|
id | Integer | Subcategory ID |
name | String | Subcategory name |
Continent
Name | Type | Description |
---|---|---|
code | String | Continent code |
name | String | Continent name translated to specified language |
Country
Name | Type | Description |
---|---|---|
id | Integer | Country ID |
name | String | Country name translated to specified language |
country_code | Country Code | Country code |
continent | String | Continent name translated to specified language |
cities | List of City IDs | Cities located in given country |
City
Name | Type | Description |
---|---|---|
id | Integer | City ID |
name | String | City name translated to specified language |
search_key | String | Search parameters value for given city |
country_code | Country Code | Country code |
airports | List of Airport IDs | Airports assigned to given city |
groups | List of Group IDs | Event groups available in given city |
images | Image | Images of the city |
Group
Name | Type | Description |
---|---|---|
id | Integer | Attraction group ID |
name | String | Attraction group name translated to specified language |
Airport
Name | Type | Description |
---|---|---|
id | Integer | Airport ID |
name | String | Airport name |
code | String | IATA airport code |
city_id | Integer | Assigned City id |
City Image
Name | Type | Description |
---|---|---|
image_w1160_h160 | String | URL to image |
Get Cities
Returns all cities with available events. (This endpoint is deprecated. Common should be used instead.)
$ curl -X GET "https://sandbox.coras.io/v2/cities?language_code=en" \
-H "Content-Type: application/json" \
-H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
[
{
"name": "London",
"search_key": "London"
},
{
"name": "Test city en",
"search_key": "test city"
}
]
Request
GET https://sandbox.coras.io/v2/cities
Headers
Header | Type | Required | Description |
---|---|---|---|
Content-Type | String | Yes | Accepts only application/json |
Coras-Distributor | String | Yes | Distributor ID |
Querystring parameters
Name | Type | Required | Description |
---|---|---|---|
language_code | String | No | Selected language (default: en ) |
Response
Name | Type | Description |
---|---|---|
name | String | City name translated to specified language |
search_key | String | Search parameters value for given city |
Country Code
Throughout the API we use ISO 3166-1 (alpha-2) two-letter country codes.
Language Code
Throughout the API we use ISO 639-1 language codes . Currently we support the following languages:
Code | name |
---|---|
ar | Arabic |
da | Danish |
de | German |
en | English |
es | Spanish |
fil | Filipino |
fr | French |
hu | Hungarian |
id | Indonesian |
is | Icelandic |
it | Italian |
ja | Japanese |
ko | Korean |
ms | Malay |
no | Norwegian |
pl | Polish |
pt | Portuguese |
sq | Albanian |
sv | Swedish |
th | Thai |
tr | Turkish |
vi | Vietnamese |
zh | Chinese |
Currency Code
Throughout the API we use ISO 4217 three-letter currency codes.
Supported currencies
Currently we support the following currencies:
code | name |
---|---|
AUD | Australian Dollar |
CHF | Swiss Franc |
CNY | Chinese Yuan |
DKK | Danish Krone |
EUR | Euro |
GBP | British Pound |
HRK | Croatian Kuna |
IDR | Indonesian Rupiah |
ISK | Icelandic Króna |
JPY | Japanese Yen |
MAD | Moroccan Dirham |
MYR | Malaysian Ringgit |
NOK | Norwegian Krone |
PHP | Philippine Piso |
PLN | Polish Zloty |
SEK | Swedish Krona |
SGD | Singapore Dollar |
THB | Thai Baht |
TRY | Turkish Lira |
USD | US Dollar |
Error Codes
HTTP 400
status is returned with more detailed error code and message in body (eg. seats are no longer available) when a request to the integration partner isn’t successful.
HTTP 401
status is returned when a booking session token is found to be invalid.
HTTP 421
status returned when the integration partner is entirely unavailable with “Partner unavailable” error message and an error code.
Release Notes
Release v1.44.0
Coras Exchange API Release Notes v1.44.0
Update | Update Summary | API Section |
---|---|---|
Deprecated row_id attribute |
row_id attribute is marked for deletion in the next backward-incompatible version of the API (v3) |
Reservations |
Deprecated row_name attribute |
row_name attribute is marked for deletion in the next backward-incompatible version of the API (v3) |
Reservations |
Deprecated seat_id attribute |
seat_id attribute is marked for deletion in the next backward-incompatible version of the API (v3) |
Reservations |
Deprecated seat_name attribute |
seat_name attribute is marked for deletion in the next backward-incompatible version of the API (v3) |
Reservations |
Deprecated seat_number attribute |
seat_number attribute is marked for deletion in the next backward-incompatible version of the API (v3) |
Reservations |
Updated list of ticket delivery methods | Added more ticket delivery methods | Ticket Delivery Methods |
Added validation to Reservations API | Added validation of settlement currency | Reserve Theater Tickets |
Added validation to Reservations API | Added validation of settlement currency | Reserve Tour Tickets |
Release v1.26.0
Coras Exchange API Release Notes v1.26.0
Update | Update Summary | API Section |
---|---|---|
Added Attraction API | With this API endpoint you can retrieve details of any type of attraction | Attraction |
Release v1.25.0
Coras Exchange API Release Notes v1.25.0
Update | Update Summary | API Section |
---|---|---|
Added Phone Number Verification API | This API dispatches SMS message to provided phone number with unique code required to confirm reservations | Phone Number Verification |
Added phone_number_verification_required attribute |
New attribute phone_number_verification_required has been added to Tour Attraction |
Tour Attractions |
Added phone_number_verification_required attribute |
New attribute phone_number_verification_required has been added to Theater Attraction Details |
Theater Attractions |
Release v1.24.0
Coras Exchange API Release Notes v1.24.0
Update | Update Summary | API Section |
---|---|---|
Deprecated section_id attribute |
section_id attribute is marked for deletion in the next backward-incompatible version of the API (v3) |
Reservations |
Deprecated section_id attribute |
section_id attribute is marked for deletion in the next backward-incompatible version of the API (v3) |
Seats |
Deprecated section_id attribute |
section_id attribute is marked for deletion in the next backward-incompatible version of the API (v3) |
Theater Attraction |
Added valid_splits attribute |
New attribute valid_splits has been added to Price Types |
Theater Attraction |
Updated date_end attribute behaviour |
date_end is no longer set to date_start + 7 days if not provided |
Attractions List |
Updated date_end attribute behaviour |
date_end is no longer set to date_start + 7 days if not provided |
Theater Attraction |
Updated date_end attribute behaviour |
date_end is no longer set to date_start + 7 days if not provided |
Tour Attraction |
Added attendee_first_name_required attribute |
New attribute attendee_first_name_required has been added to Tour Attraction |
Tour Attractions |
Added attendee_first_name_required attribute |
New attribute attendee_first_name_required has been added to Theater Attraction Details |
Theater Attractions |
Added attendee_second_name_required attribute |
New attribute attendee_second_name_required has been added to Tour Attraction |
Tour Attractions |
Added attendee_second_name_required attribute |
New attribute attendee_second_name_required has been added to Theater Attraction Details |
Theater Attractions |
Added attendee_id_number_required attribute |
New attribute attendee_id_number_required has been added to Tour Attraction |
Tour Attractions |
Added attendee_id_number_required attribute |
New attribute attendee_id_number_required has been added to Theater Attraction Details |
Theater Attractions |
Added attendee_gender_required attribute |
New attribute attendee_gender_required has been added to Tour Attraction |
Tour Attractions |
Added attendee_gender_required attribute |
New attribute attendee_gender_required has been added to Theater Attraction Details |
Theater Attractions |
Added attendee_date_of_birth_required attribute |
New attribute attendee_date_of_birth_required has been added to Tour Attraction |
Tour Attractions |
Added attendee_date_of_birth_required attribute |
New attribute attendee_date_of_birth_required has been added to Theater Attraction Details |
Theater Attractions |
Added attendee_city_required attribute |
New attribute attendee_city_required has been added to Tour Attraction |
Tour Attractions |
Added attendee_city_required attribute |
New attribute attendee_city_required has been added to Theater Attraction Details |
Theater Attractions |
Added attendee_province_required attribute |
New attribute attendee_province_required has been added to Tour Attraction |
Tour Attractions |
Added attendee_province_required attribute |
New attribute attendee_province_required has been added to Theater Attraction Details |
Theater Attractions |
Added attendee_country_code_required attribute |
New attribute attendee_country_code_required has been added to Tour Attraction |
Tour Attractions |
Added attendee_country_code_required attribute |
New attribute attendee_country_code_required has been added to Theater Attraction Details |
Theater Attractions |