Developer Reference

API Documentation

The Travelotopos API supports two types of endpoints — supplier-side endpoints and travelotopos-side endpoints — so you can retrieve services, manage events and pricing, and create or modify reservations programmatically.

How it works

Two types of endpoints

The Travelotopos API supports two types of endpoints, supplier-side endpoints and travelotopos-side endpoints.

Supplier-side endpoints

Called by the supplier implementing the API to retrieve data or make / modify reservations.

  • Every request must include the apikey (provided by us) and Language Headers
  • Default language value: English
  • All methods support JSON output format

Travelotopos-side endpoints

Used by Travelotopos to dispatch requests to the supplier for various events like pricing changes, to ensure a more stable and up-to-date connection.

  • An API URL must be set up for Travelotopos to dispatch requests to
  • The URL should listen to requests and handle them accordingly
  • Real-time updates for events such as pricing changes
Conventions

Pagination

Some methods support pagination. The Travelotopos API uses cursor pagination to paginate results, returning an encoded index that can be used to retrieve the next result set. By default all responses return non-paginated results. To request pagination, two parameters must be present, either as GET parameters for a GET request or in the request body for POST requests.

  • data_per_page: Amount of data requested per result set.
  • pagination_index: The pagination index of the previous page (can be omitted for the first result set).

The response will contain the following data to track pagination:

  • next_pagination_index: The pagination index to use to fetch the next result set. If null, no next result set exists.
  • data_per_page: Amount of data returned.
  • last_page: If true, no more data exist to be fetched.
Supplier-side endpoints

Services

Called by the supplier implementing the API to retrieve data or make and modify reservations.

GET

Service categories

Returns the available Service Categories.

URLhttps://api-company.travelotopos.com/general/pcategories

Parameters None

Sample response
{
    "error": false,
    "data": {
        "1": {
            "data": {
                "pCategory_id": 1,
                "pCategory_alias": "servicecategory1",
                "pCategory_name": {
                    "english": "Service Category 1",
                    "greek": "Service Category 1",
                    "german": "Service Category 1",
                    "italian": "Service Category 1",
                    "russian": "Service Category 1",
                    "french": "Service Category 1"
                },
                "pCategory_sort": 1,
                "color": "2977F7"
            },
            "children": {}
        },
        "2": {
            "data": {
                "pCategory_id": 2,
                "pCategory_alias": "servicecategory2",
                "pCategory_name": {
                    "english": "Service Category 2",
                    "greek": "Service Category 2",
                    "german": "Service Category 2",
                    "italian": "Service Category 2",
                    "russian": "Service Category 2",
                    "french": "Service Category 2"
                },
                "pCategory_sort": 2,
                "color": "2977F7"
            },
            "children": {}
        }
    }
}
GET

Services

Returns all Services.

URLhttps://api-company.travelotopos.com/services/services

Parameters None

Notes
  • Service_duration is provided in minutes.
Sample response
{
    "error": false,
    "data": {
        "05590ECC-AC00-7544-BB2B-D0839893F769": {
            "service_id": 1,
            "service_alias": "service1",
            "service_title": {
                "english": "Service 1",
                "greek": "Service 1",
                "german": "Service 1",
                "italian": "Service 1",
                "russian": "Service 1",
                "french": "Service 1"
            },
            "service_subtitle": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "service_description": {
                "english": null
            },
            "service_keywords": {
                "english": null
            },
            "service_sort": 1,
            "service_publish_from": "2022-01-08 00:00:00.000",
            "service_publish_to": "2023-01-08 00:00:00.000",
            "service_min_price": ".0000",
            "service_hash": "1e39b54f0bf7454aa14294dbcc874a5c777af862",
            "service_show_min_price": 1,
            "is_published": 1,
            "service_show_reviews": 1,
            "service_longitude": null,
            "service_latitude": null,
            "service_second_longitude": null,
            "service_second_latitude": null,
            "service_show_route": 1,
            "service_display_extra_fields_for_contact": 1,
            "service_multiple_contact_fields": 0,
            "service_min_discounted_price": ".0000",
            "service_deposit": "50.0000",
            "service_depositType": 1,
            "service_showPassport": 0,
            "service_showIdentity": 0,
            "service_showDrivinglicense": 0,
            "service_admin_sort": 0,
            "service_showSurname": 0,
            "service_globalAlias": "s.1",
            "service_showGender": 0,
            "service_showCountry": 0,
            "service_showHotel": 0,
            "service_showRoomNumber": 0,
            "requireRoomNumber": 0,
            "requireBookingReferenceNumber": 0,
            "service_showBookingReferenceNumber": 0,
            "service_showCity": 0,
            "service_showIdentityValue": 0,
            "requireGender": 0,
            "requireCountry": 0,
            "requireHotel": 0,
            "requireCity": 0,
            "requireBirthdate": 0,
            "requireIdentificationType": 0,
            "requireIdentificationValue": 0,
            "service_locodeId": 1,
            "service_admin_list_sort": 0,
            "service_showBirthdate": 0,
            "service_showCompany": null,
            "requireCompany": 0,
            "service_duration": null, 
            "service_highlights": { 
               "english": "EN - highlights", 
               "greek": "GR - highlights", 
               "german": "EN - highlights", 
               "italian": "EN - highlights", 
               "russian": "EN - highlights", 
               "french": "EN - highlights" 
            }, 
            "service_inclusions": null, 
            "service_additional_info": { 
               "english": "", 
               "greek": "", 
               "german": "", 
               "italian": "", 
               "russian": "", 
               "french": "" 
            },
            "content_updated_at": null,
            "partner_domain": null,
            "service_reservation_url": "https://domain.travelotopos.com/s/1/1",
            "custom_extras": [],
            "service_company_name": "Travelotopos",
            "categories": [
                1
            ],
            "areas": [
               1,
               141
            ]
        },
        "04156C73-85A0-93AB-64FE-F75F4C5F3224": {
            "service_id": 2,
            "service_alias": "service2",
            "service_title": {
                "english": "Service 2",
                "greek": "Service 2",
                "german": "Service 2",
                "italian": "Service 2",
                "russian": "Service 2",
                "french": "Service 2"
            },
            "service_subtitle": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "service_description": {
                "english": "'Αυτό ειναι δοκιμαστικό ✔️",
                "greek": "This is a service made for testing purposes.",
                "german": "This is a service made for testing purposes.",
                "italian": "NThis is a service made for testing purposes.",
                "russian": "NThis is a service made for testing purposes.",
                "french": "NThis is a service made for testing purposes."
            },
            "service_keywords": {
                "english": null
            },
            "service_sort": 2,
            "service_publish_from": "2022-01-08 00:00:00.000",
            "service_publish_to": "2023-01-08 00:00:00.000",
            "service_min_price": ".0000",
            "service_hash": "15f415e656ed17d8f39796f6091d929ea6dd3880",
            "service_show_min_price": 1,
            "is_published": 1,
            "service_show_reviews": 1,
            "service_longitude": null,
            "service_latitude": null,
            "service_second_longitude": null,
            "service_second_latitude": null,
            "service_show_route": 1,
            "service_display_extra_fields_for_contact": 1,
            "service_multiple_contact_fields": 0,
            "service_min_discounted_price": ".0000",
            "service_deposit": "25.0000",
            "service_depositType": 1,
            "service_showPassport": 0,
            "service_showIdentity": 0,
            "service_showDrivinglicense": 0,
            "service_admin_sort": 0,
            "service_showSurname": 0,
            "service_globalAlias": "s.2",
            "service_showGender": 0,
            "service_showCountry": 1,
            "service_showHotel": 0,
            "service_showRoomNumber": 0,
            "requireRoomNumber": 0,
            "requireBookingReferenceNumber": 0,
            "service_showBookingReferenceNumber": 0,
            "service_showCity": 0,
            "service_showIdentityValue": 0,
            "requireGender": 0,
            "requireCountry": 0,
            "requireHotel": 0,
            "requireCity": 0,
            "requireBirthdate": 0,
            "requireIdentificationType": 0,
            "requireIdentificationValue": 0,
            "service_locodeId": 1,
            "service_admin_list_sort": 0,
            "service_showBirthdate": 1,
            "service_showCompany": null,
            "requireCompany": 0,
            "service_duration": 120,
            "service_highlights": {
               "english": "EN - highlights",
               "greek": "GR - highlights",
               "german": "EN - highlights",
               "italian": "EN - highlights",
               "russian": "EN - highlights",
               "french": "EN - highlights"
            },
           "service_inclusions": null,
           "service_additional_info": {
              "english": "",
              "greek": "",
              "german": "",
              "italian": "",
              "russian": "",
              "french": ""
           },
           "content_updated_at": null,
           "partner_domain": null,
           "service_reservation_url": "https://domain.travelotopos.com/s/2/2",
           "custom_extras": [],
           "service_company_name": "Travelotopos",
           "categories": [
               1, 2
           ],
           "areas": []
        }
    }
}
POST

