NAV Navbar
Logo
v1

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

NOTE! This is not the most recent version of this documentation.

All api endpoint URLs include version number. This document describes Coras API version: v1

Other versions

Authentication

Most API requests require one or more of these headers:

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:

  1. Create a booking session.
  2. Get a list of attractions for a given location and date.
  3. Once an attraction is selected, display a list of instances for that attraction.
  4. Reserve tickets.
  5. Optionally, get a summary of the booking.
  6. Confirm your booking, OR:
  7. 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/v1/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/v1/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": "Lyric Theatre",
            "attraction_type_id": 1,
            "category_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,
            "category_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/v1/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",
        "category_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,
        "timezone": "Europe/London"
    },
    "instances": [
        {
            "instance_id": "a7c9798a0fb33d5a5883a3dca5682741",
            "price_bands": [
                {
                    "id": "E29",
                    "section_name": "Balcony",
                    "section_id": "BAL",
                    "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": "UC",
                    "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": "UC",
                    "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/v1/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": "BAL",
            "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": "BAL"
    }
  ]
}

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/v1/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": "BAL"
        }
      ],
      "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/v1/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
email 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/v1/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/v1/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/v1/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/v1/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/v1/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/v1/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/v1/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.

To get detailed information about attractions, use the appropriate endpoint for that attraction type.

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/v1/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": "Lyric Theatre",
        "attraction_type_id": 1,
        "category_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,
        "category_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
}

Request

GET https://sandbox.coras.io/v1/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
category_id Integer No Attraction category ID. Available categories can be obtained from the common endpoint NOTE! This will change in the v2 version.
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) (default: date_start + 7 days)
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)

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

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
category_id Integer Attraction category ID. Available categories can be obtained from the common endpoint NOTE! This will change in the v2 version.
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
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 category_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 Showcased Attractions

$ curl -X GET "https://sandbox.coras.io/v1/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/v1/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/v1/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

Get Categories

$ curl -X GET "https://sandbox.coras.io/v1/categories" \
    -H "Content-Type: application/json" \
    -H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
[
    {
        "id": 1,
        "name": "Theatre"
    },
    {
        "id": 2,
        "name": "Music"
    },
    {
        "id": 3,
        "name": "Tourist Attractions"
    },
    {
        "id": 4,
        "name": "Other Events"
    },
    {
        "id": 5,
        "name": "Sport Events"
    }
]

Returns a list of categories currently available. Each attraction belongs to one category only. (This endpoint is deprecated. Common should be used instead.)

Request

Header Type Required Description
Coras-Distributor String Yes Distributor ID
Content-Type String Yes Accepts only application/json

Response

Name Type Description
id Integer Category ID
name String Category name

Theater Attractions

Get Theater Attraction

$ curl -X GET "https://sandbox.coras.io/v1/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",
        "category_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, 2]
        "max_tickets_per_order": 8,
    },
    "instances": [
        {
            "instance_id": "a7c9798a0fb33d5a5883a3dca5682741",
            "price_bands": [
                {
                    "id": 85639122,
                    "section_name": "Balcony",
                    "section_id": "BAL",
                    "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": 88303523,
                    "section_name": "Upper Circle",
                    "section_id": "UC",
                    "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": {
                            "AUD": 8025,
                            "CHF": 5255,
                            "DKK": 28121,
                            "EUR": 4575,
                            "GBP": 4000,
                            "HRK": 36836,
                            "MAD": 52178,
                            "NOK": 35837,
                            "PLN": 19739,
                            "SEK": 38736,
                            "USD": 5359
                        }
                    }]
                }
            ],
            "start_datetime": "2018-07-10T14:00:00+00:00",
            "provisional_date": false
        }
    ],
    "total_instances": 1,
    "first_instance_date": "2018-07-10T14:00:00+00:00",
    "last_instance_date": "2018-10-30T14:00:00+00:00"
}

Returns a list of theater event instances for a given (theater) attraction ID and date range.

Request

GET https://sandbox.coras.io/v1/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 36 characters

Querystring parameters

Name Type Required Description
date_start String Yes Date range from (YYYY-MM-DD)
date_end String No Date range to (YYYY-MM-DD) (default: date_start + 7 days)
language_code String No Selected language (deafult: en)
page Integer No Page number (default: 0)
size Integer No Number of attractions to return (default: 25, 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 closest to present time
last_instance_date String The date of last attraction instance

Theater Attraction Details

Name Type Description
address String Venue street address
attraction_name String Attraction title. Maximum length is 250 characters
category_id Integer Attraction category ID. Available categories can be obtained from the categories endpoint NOTE! This will change in the v2 version.
categories List of Integer List of ID’s of categories assigned to attraction
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.
longitude Float A geographic coordinate that specifies the east-west position of a point on the Earth’s surface.
location_name String Location name. Maximum length is 64 characters
mandatory_attendee Boolean The flag indicates whether or not it is required to provide the data of the event’s attendants
max_tickets_per_order Integer The limit of tickets that can be purchased in one order
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
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/v1/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": 85639122,
            "section_name": "Balcony",
            "section_id": "BAL",
            "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": 88303523,
            "section_name": "Upper Circle",
            "section_id": "UC",
            "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": {
                   "AUD": 8025,
                   "CHF": 5255,
                   "DKK": 28121,
                   "EUR": 4575,
                   "GBP": 4000,
                   "HRK": 36836,
                   "MAD": 52178,
                   "NOK": 35837,
                   "PLN": 19739,
                   "SEK": 38736,
                   "USD": 5359
                }
            }]
        }
    ],
    "start_datetime": "2018-07-10T14:00:00+00:00",
    "provisional_date": false
}

