API Documentation

Every request must include the apikey (given by us) and Language Headers.
Default language value: English

All the methods support json output format.

Services

Description:
Returns the available Service Categories. Service categories are related to Service Groups through the providerIds field.

Note: Each service belongs to a Service Group (called Provider in older versions). Each Service Group can belong to one or more Service Categories, so using the providerIds field returned by this endpoint and the provider_id field of the service, you can determine the Service Categories related to a Service.

Url: https://api-company.travelotopos.com/general/pcategories
Method: GET
Parameters: None

Sample Response:

{
    "error": false,
    "data": {
        "1": {
            "data": {
                "pCategory_id": 1,
                "pCategory_alias": "providercategory1",
                "pCategory_name": {
                    "english": "Provider Category 1",
                    "greek": "Provider Category 1",
                    "german": "Provider Category 1",
                    "italian": "Provider Category 1",
                    "russian": "Provider Category 1",
                    "french": "Provider Category 1"
                },
                "pCategory_sort": 1,
                "providerIds": [
                    "1"
                ]
            },
            "children": {}
        },
        "2": {
            "data": {
                "pCategory_id": 2,
                "pCategory_alias": "providercategory2",
                "pCategory_name": {
                    "english": "Provider Category 2",
                    "greek": "Provider Category 2",
                    "german": "Provider Category 2",
                    "italian": "Provider Category 2",
                    "russian": "Provider Category 2",
                    "french": "Provider Category 2"
                },
                "pCategory_sort": 2,
                "providerIds": [
                    "2"
                ]
            },
            "children": {}
        }
    }
}

Description:
Returns all Services.

Url: https://api-company.travelotopos.com/services/services
Method: GET
Parameters: None

Sample Response:

{
    "error": false,
    "data": {
        "05590ECC-AC00-7544-BB2B-D0839893F769": {
            "service_id": 1,
            "provider_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_image": "cffdfdadd8ed426412b126e6bdda6709.jpg",
            "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,
            "audit_code": "0",
            "audit_is_update": 0,
            "gallery_filename": "cffdfdadd8ed426412b126e6bdda6709.jpg"
        },
        "04156C73-85A0-93AB-64FE-F75F4C5F3224": {
            "service_id": 2,
            "provider_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_image": "40c910272f2508328c4e5f76beef254b.jpg",
            "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,
            "audit_code": "0",
            "audit_is_update": 0,
            "gallery_filename": "1a4bf73b25156db7bafa8670cdba9468.jpg"
        }
    }
}

Description:
Returns a specific service.

Url: https://api-company.travelotopos.com/services/service
Content-Type: multipart/form-data
Method: POST
Parameters:
Field                           Type        Required     Example
service_id                   Integer    NO              2
service_globalAlias    String      NO              s.2

*Either service_id or service_globalAlias is required. If both exist, service_globalAlias takes priority.

Sample Response:

{
    "error": false,
    "data": {
        "audit_code": "0",
        "contract_ids": null,
        "server_contract_ids": null,
        "partner_id": null,
        "partner_key": null,
        "partner_domain": null,
        "contract_id": null,
        "server_contract_id": null,
        "discount_type": null,
        "discount_multiplier": null,
        "discount_value": null,
        "service_id": 2,
        "server_service_id": null,
        "provider_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_image": "40c910272f2508328c4e5f76beef254b.jpg",
        "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,
        "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
            }
        }
    }
}

Description:
Returns all uploaded service image urls.

Url: https://api-company.travelotopos.com/services/gallery
Method: POST
Content-Type: multipart/form-data
Parameters:
Field            Type        Required     Example
service_id    Integer    YES            15

Sample Response:

{
    "error": false,
    "data": [
        "company.travelotopos.com/files/test/resources/e2677b11c8357016965f8a5e7dd910ce.jpg",
        "company.travelotopos.com/files/test/resources/40c910272f2508328c4e5f76beef254b.jpg",
        "company.travelotopos.com/files/test/resources/4963c1002251284c40cfb56716873bfc.jpg",
        "company.travelotopos.com/files/test/resources/1a4bf73b25156db7bafa8670cdba9468.jpg",
        "company.travelotopos.com/files/test/resources/0be33b1cec138158105257a1455d8065.jpg",
        "company.travelotopos.com/files/test/resources/ff8d3aea7cc62de9fc55b043567ea6e6.jpg"
    ]
}

Events

Description:
Return all events.

Url: https://api-company.travelotopos.com/events/events
Method: POST
Content-Type: multipart/form-data
Parameters:
Field            Type       Required    Example
service_id    Integer    YES           15