Service

Returns a specific service.

URLhttps://api-company.travelotopos.com/services/service

Content-Typemultipart/form-data

FieldTypeRequiredExample
service_idIntegerNO2
service_globalAliasStringNOs.2
Notes
  • *Either service_id or service_globalAlias is required. If both exist, service_globalAlias takes priority.
  • Service_duration is provided in minutes.
Sample response
{
    "error": false,
    "data": {
        "service_id": 2,
        "service_alias": "service2",
        "service_title": {
            "english": "Service 2",
            "greek": "Service 2",
            "german": "Service 2",
            "italian": "Service 2",
            "russian": "Service 2",
            "french": "Service 2"
        },
        "service_subtitle": {
            "english": "",
            "greek": "",
            "german": "",
            "italian": "",
            "russian": "",
            "french": ""
        },
        "service_description": {
            "english": "'Αυτό ειναι δοκιμαστικό ✔️",
            "greek": "This is a service made for testing purposes.",
            "german": "This is a service made for testing purposes.",
            "italian": "NThis is a service made for testing purposes.",
            "russian": "NThis is a service made for testing purposes.",
            "french": "NThis is a service made for testing purposes."
        },
        "service_keywords": {
            "english": null
        },
        "service_sort": 2,
        "service_publish_from": "2022-01-08 00:00:00.000",
        "service_publish_to": "2023-01-08 00:00:00.000",
        "service_min_price": ".0000",
        "service_hash": "15f415e656ed17d8f39796f6091d929ea6dd3880",
        "service_show_min_price": 1,
        "is_published": 1,
        "service_show_reviews": 1,
        "service_longitude": null,
        "service_latitude": null,
        "service_second_longitude": null,
        "service_second_latitude": null,
        "service_show_route": 1,
        "service_display_extra_fields_for_contact": 1,
        "service_multiple_contact_fields": 0,
        "service_min_discounted_price": ".0000",
        "service_deposit": "25.0000",
        "service_depositType": 1,
        "service_showPassport": 0,
        "service_showIdentity": 0,
        "service_showDrivinglicense": 0,
        "service_admin_sort": 0,
        "service_showSurname": 0,
        "service_globalAlias": "s.2",
        "service_showGender": 0,
        "service_showCountry": 1,
        "service_showHotel": 0,
        "service_showRoomNumber": 0,
        "requireRoomNumber": 0,
        "requireBookingReferenceNumber": 0,
        "service_showBookingReferenceNumber": 0,
        "service_showCity": 0,
        "service_showIdentityValue": 0,
        "requireGender": 0,
        "requireCountry": 0,
        "requireHotel": 0,
        "requireCity": 0,
        "requireBirthdate": 0,
        "requireIdentificationType": 0,
        "requireIdentificationValue": 0,
        "service_locodeId": 1,
        "service_admin_list_sort": 0,
        "service_showBirthdate": 1,
        "service_showCompany": null,
        "requireCompany": 0,
        "service_duration": 120,
        "service_highlights": { 
           "english": "EN - highlights", 
           "greek": "GR - highlights", 
           "german": "EN - highlights", 
           "italian": "EN - highlights", 
           "russian": "EN - highlights", 
           "french": "EN - highlights" 
        }, 
        "service_inclusions": null, 
        "service_additional_info": { 
           "english": "", 
           "greek": "", 
           "german": "", 
           "italian": "", 
           "russian": "", 
           "french": "" 
        },
        "content_updated_at": "2023-01-23 12:56:59.000",
        "service_reservation_url": "https://domain.travelotopos.com/s/2/2",
        "custom_extras": {
            "D9690293-6C65-BB3C-ECB1-ACA44B9EE7DD": {
                "serviceExtra_id": 21,
                "service_id": 2,
                "text": {
                    "english": "Nationality",
                    "greek": "Nationality",
                    "german": "Nationality",
                    "italian": "Nationality",
                    "russian": "Nationality",
                    "french": "Nationality"
                },
                "is_required": 0,
                "created_at": "2022-01-10 11:38:16.363",
                "is_deleted": 0,
                "remote_serviceExtra_id": null
            }
        },
        "service_company_name": "Travelotopos",
        "categories": [
           1
        ],
        "areas": []
    }
}
GET

Get available services

Returns all services that are available for a specified date range.