For selected attraction ID and attraction instance ID, this endpoint returns information for that attraction’s instance.

Request

GET https://sandbox.coras.io/v1/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 36 characters
instance_id String Yes Instance ID. Maximum length is 36 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. Maximum length is 36 characters
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 Integer Price band ID
section_id Sting Section ID
section_name String Name of section
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
price_types List of Price Types List of available price types
updating Boolean Information if specific price band is being updated

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

Seats

Get seats

Returns a list of available seats for given event and instance.

$ curl -X GET "https://sandbox.coras.io/v1/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": "UC",
                "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": "UC",
                "price_category_id" : "b6d2f4de7b7fd91ba97795cdef1c254c",
                "price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN"
            }
        }
    },
    {
        "category_id": 85639122,
        "seats": {
            "BALCONY-K-16": {
                "coras_seat_id": "22ffb9c2115707ca5aead341798c6230a4187bbb",
                "restricted_view": null,
                "section_id": "BAL",
                "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": "BAL",
                "price_category_id" : "57374630dff0a00c8d77fa025bb83923",
                "price_type_id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN"
            }
        }
    }
]

HTTP Request

GET https://sandbox.coras.io/v1/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 (marked for deletion)
section_id String Coras only field (marked for deletion)
price_type_id String Coras only field (marked for deletion)

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/v1/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": {
        "coras_tour_id": "08e36beb3acadc1e69823b4d67aea83d",
        "attraction_name": "The Total London Experience with Free Lunch Pack",
        "category_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 &amp; 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
        }],
        "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,
        "categories": [2, 5]
    },
    "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/v1/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) (default: date_start + 7 days)
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
instances List of Tour Instances List of tour instances
price_types List of Price Types List of available price types
total Integer Number of instances attached to attraction
first_instance_date String The datetime of attraction’s instance closest to present time
last_instance_date String The date of last attraction’s instance

Tour Attraction

Name Type Description
coras_tour_id string Tour attraction ID
attraction_name String Name of attraction
category_id Integer Attraction category ID. Available categories can be obtained via categories endpoint NOTE! This will change in the v2 version.
categories List List of ID’s of categories assigned to attraction
city String City name
duration Integer Approximate tour duration in minutes
geolocation_points List List of coordinates of the most important points on the tour route
images List of Images Attraction images
languages_spoken List Possible languages to choose during attraction (English translated identifiers, e.g. “English - Audio”)
min_booking_size Integer Minimum number of tickets
max_booking_size Integer Maximum number of tickets
min_price Price Minimum available price in multiple currencies.
summary String Natural-language description (shortened) of this tour
itinerary String HTML-formatted description of the itinerary of this tour if available
duration_description String Natural-language description of this tour’s duration
highlights String Natural-language ‘selling points’ for this tour
included String HTML-formatted features included in this tour
excluded String HTML-formatted natural-language exclusions for this tour
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.
extras_upgrades String Extras / upgrades
essential_information String HTML-formatted natural-language description of extra information pertaining to 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)
departure_time String HTML-formatted natural-language description of this tour’s departure times
departure_point String HTML-formatted natural-language description of this tour’s departure location
admission String Coras only field
special_offer String Natural-language description of any special offers available for this tour
sales_enabled Boolean Coras only field (currently API returns only attractions with sales_enabled=true)
tags List List of Tags assigned to the attraction
timezone String Attraction timezone
tour_operator_url String Direct URL to operator
tour_operator_information Integer The operator information is: 1 - on the operator’s website, 2 - on the voucher
sale_periods List of Sale periods Information when attraction is available for sale
mandatory_attendee Boolean Attendees have to be added for each ticket (see Attendees endpoint)
pickup_available Boolean Indicates pickup points availability for a given tour
pickup_required Boolean true if a pickup point has to be chosen to make a reservation
pickup_on_request Boolean true if customer can provide a freetext pickup point
cancellation_policy String Describes the rules of cancellation and refunds

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 time of the day) - for available options call Tour Availability.

Price Types

Name Type Description
price_type_id String Price type ID
name String Price type name, e.g. Adult
description String Optional price type description
agerange_min Integer Years. i.e. Senior will have agerange_min=65
agerange_max Integer Years. If blank, assume is adult
can_be_guardian Boolean Whether ticket can be bought together with type require_guardian=True
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
start String Start date and time of the sale
end String End date and time of the sale

Get Tour Availability