Note: The event_daysbefore field refers to 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_weekdays": null,
            "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_advancedAvailability": "[{\"dateFrom\":\"10\\/01\\/2021\",\"dateTo\":\"01\\/08\\/2021\",\"times\":[\"08:00\",\"09:00\"],\"days\":[\"1\",\"2\",\"3\",\"4\",\"5\"]},{\"dateFrom\":\"11\\/08\\/2021\",\"dateTo\":\"10\\/01\\/2022\",\"times\":[\"10:00\",\"11:00\"],\"days\":[\"1\",\"2\",\"3\",\"4\",\"5\"]},{\"dateFrom\":\"11\\/01\\/2022\",\"dateTo\":\"18\\/01\\/2022\",\"times\":[\"09:00\",\"10:00\",\"11:00\"],\"days\":[\"1\",\"2\",\"3\",\"4\",\"5\"]}]",
            "event_availability": "advanced",
            "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": "2021-01-01 09:00:00.000",
            "event_closetime": "2021-01-01 18:00:00.000",
            "event_duration": 60,
            "event_weekdays": "1,2,3,4,5,6",
            "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_advancedAvailability": "[{\"dateFrom\":\"08\\/01\\/2021\",\"dateTo\":\"08\\/01\\/2021\",\"times\":null,\"days\":null}]",
            "event_availability": "custom",
            "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": "2022-01-01 09:00:00.000",
            "event_closetime": "2022-01-01 17:00:00.000",
            "event_duration": 60,
            "event_weekdays": "1,2,3,4,5",
            "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_advancedAvailability": "[{\"dateFrom\":\"08\\/01\\/2021\",\"dateTo\":\"08\\/01\\/2021\",\"times\":[\"00:00\"],\"days\":[\"0\"]}]",
            "event_availability": "custom",
            "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
        }
    }
}

Description:
Returns a specific event.

Url: https://api-company.travelotopos.com/events/event
Method: POST
Content-Type: multipart/form-data
Parameters:
Field              Type         Required     Example
event_id         Integer     YES            27
service_id      Integer     YES            15

Note: The event_daysbefore field refers to 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_weekdays": null,
        "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_advancedAvailability": "[{\"dateFrom\":\"10\\/01\\/2021\",\"dateTo\":\"01\\/08\\/2021\",\"times\":[\"08:00\",\"09:00\"],\"days\":[\"1\",\"2\",\"3\",\"4\",\"5\"]},{\"dateFrom\":\"11\\/08\\/2021\",\"dateTo\":\"10\\/01\\/2022\",\"times\":[\"10:00\",\"11:00\"],\"days\":[\"1\",\"2\",\"3\",\"4\",\"5\"]},{\"dateFrom\":\"11\\/01\\/2022\",\"dateTo\":\"18\\/01\\/2022\",\"times\":[\"09:00\",\"10:00\",\"11:00\"],\"days\":[\"1\",\"2\",\"3\",\"4\",\"5\"]}]",
        "event_availability": "advanced",
        "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
    }
}

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

Url: https://api-company.travelotopos.com/events/batchAvailability
Method: POST
Content-Type: multipart/form-data
Parameters:
Field                  Type       Required    Example
service_id          Integer     YES            15
event_id             Integer    YES             22
fromDateTime    Date        YES            2019-11-01
toDateTime        Date        YES            2019-11-30
pricing                Boolean   NO             true

Note 1: The min_order field refers to the minimum number of participants of this type required to book this event.
Note 2: The primary field is used to identify the primary pricegroup. This pricegroup is required to be booked at least once to book this event.
Note 3: 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.
Note 4: Some products support volume pricing, which means that their prices vary based on the number of participants booked. When a product supports volume pricing, the response JSON will contain a “volume_pricing” field. In such cases, the “volume_pricing” field should be used to determine pricing instead of the “price” field.
Note 5: 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.
Note 6: You are not allowed to ask for availability for more than 31 days.

Sample Response without Pricing:

{
    "error": false,
    "data": {
        "availabilities": [
            {
                "dateTime": "2021-03-03 08:00:00",
                "vacancies": 0
            },
            {
                "dateTime": "2021-03-03 09:00:00",
                "vacancies": 0
            },
            {
                "dateTime": "2021-03-04 08:00:00",
                "vacancies": 0
            },
            {
                "dateTime": "2021-03-04 09:00:00",
                "vacancies": 0
            },
            ...
        ]
    }
}

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,
                        "price": "100.00",
                        "volume_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,
                        "price": "20.00",
                        "volume_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,
                        "price": null,
                        "volume_pricing": [
                             {
                                 "paxFrom": 1,
                                 "paxTo": 40,
                                 "tierPrice": "50.0000"
                             },
                             {
                                 "paxFrom": 41,
                                 "paxTo": 70,
                                 "tierPrice": "45.0000"
                             },
                             {
                                 "paxFrom": 71,
                                 "paxTo": 100,
                                 "tierPrice": "40.0000"
                             }
                        ]
                    },
                    {
                        "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,
                        "price": "20.00",
                        "volume_pricing": [
                             {
                                 "paxFrom": 1,
                                 "paxTo": 50,
                                 "tierPrice": "10.0000"
                             },
                             {
                                 "paxFrom": 51,
                                 "paxTo": 100,
                                 "tierPrice": "8.0000"
                             }
                        ]
                    },
                    ...
                ]
            },
            ...
        ]
    }
}