URLhttps://api-company.travelotopos.com/services/getAvailableServices?dateFrom={{dateFrom}}&dateTo={{dateTo}}

FieldTypeRequiredFormatExample
dateFromDateYESYYYY-MM-DD2023-02-08
dateToDateYESYYYY-MM-DD2023-02-08
Notes
  • Some services returned in the response may be provided to the Travelotopos booking engine the request was submitted to via Partnerships. In those cases, the partner_domain field will contain the domain of the supplier’s Travelotopos booking engine (without the travelotopos.com suffix).
Sample response
{
    "error": false,
    "data": [
        {
            "service_id": 1,
            "service_alias": "service_1",
            "service_globalAlias": "s.1",
            "service_title": {
                "english": "Service 1",
                "greek": "Υπηρεσία 1",
                "german": "Service 1",
                "italian": "Service 1",
                "russian": "Service 1",
                "french": "Service 1"
            },
            "service_min_price": "2.0000",
            "service_min_discounted_price": ".0000",
            "service_show_min_price": 1,
            "service_duration": null,
            "service_sort": 1,
            "service_description": {
                "english": "'Αυτό ειναι δοκιμαστικό ✔️
",
                "greek": "This is a service made for testing purposes.",
                "german": "This is a service made for testing purposes.",
                "italian": "NThis is a service made for testing purposes.",
                "russian": "NThis is a service made for testing purposes.",
                "french": "NThis is a service made for testing purposes."
            },
            "service_highlights": {
                "english": null
            },
            "service_inclusions": {
                "english": null
            },
            "service_additional_info": {
                "english": null
            },
            "partner_domain": null,
            "category_sort": 1,
            "partner_domain": null, 
            "category_sort": 2, 
            "service_reservation_url": "https://test.travelotopos.com/s/1", 
            "areas": [], 
            "service_company_name": "Test Engine", 
            "categories": [ 
                1 
            ], 
            "custom_extras": []
        },
        {
            "service_id": 2,
            "service_alias": "service_2",
            "service_globalAlias": "s.2",
            "service_title": {
                "english": "Service 5",
                "greek": "Υπηρεσία 5",
                "german": "Service 5",
                "italian": "Service 5",
                "russian": "Service 5",
                "french": "Service 5"
            },
            "service_min_price": ".0000",
            "service_min_discounted_price": "1.0000",
            "service_show_min_price": 1,
            "service_duration": null,
            "service_sort": 1,
            "service_description": {
                "english": "This is a service made for testing purposes.",
                "greek": "Αυτό ειναι δοκιμαστικό",
                "german": "This is a service made for testing purposes.",
                "italian": "NThis is a service made for testing purposes.",
                "russian": "NThis is a service made for testing purposes.",
                "french": "NThis is a service made for testing purposes."
            },
            "service_highlights": {
                "english": null
            },
            "service_inclusions": {
                "english": null
            },
            "service_additional_info": {
                "english": null
            },
            "partner_domain": null,
            "category_sort": 2,
            "service_reservation_url": "https://test.travelotopos.com/s/2",
            "areas": [],
            "service_company_name": "Test Engine",
            "categories": [
               1
            ],
            "custom_extras": []
        }
    ]
}
Supplier-side endpoints

Events

POST

Events

Return all events.

URLhttps://api-company.travelotopos.com/events/events

Content-Typemultipart/form-data

FieldTypeRequiredExample
service_idIntegerYES15
Notes
  • The event_daysbefore field refers to the cut-off time of the event and it can be either Days or Hours depending on the value of the event_daysbeforeType. 1 = Days, 2 = Hours.
Sample response
{
    "error": false,
    "data": {
        "3B569567-5FEA-46A6-0442-F415149624D7": {
            "event_id": 3,
            "service_id": 2,
            "parent_event_id": null,
            "event_alias": "E03803a",
            "event_title": {
                "english": "Event 3",
                "greek": "Event 3",
                "german": "Event 3",
                "italian": "Event 3",
                "russian": "Event 3",
                "french": "Event 3"
            },
            "event_description": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_image": null,
            "event_daysbefore": 0,
            "event_always_available": 0,
            "event_lowestprice": "15.0000",
            "event_from": "2021-01-10 00:00:00.000",
            "event_to": "2022-01-18 00:00:00.000",
            "event_opentime": null,
            "event_closetime": null,
            "event_duration": 60,
            "event_cancellation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_sort": 1,
            "event_vat": null,
            "event_daysbeforeType": 1,
            "event_paymentcondition": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipName": null,
            "shipPort": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipLocation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipRegistryNumber": null,
            "shipAuthorityLocation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_ship_id": null,
            "tierPricing": 0,
            "event_voucherinfo": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "display_in_landing": 1,
            "require_extra": null,
            "event_cancellation_cutoff_minutes": 0,
            "audit_is_update": 0,
            "sharedAvailabilityParentEventId": 0,
            "blockoutAvailabilityParentEventId": 0,
            "isSendingToPartner": false
        },
        "742A636F-6C1C-11B2-C54B-55EBAE7169A8": {
            "event_id": 4,
            "service_id": 2,
            "parent_event_id": null,
            "event_alias": "E19f513",
            "event_title": {
                "english": "Event 4",
                "greek": "Event 4",
                "german": "Event 4",
                "italian": "Event 4",
                "russian": "Event 4",
                "french": "Event 4"
            },
            "event_description": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_image": null,
            "event_daysbefore": 0,
            "event_always_available": 0,
            "event_lowestprice": ".0000",
            "event_from": "2021-01-01 00:00:00.000",
            "event_to": "2022-01-25 00:00:00.000",
            "event_opentime": "09:00",
            "event_closetime": "18:00",
            "event_duration": 60,
            "event_cancellation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_sort": 2,
            "event_vat": null,
            "event_daysbeforeType": 1,
            "event_paymentcondition": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipName": null,
            "shipPort": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipLocation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipRegistryNumber": null,
            "shipAuthorityLocation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_ship_id": null,
            "tierPricing": 1,
            "event_voucherinfo": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "display_in_landing": 1,
            "require_extra": null,
            "event_cancellation_cutoff_minutes": 0,
            "audit_is_update": 0,
            "sharedAvailabilityParentEventId": 0,
            "blockoutAvailabilityParentEventId": 0,
            "isSendingToPartner": false
        },
        "A7AD5DE9-869E-7F7F-A99A-6172CA8FE92C": {
            "event_id": 5,
            "service_id": 2,
            "parent_event_id": null,
            "event_alias": "Ef8c1bb",
            "event_title": {
                "english": "Event 5",
                "greek": "Event 5",
                "german": "Event 5",
                "italian": "Event 5",
                "russian": "Event 5",
                "french": "Event 5"
            },
            "event_description": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_image": null,
            "event_daysbefore": 0,
            "event_always_available": 0,
            "event_lowestprice": ".0000",
            "event_from": "2022-01-01 00:00:00.000",
            "event_to": "2022-12-31 00:00:00.000",
            "event_opentime": "09:00",
            "event_closetime": "17:00",
            "event_duration": 60,
            "event_cancellation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_sort": 3,
            "event_vat": null,
            "event_daysbeforeType": 1,
            "event_paymentcondition": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipName": null,
            "shipPort": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipLocation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "shipRegistryNumber": null,
            "shipAuthorityLocation": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "event_ship_id": null,
            "tierPricing": 0,
            "event_voucherinfo": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "display_in_landing": 1,
            "require_extra": 0,
            "event_cancellation_cutoff_minutes": 1440,
            "audit_is_update": 0,
            "sharedAvailabilityParentEventId": 0,
            "blockoutAvailabilityParentEventId": 0,
            "isSendingToPartner": true
        }
    }
}
POST