$ curl -X POST "https://sandbox.coras.io/v1/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/v1/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
selection_id String (nullable) Option ID to be used during booking process
name String Name of the option
description String (nullable) Option description
timezone String Timezone
start_datetime String Option start date and time
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)
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
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
prices List of Price Types (nullable) Pricing based on provided traveller mix (null if available is false)
price_types_required List of Price Types Required (nullable) Traveler mix requirements (null if available is true)
pickup_points List of Pickup points Pickup points in alphabetical order (notListed first if applicable)

Price Type

These are in fact Price Types obtained from Get Tour attraction extended with pricing information:

Name Type Description
price_type_id String Price type ID
price_type_name String Price type name, e.g. Adult
description String Optional price type description
agerange_min Integer Years. i.e. Senior will have agerange_min=65
agerange_max Integer Years. If blank, assume is adult
can_be_guardian Boolean Whether ticket can be bought together with type require_guardian=True
require_guardian Boolean Whether ticket can be bought with ticket type can_be_guardian=True
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
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
number_of_tickets Integer Number of tickets provided with the request for given type
price Price Face value price per ticket

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
price_type_id String Price type ID
price_type_name String Price type name
min_count_required Integer Minimum count of tickets required
max_count_required Integer (nullable) Maximum count of tickets required

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
pickup_name String Text name for the pickup point (e.g. a hotel or bus stop)
pickup_description String Any extra information for the client, e.g. “Meet in the reception lounge”
pickup_address String Pickup address (joined with \n if multiline)
postcode String Postcode and city
geolocation_point List Geo-point expressed as an array with the format: [lon, lat]

Reservations

Reserve Theater Tickets

# Theater Attraction example
$ curl -X POST https://sandbox.coras.io/v1/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": [
        {
            "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": "BAL",
            "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": "BAL",
            "is_general_admission": false
        }
    ]
}

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/v1/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
ticket_id String Ticket ID
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
row_name String Row label
seat_id Integer Seat number index
seat_name String Seat number
seat_number Integer Seat number
seatsio_seat_id String The seats.io seat ID
section String Section name
section_id String Section ID
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/v1/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": "BAL",
                    "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": "BAL",
                    "is_general_admission": false
                }
            ],
            "timezone": "Europe/London",
            "total_price": 6600
        }
    ],
    "total_price": 6600
}

Request

GET http://sandbox.coras.io/v1/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
2 An electronic ticket attached to a message sent separately by the event provider
3 An electronic ticket sent by mail as an attachment 48 hours before the event

Reserve Tour Tickets

# Tour Attraction example
$ curl -X POST https://sandbox.coras.io/v1/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
}

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/v1/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
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/v1/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/v1/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/v1/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.

  1. 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.

  2. Call this endpoint to generate the client_secret that you will need to confirm the payment intent in the next step.

  3. Use stripe.handleCardPayment to confirm the payment intent and trigger a 3D Secure authentication challenge whenever necessary.

  4. 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 as requires_payment_method.

  5. 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.

  1. 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/v1/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
email String Yes Client email address
first_name String Yes Client first name
phone_number String Yes Client phone number
reservations List of String Yes IDs of reservations in the basket
second_name String Yes Client second name

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/v1/reservations \
   -H "Booking-Session: 6f299e0ce1ef66e612ac45552cf9fabc" \
   -H "Content-Type: application/json" \
   -H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"

Request

DELETE https://sandbox.coras.io/v1/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/v1/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/v1/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/v1/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/v1/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/v1/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/v1/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
ticket_id Integer Yes Ticket ID.
first_name String Yes Attendee first name. Maximum length is 100 characters
second_name String Yes Attendee second name. Maximum length is 100 characters
id_number String Yes Attendee ID number. Maximum length is 50 characters

Update attendees

$ curl -X PUT https://sandbox.coras.io/v1/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/v1/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/v1/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/v1/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

Localization

Get Common

Returns countries, cities, airports and categories based on currently available attractions.

$ curl -X GET "https://sandbox.coras.io/v1/common" \
   -H "Content-Type: application/json" \
   -H "Coras-Distributor: f71bcdcb-9605-4514-94b6-8e8ccf1ce223"
{
    "continents": [
        {
            "code": "EU",
            "name": "Europe"
        }
    ],
    "countries": [
        {
            "cities": [
                1
            ],
            "country_code": "GB",
            "continent_code": "EU",
            "id": 207,
            "name": "United Kingdom"
        }
    ],
    "cities": [
        {
            "categories": [
                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"
            }
        }
    ],
    "categories": [
        {
            "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/v1/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
categories List of Categories Categories that have at least one available event NOTE! This will change in the v2 version.
airports List of Airports Airports that have at least one available event

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
categories List of Category ids Event categories available in given city NOTE! This will change in the v2 version.
images Image Images of the city

Category

Name Type Description
id Integer Attraction category ID
name String Category 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/v1/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/v1/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
da Danish
de German
en English
es Spanish
fr French
it Italian
no Norwegian
pl Polish
pt Portuguese
sv Swedish

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
DKK Danish Krone
EUR Euro
GBP British Pound
HRK Croatian Kuna
MAD Moroccan Dirham
NOK Norwegian Krone
PLN Polish Zloty
SEK Swedish Krone
USD United States 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.