Reservations

Description:
Retreives and displays the data of a reservation that is available for the API key provided.

Url: https://api-company.travelotopos.com/reservations/reservation/{{reservation_code}}
Method: GET
Parameters: None

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": ""
            },
            {
                "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": ""
            },
            {
                "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": ""
            }
        ]
    }
}

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

Url: https://api-company.travelotopos.com/reservations/add_reservation 
Method: POST
Parameters: None

Note: 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 if time that is setup by the administrator, so as to free availability space.

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"
    }
}

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

Url: https://api-company.travelotopos.com/reservations/add_reservationdetails
Method: POST
Content-Type: multipart/form-data
Parameters:
Field                                            Type          Required     Example
reservation_id                             Integer       YES            20
digest                                         Varchar      YES
service_id                                   Integer      YES             15
event_id                                      Integer      YES             27
datetime                                      Datetime   YES             2022-03-16 10:30
encoded_pricegroupAmounts    Json          YES             {“1”: 2, “3”: 1}
contact_data                              Json          YES             [{“name”: “John Doe”, “email”: johndoe@travelotopos.com”, “phone” : “”, “comments”: “The father “},{“name”: “Mary Doe”, “email”: marydoe@travelotopos.com”, “phone” : “”, “comments”: “The mother”},{“name”: “Little Doe”, “email”: johndoe@travelotopos.com”, “phone” : “”, “comments”: “The child”}]
specialcode_code                      Varchar      NO              2AE061D6-B1BF-91F4-2CFE-46DA6B611A88

Note 1: 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.
Note 2: Contact_data  is an array of contacts. Each contact includes the fields: name(i.e. the fullname of the contact), email, phone, comments. The field 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 (In the example above, pricegroups with id 1 will have the names John Doe and Mary Doe respectively and the pricegroup with id 3 will have the name Little Doe).
Note 3: The datetime field’s format is YYYY-mm-dd H:i.
Note 4: The encoded_pricegroupAmounts field contains each pricegroup id to be booked as a key, followed by the number of participants of this pricegroup type.
Note 5: The new reservation details’ ids are returned in the response if the API call was successfull.

Sample Response:

{
    "error": false,
    "data": [
        "4011"
    ]
}

Description:
Adds or updates billing and invoice information of a reservation.

Url: https://api-company.travelotopos.com/reservations/updateBillingDetails
Method: POST
Content-Type: multipart/form-data
Parameters:
Field                            Type         Required     Example
reservation_id             INT           YES             123
country_name             Varchar    NO               Greece
billing_firstname          Varchar    YES             John
billing_surname           Varchar    YES             Doe
billing_address            Varchar    YES             Aggelou Metaxa 15
billing_city                   Varchar    YES             Glyfada
billing_postcode          Varchar    YES             16232
billing_state                 Varchar    YES             Attiki
billing_company          Varchar    NO               Travelotopos
billing_profession        Varchar    NO               Software House
billing_vat                    Varchar    NO               123456789
billing_tax                    Varchar    NO               DOY Glyfadas

Sample Response:

{
    "error": false,
    "data": "success"
}

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

Url: https://api-company.travelotopos.com/reservations/checkout
Method: POST
Content-Type: multipart/form-data
Parameters:
Field                    Type        Required     Example
reservation_id     Integer     YES            20

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
            }
        ]
    }
}

Description:
Completes the reservation and returns the reservation_code.

Url: https://api-company.travelotopos.com/reservations/complete
Method: POST
Content-Type: multipart/form-data
Parameters:
Field                                       Type         Required     Example
reservation_id                        Integer      YES            20
channelReservationCode     Varchar      NO             REF.123123123
channelAmount                     Decimal     NO             80.99
channelExtraInfo                   Varchar      NO             <p>Will be staying at the Hotel Athens, please arrange pickup.</p>

Note 1: The channelReservationCode field is used to map the code used to identify the reservation in your system to the Travelotopos reservation.
Note 2: The channelAmount field is used store a fixed reservation price, overwriting the price calculated by the Travelotopos API.
Note 3: The channelExtraInfo field is used 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": "R.F9E94"
}

Description:
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 reservations.

Url: https://api-company.travelotopos.com/reservations/send_emails_on_complete
Method: POST
Content-Type: multipart/form-data
Parameters:
Field                    Type       Required    Example
reservation_id     Integer    YES           20

Sample Response:

{
    "error": false,
    "data": true
}

Description:
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.

Url: https://api-company.travelotopos.com/reservations/cancelReservation
Method: POST
Content-Type: multipart/form-data
Parameters:
Field                       Type        Required     Example
reservation_code   String       YES            ‘R.12345’

Sample Response:

{
    "error": false,
    "data": "Cancelled"
}

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

Url: https://api-company.travelotopos.com/reservations/deprecateReservation
Method: POST
Content-Type: multipart/form-data
Parameters:
Field                       Type         Required     Example
reservation_code   String       YES             ‘R.12345’

Sample Response:

{
    "error": false,
    "data": "success"
}