Event

Returns a specific event.

URLhttps://api-company.travelotopos.com/events/event

Content-Typemultipart/form-data

FieldTypeRequiredExample
event_idIntegerYES27
service_idIntegerYES15
Notes
  • The event_daysbefore field refers to the cut-off time of the event and it can be either Days or Hours depending on the value of the event_daysbeforeType. 1 = Days, 2 = Hours.
Sample response
{
    "error": false,
    "data": {
        "event_id": 3,
        "service_id": 2,
        "parent_event_id": null,
        "event_alias": "E03803a",
        "event_title": {
            "english": "Event 3",
            "greek": "Event 3",
            "german": "Event 3",
            "italian": "Event 3",
            "russian": "Event 3",
            "french": "Event 3"
        },
        "event_description": {
            "english": "",
            "greek": "",
            "german": "",
            "italian": "",
            "russian": "",
            "french": ""
        },
        "event_image": null,
        "event_daysbefore": 0,
        "event_always_available": 0,
        "event_lowestprice": "15.0000",
        "event_from": "2021-01-10 00:00:00.000",
        "event_to": "2022-01-18 00:00:00.000",
        "event_opentime": null,
        "event_closetime": null,
        "event_duration": 60,
        "event_cancellation": {
            "english": "",
            "greek": "",
            "german": "",
            "italian": "",
            "russian": "",
            "french": ""
        },
        "event_sort": 1,
        "copied_from": null,
        "is_confirmed": 1,
        "event_vat": null,
        "event_daysbeforeType": 1,
        "event_paymentcondition": {
            "english": "",
            "greek": "",
            "german": "",
            "italian": "",
            "russian": "",
            "french": ""
        },
        "shipName": null,
        "shipPort": {
            "english": "",
            "greek": "",
            "german": "",
            "italian": "",
            "russian": "",
            "french": ""
        },
        "shipLocation": {
            "english": "",
            "greek": "",
            "german": "",
            "italian": "",
            "russian": "",
            "french": ""
        },
        "shipRegistryNumber": null,
        "shipAuthorityLocation": {
            "english": "",
            "greek": "",
            "german": "",
            "italian": "",
            "russian": "",
            "french": ""
        },
        "event_ship_id": null,
        "tierPricing": 0,
        "event_voucherinfo": {
            "english": "",
            "greek": "",
            "german": "",
            "italian": "",
            "russian": "",
            "french": ""
        },
        "display_in_landing": 1,
        "require_extra": null,
        "event_cancellation_cutoff_minutes": 0,
        "audit_code": "0",
        "audit_is_update": 0
    }
}
POST

Event batch availability

Returns a specific event's availability for a batch of selected dates. It can also be used to return pricing details for each availability result.

URLhttps://api-company.travelotopos.com/events/batchAvailability

Content-Typemultipart/form-data

FieldTypeRequiredExample
service_idIntegerYES15
event_idIntegerYES22
fromDateTimeDateYES2019-11-01
toDateTimeDateYES2019-11-30
pricingBooleanNOtrue
About pricing

Travelotopos supports 3 kinds of pricing: standard, volume and tiered. Depending on the kind of pricing set up, pricing information will be provided by a different key.

  • If standard pricing is set up, a single price will be provided for each pricegroup through the price field.
  • If volume or tiered pricing is set up, pricing information will be provided for each pricegroup through the volume_pricing or tiered_pricing field respectively.

Volume and tiered pricing fields contain pricing rules. Each pricing rule has the following fields:

  • paxFrom — the minimum amount of participants the rule concerns.
  • paxTo — the maximum amount of participants the rule concerns.
  • tierPrice — price per participant.
  • fixedPrice — a fixed price for all participants the rule concerns, which stays the same regardless of their amount.
Volume pricing example

PaxFrom 1–3: TierPrice 50, fixedPrice 500 · PaxFrom 4–6: TierPrice 40, fixedPrice 400 · PaxFrom 7–10: TierPrice 30, fixedPrice 300

  • 3 participants → 3 × 50 + 500 = 650
  • 5 participants → 5 × 40 + 400 = 600
  • 8 participants → 8 × 30 + 300 = 540
Tiered pricing example

PaxFrom 1–3: TierPrice 50, fixedPrice 500 · PaxFrom 4–6: TierPrice 40, fixedPrice 400 · PaxFrom 7–10: TierPrice 30, fixedPrice 300

  • 3 participants → 3 × 50 + 500 = 650
  • 5 participants → 3 × 50 + 500 + 2 × 40 + 400 = 1130
  • 8 participants → 3 × 50 + 500 + 3 × 40 + 400 + 2 × 30 + 300 = 1530
Notes
  • The min_order field refers to the minimum number of participants of this type required to book this event.
  • The primary field is used to identify the primary pricegroup. This pricegroup is required to be booked at least once to book this event.
  • The shared_availability field is used to identify if the pricegroup's availability is shared with the other pricegroups of the event, which means that booking one of them will decrease availability for all other pricegroups of the event with shared_availability.
  • The has_netprice field means that the pricegroup's price applies as a total to any quantity of this specific pricegroup for reservations, so the total price is not calculated by the pricegroup's price multiplied by its quantity.
  • You are not allowed to ask for availability for more than 31 days.
  • The group_size information is available ONLY when the pricegroup is of type Group. If not, variable group_size is not present in the response.
Sample response without pricing
{
    "error": false,
    "data": {
        "availabilities": [
            {
                "dateTime": "2021-03-03 08:00:00",
                "vacancies": 0, 
                "group_size": 10
            },
            {
                "dateTime": "2021-03-03 09:00:00",
                "vacancies": 0, 
                "group_size": 10
            },
            {
                "dateTime": "2021-03-04 08:00:00",
                "vacancies": 0, 
                "group_size": 10
            },
            {
                "dateTime": "2021-03-04 09:00:00",
                "vacancies": 0, 
                "group_size": 10
            },
            ...
        ]
    }
}
Sample response with standard pricing
{
    "error": false,
    "data": {
        "availabilities": [
            {
                "dateTime": "2021-03-03 08:00:00",
                "vacancies": 0,
                "pricing": [
                    {
                        "pricegroup_id": 1,
                        "pricegroup_name": {
                            "english": "Per Adult",
                            "greek": "Per Adult",
                            "german": "Per Adult",
                            "italian": "Per Adult",
                            "russian": "Per Adult",
                            "french": "Per Adult"
                        },
                        "pricegroup_alias": "peradult",
                        "pricegroup_description": {
                            "english": "",
                            "greek": "",
                            "german": "",
                            "italian": "",
                            "russian": "",
                            "french": ""
                        },
                        "min_order": 1,
                        "primary": false,
                        "shared_availability": false,
                        "has_netprice": false,
                        "min_age": null, 
                        "max_age": null,
                        "price": "100.00",
                        "volume_pricing": [],
                        "tiered_pricing": []
                    },
                    {
                        "pricegroup_id": 4,
                        "pricegroup_name": {
                            "english": "Per Child",
                            "greek": "Per Child",
                            "german": "Per Child",
                            "italian": "Per Child",
                            "russian": "Per Child",
                            "french": "Per Child"
                        },
                        "pricegroup_alias": "perchild",
                        "pricegroup_description": {
                            "english": "",
                            "greek": "",
                            "german": "",
                            "italian": "",
                            "russian": "",
                            "french": ""
                        },
                        "min_order": 1,
                        "primary": false,
                        "shared_availability": false,
                        "has_netprice": false,
                        "min_age": 8, 
                        "max_age": 15,
                        "price": "20.00",
                        "volume_pricing": [],
                        "tiered_pricing": []
                    },
                    ...
                ]
            },
            ...
        ]
    }
}
Sample response with volume pricing
{
    "error": false,
    "data": {
        "availabilities": [
            {
                "dateTime": "2021-03-03 08:00:00",
                "vacancies": 0,
                "pricing": [
                    {
                        "pricegroup_id": 1,
                        "pricegroup_name": {
                            "english": "Per Adult",
                            "greek": "Per Adult",
                            "german": "Per Adult",
                            "italian": "Per Adult",
                            "russian": "Per Adult",
                            "french": "Per Adult"
                        },
                        "pricegroup_alias": "peradult",
                        "pricegroup_description": {
                            "english": "",
                            "greek": "",
                            "german": "",
                            "italian": "",
                            "russian": "",
                            "french": ""
                        },
                        "min_order": 1,
                        "primary": false,
                        "shared_availability": false,
                        "has_netprice": false,
                        "min_age": null,
                        "max_age": null,
                        "price": null,
                        "volume_pricing": [
                             {
                                 "paxFrom": 1,
                                 "paxTo": 40,
                                 "tierPrice": 50,
                                 "fixedPrice": 500
                             },
                             {
                                 "paxFrom": 41,
                                 "paxTo": 70,
                                 "tierPrice": 45,
                                 "fixedPrice": 800
                             },
                             {
                                 "paxFrom": 71,
                                 "paxTo": 100,
                                 "tierPrice": 40,
                                 "fixedPrice": 1000
                             }
                        ],
                        "tiered_pricing": []
                    },
                    {
                        "pricegroup_id": 4,
                        "pricegroup_name": {
                            "english": "Per Child",
                            "greek": "Per Child",
                            "german": "Per Child",
                            "italian": "Per Child",
                            "russian": "Per Child",
                            "french": "Per Child"
                        },
                        "pricegroup_alias": "perchild",
                        "pricegroup_description": {
                            "english": "",
                            "greek": "",
                            "german": "",
                            "italian": "",
                            "russian": "",
                            "french": ""
                        },
                        "min_order": 1,
                        "primary": false,
                        "shared_availability": false,
                        "has_netprice": false,
                        "min_age": 8,
                        "max_age": 15,
                        "price": "20.00",
                        "volume_pricing": [
                             {
                                 "paxFrom": 1,
                                 "paxTo": 50,
                                 "tierPrice": 10,
                                 "fixedPrice": 500
                             },
                             {
                                 "paxFrom": 51,
                                 "paxTo": 100,
                                 "tierPrice": 8
                                 "fixedPrice": 800
                             }
                        ],
                        "tiered_pricing": []
                    },
                    ...
                ]
            },
            ...
        ]
    }
}
Sample response with tiered pricing
{
    "error": false,
    "data": {
        "availabilities": [
            {
                "dateTime": "2021-03-03 08:00:00",
                "vacancies": 0,
                "pricing": [
                    {
                        "pricegroup_id": 1,
                        "pricegroup_name": {
                            "english": "Per Adult",
                            "greek": "Per Adult",
                            "german": "Per Adult",
                            "italian": "Per Adult",
                            "russian": "Per Adult",
                            "french": "Per Adult"
                        },
                        "pricegroup_alias": "peradult",
                        "pricegroup_description": {
                            "english": "",
                            "greek": "",
                            "german": "",
                            "italian": "",
                            "russian": "",
                            "french": ""
                        },
                        "min_order": 1,
                        "primary": false,
                        "shared_availability": false,
                        "has_netprice": false,
                        "min_age": null,
                        "max_age": null,
                        "price": null,
                        "volume_pricing": [],
                        "tiered_pricing": [
                             {
                                 "paxFrom": 1,
                                 "paxTo": 40,
                                 "tierPrice": 50,
                                 "fixedPrice": 500
                             },
                             {
                                 "paxFrom": 41,
                                 "paxTo": 70,
                                 "tierPrice": 45,
                                 "fixedPrice": 800
                             },
                             {
                                 "paxFrom": 71,
                                 "paxTo": 100,
                                 "tierPrice": 40,
                                 "fixedPrice": 1000
                             }
                        ]
                    },
                    {
                        "pricegroup_id": 4,
                        "pricegroup_name": {
                            "english": "Per Child",
                            "greek": "Per Child",
                            "german": "Per Child",
                            "italian": "Per Child",
                            "russian": "Per Child",
                            "french": "Per Child"
                        },
                        "pricegroup_alias": "perchild",
                        "pricegroup_description": {
                            "english": "",
                            "greek": "",
                            "german": "",
                            "italian": "",
                            "russian": "",
                            "french": ""
                        },
                        "min_order": 1,
                        "primary": false,
                        "shared_availability": false,
                        "has_netprice": false,
                        "min_age": 8,
                        "max_age": 15,
                        "price": "20.00",
                        "volume_pricing": [],
                        "tiered_pricing": [
                             {
                                 "paxFrom": 1,
                                 "paxTo": 50,
                                 "tierPrice": 10,
                                 "fixedPrice": 500
                             },
                             {
                                 "paxFrom": 51,
                                 "paxTo": 100,
                                 "tierPrice": 8
                                 "fixedPrice": 800
                             }
                        ]
                    },
                    ...
                ]
            },
            ...
        ]
    }
}
POST

Extras

Returns all extras available for the requested event and datetime. Extras are secondary options / add-ons that can be booked with each event selected. Each extra has a maximum quantity that can be booked and is only available for specific pricegroups of the event. Additionally, each extra might require an answer to a question before it can be booked, as determined by the ask_question field. Moreover, an extra might be allocated latitude and longitude parameters to be able to be tracked from Geolocation functionalities.

URLhttps://api-company.travelotopos.com/events/extras

Content-Typemultipart/form-data

FieldTypeRequiredExample
service_idIntegerYES15
event_idIntegerYES20
datetimeDatetimeYES2022-06-27 14:30
Sample response
{
    "error": false,
    "data": [
        {
            "extra_id": 1,
            "extra_alias": "champagne",
            "extra_title": {
                "english": "Champagne",
                "greek": "Champagne",
                "german": "Champagne",
                "italian": "Champagne",
                "russian": "Champagne",
                "french": "Champagne"
            },
            "extra_price": "50.00",
            "extra_longitude": "",
            "extra_latitude": "",
            "ask_question": false,
            "question": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "extra_voucherinfo": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "extra_quantity": 100,
            "pricegroups": [
                1,
                4,
                5
            ]
        },
        {
            "extra_id": 2,
            "extra_alias": "extrameal",
            "extra_title": {
                "english": "Extra Meal",
                "greek": "Extra Meal",
                "german": "Extra Meal",
                "italian": "Extra Meal",
                "russian": "Extra Meal",
                "french": "Extra Meal"
            },
            "extra_price": "20.00",
            "extra_longitude": "",
            "extra_latitude": "",
            "ask_question": true,
            "question": {
                "english": "Do you have any food allergies?",
                "greek": "Do you have any food allergies?",
                "german": "Do you have any food allergies?",
                "italian": "Do you have any food allergies?",
                "russian": "Do you have any food allergies?",
                "french": "Do you have any food allergies?"
            },
            "extra_voucherinfo": {
                "english": "",
                "greek": "",
                "german": "",
                "italian": "",
                "russian": "",
                "french": ""
            },
            "extra_quantity": 200,
            "pricegroups": [
                1,
                4,
                5
            ]
        }
    ]
}
Supplier-side endpoints

Reservations

GET

Get reservation

Retrieves the data of a reservation that is available for the API key provided.

URLhttps://api-company.travelotopos.com/reservations/reservation/{{reservation_code}}

Parameters None

Notes
  • QR code returns an SVG image that can be placed directly into the src property of an img HTML tag. This can be used to check in participants of the reservation directly from the Travelotopos app. (New feature – TBA)
Sample response
{
    "error": false,
    "data": {
        "reservation_id": 1234,
        "reservation_code": "R.82969",
        "reservation_secret": null,
        "price_total": "130.00",
        "created_at": "2022-03-03 10:17",
        "updated_at": "2022-03-03 10:18",
        "channel": "Test",
        "channelReservationCode": null,
        "channelAmount": 0,
        "channelExtraInfo": null,
        "reservation_status": "Completed",
        "payment_status": "Not Paid",
        "reservation_details": [
            {
                "reservationdetail_id": 2345,
                "service_id": 2,
                "event_id": 5,
                "datetime": "2022-03-04 14:00",
                "pricegroup_id": 1,
                "pricegroup_alias": "peradult",
                "price": "50.00",
                "created_at": "2022-03-03 10:18",
                "updated_at": null,
                "contact_name": "John Doe",
                "contact_email": "test@travelotopos.com",
                "contact_phone": "",
                "contact_comments": "",
                "qrCode": "data:image/svg+xml;base64,PHN...=="
            },
            {
                "reservationdetail_id": 2346,
                "service_id": 2,
                "event_id": 5,
                "datetime": "2022-03-04 14:00",
                "pricegroup_id": 1,
                "pricegroup_alias": "peradult",
                "price": "50.00",
                "created_at": "2022-03-03 10:18",
                "updated_at": null,
                "contact_name": "Mary Doe",
                "contact_email": "test@travelotopos.com",
                "contact_phone": "",
                "contact_comments": "",
                "qrCode": "data:image/svg+xml;base64,PHN...=="
            },
            {
                "reservationdetail_id": 2347,
                "service_id": 2,
                "event_id": 5,
                "datetime": "2022-03-04 14:00",
                "pricegroup_id": 2,
                "pricegroup_alias": "perchild",
                "price": "30.00",
                "created_at": "2022-03-03 10:18",
                "updated_at": null,
                "contact_name": "Little Doe",
                "contact_email": "test@travelotopos.com",
                "contact_phone": "",
                "contact_comments": "",
                "qrCode": "data:image/svg+xml;base64,PHN...=="
            }
        ]
    }
}
POST

Add reservation

Starts a new reservation. Each reservation has a unique Reservation Code identifier. It functions as a package and, as such, can contain different services, events, datetimes and pricegroups.

URLhttps://api-company.travelotopos.com/reservations/add_reservation

Parameters None

Notes
  • All reservations start with a Pending status and remain as such until they are Completed, Cancelled or Deprecated. In addition, pending reservations are automatically marked as deprecated if they are not completed in a specific amount of time that is set up by the administrator, so as to free availability space.
  • reservationExpiration time is in UTC.
Sample response
{
    "error": false,
    "data": {
        "reservation_code": "R.F9E94",
        "reservation_base_price": 0,
        "reservation_price": 0,
        "reservation_percent_discount": 0,
        "reservation_value_discount": 0,
        "reservation_vat_value": 0,
        "reservation_vat_price": 0,
        "reservation_final_price": 0,
        "reservationStatus_id": 1,
        "affiliation_id": null,
        "api_key": "4AA4C824-2D78-073A-B92A-9595E2439D60",
        "reservationtype_id": 3,
        "channelReservationCode": null,
        "reservation_comments": null,
        "channelAmount": null,
        "tour_language": null,
        "channelExtraInfo": null,
        "channelJson": null,
        "reservation_secret": "3cbad207e7fa4c9fc947db3b92a5ad79",
        "paid_third_party": 1,
        "channel": "Test",
        "reservation_id": "2942",
        "reservationExpiration": "2023-08-30T12:16:02Z"
    }
}
POST

Add reservation details

Adds a reservation item (detail) to the reservation package. Each reservation detail refers to one service, event, datetime and pricegroup.

URLhttps://api-company.travelotopos.com/reservations/add_reservationdetails

Content-Typemultipart/form-data

FieldTypeRequiredExample
reservation_idIntegerYES20
digestVarcharYES
service_idIntegerYES15
event_idIntegerYES27
datetimeDatetimeYES2022-03-16 10:30
encoded_pricegroupAmountsJsonYES{"1": 2, "3": 1}
contact_dataJsonYES[{"name": "John Doe", "email": "johndoe@travelotopos.com", "phone": "", "comments": "The father"}, ...]
specialcode_codeVarcharNO2AE061D6-B1BF-91F4-2CFE-46DA6B611A88
Adding contact data

Each contact JSON passed through your requests can contain the following fields:

  • name: REQUIRED
  • email: REQUIRED
  • surname: OPTIONAL
  • phone: OPTIONAL
  • mobile: OPTIONAL
  • birthdate: OPTIONAL — format: YYYY-MM-DD
  • identification_type: OPTIONAL — values allowed: identity, passport, drivingLicence
  • identification_value: OPTIONAL
  • sex: OPTIONAL — values allowed: male, female
  • room_number: OPTIONAL
  • city: OPTIONAL
  • hotel: OPTIONAL
  • country: OPTIONAL — values allowed: country ISO 3166-1 Alpha-2 codes, e.g. GR, US
  • comments: OPTIONAL
Notes
  • digest is calculated as follows: base64(sha1(reservation_id + reservation_code + reservation_secret)) where the sha1 value is returned in raw binary format with a length of 20.
  • Contact_data is an array of contacts. Each contact includes the fields: name (i.e. the full name of the contact), email, phone, comments. The fields name and email are required for each contact. If the selected service does not support multiple contact information, the first contact is used for all participants. Otherwise, each contact is allocated to each pricegroup type respectively.
  • The datetime field's format is YYYY-mm-dd H:i.
  • The encoded_pricegroupAmounts field contains each pricegroup id to be booked as a key, followed by the number of participants of this pricegroup type.
  • The new reservation details' ids are returned in the response if the API call was successful.
Sample response
{
    "error": false,
    "data": [
        "4011"
    ]
}
POST

Add extras

Adds a reservation extra to a specific reservation item (detail) in the reservation package.

URLhttps://api-company.travelotopos.com/reservations/add_extras

Content-Typemultipart/form-data

FieldTypeRequiredExample
reservation_idIntegerYES20
digestVarcharYES
service_idIntegerYES15
event_idIntegerYES27
datetimeDatetimeYES2022-03-16 10:30
encoded_extrasJsonYES{"1": {"qty": 2, "answer": "yes"}, "2": 2}
Notes
  • digest is calculated the same way as for the reservations/add_reservationdetails endpoint.
  • The datetime field's format is YYYY-mm-dd H:i.
  • The datetime and event_id field values must correspond to at least one event detail of the reservation with the same field value combination for the extra to be properly mapped inside the reservation (i.e. no extras should be added for a datetime and event_id field values combination not present in any of the reservation’s reservation details).
  • The encoded_extras field contains each pricegroup id to be booked as a key, followed by the number of participants of this pricegroup type.
  • The new reservation extras' ids are returned in the response if the API call was successful.
Sample response
{
    "error": false,
    "data": [
        "218"
    ]
}
POST

Update billing details

Adds or updates billing and invoice information of a reservation.

URLhttps://api-company.travelotopos.com/reservations/updateBillingDetails

Content-Typemultipart/form-data

FieldTypeRequiredExample
reservation_idINTYES123
country_nameVarcharNOGreece
billing_firstnameVarcharYESJohn
billing_surnameVarcharYESDoe
billing_addressVarcharYESAggelou Metaxa 15
billing_cityVarcharYESGlyfada
billing_postcodeVarcharYES16232
billing_stateVarcharYESAttiki
billing_companyVarcharNOTravelotopos
billing_professionVarcharNOSoftware House
billing_vatVarcharNO123456789
billing_taxVarcharNODOY Glyfadas
Sample response
{
    "error": false,
    "data": "success"
}
POST

Checkout

Returns checkout data, i.e. the current basket.

URLhttps://api-company.travelotopos.com/reservations/checkout

Content-Typemultipart/form-data

FieldTypeRequiredExample
reservation_idIntegerYES20
Sample response
{
    "error": false,
    "data": {
        "subtotal_price": "40.65",
        "subtotal_vat_price": "9.35",
        "total_price_with_vat": "50.00",
        "payable_subtotal_price": "40.65",
        "payable_subtotal_vat_price": "9.35",
        "payabletotal_price_with_vat": "50.00",
        "reservation_vat_price_array": {
            ".2300": "9.35"
        },
        "reservation_payable_vat_price_array": {
            ".2300": 9.35
        },
        "items": [
            {
                "service_id": 2,
                "event_id": 5,
                "eventDetail_id": 70791,
                "pricegroup_id": 1,
                "reservationstatus_id": 4,
                "paymentstatus_id": 3,
                "specialcode_id": null,
                "reservationDetail_alias": null,
                "reservationDetail_base_price": "40.6504",
                "reservationDetail_percent_discount": ".0000",
                "reservationDetail_value_discount": ".0000",
                "reservationDetail_price": "40.6504",
                "reservationDetail_vat_value": ".2300",
                "reservationDetail_vat_price": "9.3496",
                "reservationDetail_final_price": "50.0000",
                "reservationDetail_comments": null,
                "eventDetails_datetime": "2022-02-09 09:00:00.000",
                "reservationDetail_data": null,
                "event_cancellation_policy": "",
                "is_netprice": 0,
                "always_available": 0,
                "supervisor_id": null,
                "server_pricegroup_id": null,
                "canceled_at": null,
                "voucher_reference": null,
                "user_id": null,
                "api_key": "******************",
                "admin_note": null,
                "channelReservationCode": null,
                "channelAmount": null,
                "channelExtraInfo": null,
                "channelJson": null,
                "risky": 0,
                "tickets": null,
                "is_read": 0,
                "paid_third_party": 1,
                "user_platform": null,
                "user_browser": null,
                "user_device": null,
                "channel": "Test",
                "tour_language": null,
                "reservationdetail_id": 4011,
                "country_id": null,
                "reservationcontact_birthdate": null,
                "reservationcontact_identificationType_id": null,
                "reservationcontact_identification_value": null,
                "sex_id": null,
                "reservationcontact_roomNumber": null,
                "reservationcontact_bookingReferenceNumber": null,
                "reservationcontact_city": null,
                "reservationcontact_hotel": null,
                "reservationcontact_checked_in": 0,
                "reservationcontact_company": null,
                "reservationcontact_note": null,
                "pricegroup_name": {
                    "english": "Per Person",
                    "greek": "Per Person",
                    "german": "Per Person",
                    "italian": "Per Person",
                    "russian": "Per Person",
                    "french": "Per Person"
                },
                "pricegroup_alias": "perperson",
                "event_title": {
                    "english": "Event 5",
                    "greek": "Event 5",
                    "german": "Event 5",
                    "italian": "Event 5",
                    "russian": "Event 5",
                    "french": "Event 5"
                },
                "service_image": "40c910272f2508328c4e5f76beef254b.jpg",
                "service_title": {
                    "english": "Service 2",
                    "greek": "Service 2",
                    "german": "Service 2",
                    "italian": "Service 2",
                    "russian": "Service 2",
                    "french": "Service 2"
                },
                "provider_id": 2,
                "contractStatus_alias": null,
                "partner_domain": null,
                "paymentstatus_alias": "no",
                "paymentstatus_name": "No",
                "reservationStatus_alias": "completed",
                "reservationStatus_name": {
                    "english": "Completed",
                    "greek": "Ολοκληρωμένη",
                    "german": "Completed",
                    "italian": "Completed",
                    "russian": "Completed",
                    "french": "Completed"
                },
                "on_request": 0,
                "is_no_price": 0,
                "is_on_request": 0,
                "min_order": "1.0000",
                "reservationdetail_ids": [
                    4011
                ],
                "quantity": 1,
                "total": "40.65",
                "vat_price": "9.35",
                "payable_total": "40.65",
                "payable_vat": "9.35",
                "modal_info": [
                    {
                        "name": "John Doe",
                        "surname": null,
                        "email": "johndoe@travelotopos.com",
                        "reservationdetail_id": 4011,
                        "phone": "",
                        "birthdate": null,
                        "country_id": null,
                        "identification": null,
                        "sex_id": null,
                        "city": null,
                        "hotel": null,
                        "roomNumber": null,
                        "bookingReferenceNumber": null,
                        "company": null,
                        "reservationcontact_id": 3992
                    }
                ],
                "can_cancel": true,
                "specialcode_code": null,
                "total_with_vat": 50,
                "payable_total_with_vat": 50
            }
        ]
    }
}
POST

Complete

Completes the reservation and returns the reservation_code.

URLhttps://api-company.travelotopos.com/reservations/complete

Content-Typemultipart/form-data

FieldTypeRequiredExample
reservation_idIntegerYES20
channelReservationCodeVarcharNOREF.123123123
channelAmountDecimalNO80.99
channelExtraInfoVarcharNO<p>Will be staying at the Hotel Athens, please arrange pickup.</p>
Notes
  • The channelReservationCode field is used to map the code used to identify the reservation in your system to the Travelotopos reservation.
  • The channelAmount field is used to store a fixed reservation price, overwriting the price calculated by the Travelotopos API.
  • The channelExtraInfo field is used to store extra reservation data in HTML form. This HTML will be displayed in the reservation overview in the Travelotopos administrator panel.
Sample response
{
    "error": false,
    "data": {
       "reservation_code": "R.F9E94"
    }
}
POST

Send emails on complete

Sends all emails of a completed reservation to the appropriate recipients. These include the customer, the admin and all providers of services booked in this reservation.

URLhttps://api-company.travelotopos.com/reservations/send_emails_on_complete

Content-Typemultipart/form-data

FieldTypeRequiredExample
reservation_idIntegerYES20
Sample response
{
    "error": false,
    "data": true
}
POST

Cancel reservation

Cancels an existing reservation and sends a cancellation email to the client. It can be run twice to resend a cancellation email to the client.

URLhttps://api-company.travelotopos.com/reservations/cancelReservation

Content-Typemultipart/form-data

FieldTypeRequiredExample
reservation_codeStringYES'R.12345'
send_emailStringNO'false' (default 'true')
Sample response
{
    "error": false,
    "data": "Cancelled"
}
POST

Deprecate reservation (Force expiration)

Expires a pending reservation in order to free availability faster than the expiration timer.

URLhttps://api-company.travelotopos.com/reservations/deprecateReservation

Content-Typemultipart/form-data

FieldTypeRequiredExample
reservation_codeStringYES'R.12345'
Sample response
{
    "error": false,
    "data": "success"
}
Supplier-side endpoints

General

GET

Get areas

Returns all areas available in Travelotopos. The data is returned in tree structure format, where the parent nodes refer to counties (nomoi) and their children nodes are the areas that exist inside each county (nomos).

URLhttps://api-company.travelotopos.com/general/areas

Content-Typeapplication/json

Parameters None

Sample response
{
    "error": false,
    "data": {
        "1": {
            "nomosId": 1,
            "nomosTitle": {
                "english": "Achaia",
                "greek": "Αχαΐα",
                "german": "Achaia",
                "italian": "Achaia",
                "russian": "Achaia",
                "french": "Achaia"
            },
            "areas": [
                {
                    "parentId": 1,
                    "areaId": 1,
                    "areaTitle": {
                        "english": "Achaia",
                        "greek": "Αχαΐα",
                        "german": "Achaia",
                        "italian": "Achaia",
                        "russian": "Achaia",
                        "french": "Achaia"
                    }
                }
            ]
        },
        "258": {
            "nomosId": 258,
            "nomosTitle": {
                "english": "Agios Nikolaos",
                "greek": "Άγιος Νικόλαος",
                "german": "Agios Nikolaos",
                "italian": "Agios Nikolaos",
                "russian": "Agios Nikolaos",
                "french": "Agios Nikolaos"
            },
            "areas": [
                {
                    "parentId": 258,
                    "areaId": 258,
                    "areaTitle": {
                        "english": "Agios Nikolaos",
                        "greek": "Άγιος Νικόλαος",
                        "german": "Agios Nikolaos",
                        "italian": "Agios Nikolaos",
                        "russian": "Agios Nikolaos",
                        "french": "Agios Nikolaos"
                    }
                }
            ]
        },
        ...

Ready to connect to Travelotopos?

Request API access and our team will get you set up with credentials and documentation.