Integration Options

We can offer various integration options of booking to suit your needs.

  • Links - a personal link to our booking engine;
  • Banners - you can use your personal link with one of our banners or request a personal banner made just for you;
  • Form Widget - embed our booking form into your page;

One of these options fits you, if you run a website that has visitors who are interested in alpine sports or just travel to Alpine region, but who would like a transfer options to ski resort or airport. Then you can well place our link, banner or form Widget into your page to offer your visitors the chance to book transfers. For each booking you earn a commission on every sale made through your page.

You can choose API integration, if you have your own booking platform for your business. Use our API to integrate our booking engine into your own system and save time in the management and arrangement of your transfer bookings.

We offer a range of linking options for you to be able to sell transfers, as well as you can track every sale and earned commisions in your partner panel. After becoming a partner you will receive your own promo code and API key and access to your partner panel. Just choose from several integration options to use our booking engine.

If you would like more detailed information about benefits or integration, please, email us to fr@amitours.com.


Your personal link contains you promo code, for example, https://www.alps2alps.com/?promo_code=your_promo_code.

You can share this link or post it in your own page. You will receive commission for every booking made through your link.


Banners

You can use your personal link with one of our banners or request a personal banner. Personal banner is made just for you and will fit perfectly with your webpage or social media page.

Below you can see examples of our banners:


Form Widget

You can use our form widget to insert Alps2Alps booking form straight into your website.

Insert the following code where you want the form to appear (exact location inside the <body> tag) and replace "your_promo_code" with your personal promo code.

<script src="https://www.alps2alps.com/js/widget.min.js" data-promo-code="your_promo_code"></script>

You can see example of the embeded widget below:



Widget Additional Options

You can also set additional options for the widget. There is possibility to set pre-filled Pick-Up Location and/or Drop-Off Destination fields of booking form. To set the desired locations you need to use the code generator placed below. Just enter your promo code, select your locations and get your widget's generated HTML code under the form.


API

You can use our API to seamlessly integrate our booking engine into your own system.

Please find the API documentation below.


B2B API v1 has been retired.

Production base URL: https://www.amitours.com/api/v2
Development base URL: https://sandbox.amitours.com/api/v2

Accepted Content-Type header values: application/json, application/x-www-form-urlencoded, multipart/form-data.

To gain access to your demo account and development API key, go to your Profile > Integration and press the "Get Sandbox Access" button.
To gain access to live API, please contact sales@amitours.com.

Authorization

POST /token Creates and/or returns an access token  

Method creates and returns an access token that needs to be used to make authorized API calls.
To make an authorized API call add Authorization: Bearer <token> header to your request.

Access token is valid for one day (24 hours) after creation.

EXAMPLE INPUT

{
  "api_key": "your_api_key",
  "api_secret": "your_api_secret"
}

EXAMPLE OUTPUT

{
  "token": "your_access_token",
  "created_at": 1785265671,
  "expires_at": 1785352071
}

Private / Shared Transfers

🔑  GET /destinations Returns all transfer destinations  

Method returns all transfer destination names mapped by corresponding destination codes. Codes may contain a season identifier (-s for summer or -w for winter) at the end - this is optional and the code can be used with or without this identifier, for example, both resort-635-w and resort-635 are valid. Season identifier can be used to approximate availability without making a request.

Destination codes must be used for fields route_from_code, route_to_code and return_route_to_code when creating a transfer request.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "airport-15": "Annecy Meythet Airport",
  "airport-22": "Basel Airport",
  "airport-38": "Bergamo airport (Milan Orio)",
  "airport-3": "Chambery Airport",
  ...
  "resort-264": "Zillertal",
  "resort-435": "Zinal",
  "resort-204": "Zug, CH",
  "resort-200": "Zuoz",
  ...
}
🔑  POST /transfer Creates and returns private or shared transfer and available offer data  

All prices are returned in EUR.

If the request is valid but the transfer is not available for booking, the response will return HTTP status code 422 and contain a single parameter - error.

Each offer in TransferSelection includes a type attribute (private or shared).

Transfer attributes:

Attribute Required / Optional Default Value
type string optional private Transfer type - private, shared, or any. When any, both private and shared offers are returned.
is_return boolean optional 1 Indicator for whether the service is a round-trip.
route_from_code string required Pick-up destination code.
route_to_code string required Drop-off destination code.
return_route_to_code string optional route_from_code Drop-off destination code for return transfer of a round-trip service. Can be used to have a different return destination for a round-trip service.
outbound_date string required
outbound_time_hours integer required
outbound_time_minutes integer required
outbound_selected_time_is_flight boolean optional 1 Indicator for whether the selected time is a flight time (as opposed to actual requested pick-up time).
return_date string optional (required when is_return = 1)
return_time_hours integer optional (required when is_return = 1)
return_time_minutes integer optional (required when is_return = 1)
return_selected_time_is_flight boolean optional 1 Indicator for whether the selected time is a flight time (as opposed to actual requested pick-up time).
adult_count integer required 1
children_count integer optional 0
return_adult_count integer optional (required when is_return = 1) 1
return_children_count integer optional 0

All AdditionalInformation attributes are optional and have no default value:

booster_seat_count integer Child Booster Seat – Suitable for 19kg/42lbs – 36kg/79lbs and 125cm or taller (approx. 6-11yrs).
child_seat_count integer Child Seat – Suitable for 9kg/20lbs to 18kg/40lbs (approx. 1-5yrs)
ski_count integer
snowboard_count integer
return_booster_seat_count integer Child Booster Seat – Suitable for 19kg/42lbs – 36kg/79lbs and 125cm or taller (approx. 6-11yrs).
return_child_seat_count integer Child Seat – Suitable for 9kg/20lbs to 18kg/40lbs (approx. 1-5yrs)
return_ski_count integer
return_snowboard_count integer
accommodation_name string
accommodation_address string
accommodation_coordinates string Expected coordinate format is comma separated decimal degrees, for example, 46.341883, 11.539972
flight_number string
return_flight_number string
additional_information string

This method requires authorization. Add Authorization: Bearer <token> header to your request.

MINIMAL ONE-WAY EXAMPLE INPUT

{
  "Transfer": {
    "is_return": 0,
    "route_from_code": "airport-1",
    "route_to_code": "resort-22",
    "outbound_date": "2023-12-23",
    "outbound_time_hours": 11,
    "outbound_time_minutes": 5,
    "adult_count": 2
  },
  "AdditionalInformation": []
}

MINIMAL ROUND-TRIP EXAMPLE INPUT

{
  "Transfer": {
    "route_from_code": "airport-1",
    "route_to_code": "resort-22",
    "outbound_date": "2023-12-23",
    "outbound_time_hours": 11,
    "outbound_time_minutes": 5,
    "return_date": "2024-01-05",
    "return_time_hours": 21,
    "return_time_minutes": 0,
    "adult_count": 2,
    "return_adult_count": 2
  },
  "AdditionalInformation": []
}

Full Example

EXAMPLE INPUT

{
  "Transfer": {
    "type": "private",
    "is_return": 1,
    "route_from_code": "airport-1",
    "route_to_code": "resort-22",
    "return_route_to_code": "airport-3",
    "outbound_date": "2023-12-23",
    "outbound_time_hours": 11,
    "outbound_time_minutes": 5,
    "outbound_selected_time_is_flight": 1,
    "return_date": "2024-01-05",
    "return_time_hours": 21,
    "return_time_minutes": 0,
    "return_selected_time_is_flight": 1,
    "adult_count": 2,
    "children_count": 1,
    "return_adult_count": 2,
    "return_children_count": 1
  },
  "AdditionalInformation": {
    "booster_seat_count": 1,
    "child_seat_count": 0,
    "ski_count": 1,
    "snowboard_count": 0,
    "return_booster_seat_count": 1,
    "return_child_seat_count": 0,
    "return_ski_count": 1,
    "return_snowboard_count": 1,
    "accommodation_name": "Hotel Name",
    "accommodation_address": "Hotel Address",
    "accommodation_coordinates": "46.341883, 11.539972",
    "flight_number": "FL123",
    "return_flight_number": "FL321",
    "additional_information": ""
  }
}

EXAMPLE OUTPUT

{
  "Transfer": {
    "id": 123456,
    "type": "private",
    "discount_applied": 1,
    "TransferSelection": {
      "outbound": {
        "from": "Geneva Airport",
        "to": "Auris en Oisans Grandes Rousses",
        "flight_date_time": "2023-12-23 11:05:00",
        "selected_time_is_flight": 1,
        "offers": {
          "requested-2": {
            "pick_up_date_time": "2023-12-23 11:05:00",
            "price": 601.8,
            "travel_time": "03:50:00",
            "arrival_date_time": "2023-12-23 14:55:00",
            "waiting_time": "",
            "vehicle_type_id": 2,
            "type": "private"
          },
          "off_peak-0-2": {
            "pick_up_date_time": "2023-12-23 14:00:00",
            "price": 559.3,
            "travel_time": "03:50:00",
            "arrival_date_time": "2023-12-23 17:50:00",
            "waiting_time": "02:55:00",
            "vehicle_type_id": 2,
            "type": "private"
          },
          "off_peak-1-2": {
            "pick_up_date_time": "2023-12-23 13:00:00",
            "price": 529,
            "travel_time": "03:50:00",
            "arrival_date_time": "2023-12-23 16:50:00",
            "waiting_time": "03:55:00",
            "vehicle_type_id": 2,
            "type": "private"
          },
          ...
          "requested-4": {
            "pick_up_date_time": "2023-12-23 11:05:00",
            "price": 1054,
            "travel_time": "03:50:00",
            "arrival_date_time": "2023-12-23 14:55:00",
            "waiting_time": "",
            "vehicle_type_id": 4,
            "type": "private"
          }
        }
      },
      "return": {
        "from": "Auris en Oisans Grandes Rousses",
        "to": "Chambery Airport",
        "flight_date_time": "2024-01-05 21:00:00",
        "selected_time_is_flight": 1,
        "check_in_date_time": "2024-01-05 19:00:00",
        "offers": {
          "requested-2": {
            "pick_up_date_time": "2024-01-05 16:50:00",
            "price": 238.85,
            "travel_time": "02:10:00",
            "arrival_date_time": "2024-01-05 19:00:00",
            "waiting_time": "",
            "vehicle_type_id": 2,
            "type": "private"
          },
          ...
          "requested-4": {
            "pick_up_date_time": "2024-01-05 16:50:00",
            "price": 534.65,
            "travel_time": "02:10:00",
            "arrival_date_time": "2024-01-05 19:00:00",
            "waiting_time": "",
            "vehicle_type_id": 4,
            "type": "private"
          }
        }
      }
    }
  }
}
🔑  GET /transfer/{id} Returns previously created transfer request and available offer data  

Note that transfer request offers expire 24 hours after creation.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "Transfer": {
    "id": 123456,
    "type": "private",
    "discount_applied": 1,
    "TransferSelection": {
      "outbound": {
        "from": "Geneva Airport",
        "to": "Auris en Oisans Grandes Rousses",
        "flight_date_time": "2023-12-23 11:05:00",
        "selected_time_is_flight": 1,
        "offers": {
          "requested-2": {
            "pick_up_date_time": "2023-12-23 11:05:00",
            "price": 601.8,
            "travel_time": "03:50:00",
            "arrival_date_time": "2023-12-23 14:55:00",
            "waiting_time": "",
            "vehicle_type_id": 2,
            "type": "private"
          },
          "off_peak-0-2": {
            "pick_up_date_time": "2023-12-23 14:00:00",
            "price": 559.3,
            "travel_time": "03:50:00",
            "arrival_date_time": "2023-12-23 17:50:00",
            "waiting_time": "02:55:00",
            "vehicle_type_id": 2,
            "type": "private"
          },
          "off_peak-1-2": {
            "pick_up_date_time": "2023-12-23 13:00:00",
            "price": 529,
            "travel_time": "03:50:00",
            "arrival_date_time": "2023-12-23 16:50:00",
            "waiting_time": "03:55:00",
            "vehicle_type_id": 2,
            "type": "private"
          },
          ...
          "requested-4": {
            "pick_up_date_time": "2023-12-23 11:05:00",
            "price": 1054,
            "travel_time": "03:50:00",
            "arrival_date_time": "2023-12-23 14:55:00",
            "waiting_time": "",
            "vehicle_type_id": 4,
            "type": "private"
          }
        }
      },
      "return": {
        "from": "Auris en Oisans Grandes Rousses",
        "to": "Chambery Airport",
        "flight_date_time": "2024-01-05 21:00:00",
        "selected_time_is_flight": 1,
        "check_in_date_time": "2024-01-05 19:00:00",
        "offers": {
          "requested-2": {
            "pick_up_date_time": "2024-01-05 16:50:00",
            "price": 238.85,
            "travel_time": "02:10:00",
            "arrival_date_time": "2024-01-05 19:00:00",
            "waiting_time": "",
            "vehicle_type_id": 2,
            "type": "private"
          },
          ...
          "requested-4": {
            "pick_up_date_time": "2024-01-05 16:50:00",
            "price": 534.65,
            "travel_time": "02:10:00",
            "arrival_date_time": "2024-01-05 19:00:00",
            "waiting_time": "",
            "vehicle_type_id": 4,
            "type": "private"
          }
        }
      }
    },
    "is_return": 1,
    "route_from_code": "airport-1",
    "route_to_code": "resort-22",
    "return_route_to_code": "airport-3",
    "outbound_date": "2023-12-23",
    "outbound_time_hours": 11,
    "outbound_time_minutes": 5,
    "outbound_selected_time_is_flight": 1,
    "return_date": "2024-01-05",
    "return_time_hours": 21,
    "return_time_minutes": 0,
    "return_selected_time_is_flight": 1,
    "adult_count": 2,
    "children_count": 1,
    "return_adult_count": 2,
    "return_children_count": 1
  },
  "AdditionalInformation": {
    "booster_seat_count": 1,
    "child_seat_count": 0,
    "ski_count": 1,
    "snowboard_count": 0,
    "return_booster_seat_count": 1,
    "return_child_seat_count": 0,
    "return_ski_count": 1,
    "return_snowboard_count": 1,
    "accommodation_name": "Hotel Name",
    "accommodation_address": "Hotel Address",
    "accommodation_coordinates": "46.341883, 11.539972",
    "flight_number": "FL123",
    "return_flight_number": "FL321",
    "additional_information": ""
  }
}
🔑  POST /booking Creates booking based on previously created transfer data  

Successful booking response data will contain booking reference and Base64 encoded PDF vouchers for each product, indexed by product references. You can set optional property return_vouchers to 0, if you do not wish to receive the vouchers in response data and decrease response time. Vouchers can be requested through the API at a later time and will also be delivered to your account's email address upon booking creation.

Optional AdditionalInformation may be provided with the booking (nested under Booking). All provided attributes override matching AdditionalInformation attributes from POST /transfer; attributes not provided with the booking retain their existing values.
All AdditionalInformation attributes are optional and have no default value:

booster_seat_count integer Child Booster Seat – Suitable for 19kg/42lbs – 36kg/79lbs and 125cm or taller (approx. 6-11yrs).
child_seat_count integer Child Seat – Suitable for 9kg/20lbs to 18kg/40lbs (approx. 1-5yrs)
luggage_count integer
ski_count integer May affect availability of smaller vehicles.
snowboard_count integer May affect availability of smaller vehicles.
return_booster_seat_count integer Child Booster Seat – Suitable for 19kg/42lbs – 36kg/79lbs and 125cm or taller (approx. 6-11yrs).
return_child_seat_count integer Child Seat – Suitable for 9kg/20lbs to 18kg/40lbs (approx. 1-5yrs)
return_luggage_count integer
return_ski_count integer May affect availability of smaller vehicles.
return_snowboard_count integer May affect availability of smaller vehicles.
accommodation_name string
accommodation_address string
accommodation_coordinates string Expected coordinate format is comma separated decimal degrees, for example, 46.341883, 11.539972
flight_number string
flight_time string Only applicable when Transfer.outbound_selected_time_is_flight = 0, format - hh:mm:ss
return_flight_number string
return_flight_time string Only applicable when Transfer.return_selected_time_is_flight = 0, format - hh:mm:ss
additional_information string

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE INPUT

{
  "Booking": {
    "transfer_id": 123456,
    "return_vouchers": 1,
    "TransferSelection": {
      "outbound": "off_peak-0-2",
      "return": "requested-4"
    },
    "Customer": {
      "name": "John",
      "last_name": "Smith",
      "email": "john.smith@domain.com",
      "country_code": "+371",
      "mobile_number": "324124698",
      "reference": ""
    },
    "AdditionalInformation": {
      "accommodation_name": "Hotel Name",
      "accommodation_address": "Hotel Address",
      "accommodation_coordinates": "46.341883, 11.539972",
      "flight_number": "FL123",
      "return_flight_number": "FL321"
    }
  }
}

EXAMPLE OUTPUT

{
  "Booking": {
    "reference": "AMI3453",
    "vouchers": {
      "AMI3453-P1": ...
      "AMI3453-P2": "..."
    }
  }
}
🔑  GET /booking/{reference} Returns previously created booking data  

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "Booking": {
    "reference": "AMI3453",
    "vouchers": {
      "AMI3453-P1": ...
      "AMI3453-P2": "..."
    }
  }
}

Shuttle Transfers

🔑  GET /shuttle-destinations Returns all shuttle transfer destinations  

Method returns all shuttle transfer destination names mapped by corresponding destination codes.

Destination codes must be used for fields route_from_code and route_to_code when creating a shuttle transfer request.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "airport-1": "Geneva Airport",
  "airport-4": "Lyon St Exupery Airport",
  "resort-12": "Argentière",
  "resort-3": "Avoriaz 1800 Portes du Soleil",
  ...
  "resort-59": "Val-d'Isère",
  "resort-497": "Vallorcine"
}
🔑  POST /shuttle-transfer Creates and returns shuttle transfer and available offer data  

All prices are returned in EUR.

If the request is valid but the shuttle transfer is not available for booking, the response will return HTTP status code 422 and contain a single parameter - error.

Attribute Required / Optional Default Value
Transfer
is_return boolean optional 1 Indicator for whether the service is a round-trip.
route_from_code string required Pick-up destination code.
route_to_code string required Drop-off destination code.
outbound_date string required yyyy-mm-dd
outbound_time string required hh:mm:ss
return_date string optional (required when is_return = 1)
return_time string optional (required when is_return = 1)
adult_count integer required 1
children_count integer optional 0
luggage_count integer optional adult_count + children_count 1 unit of included luggage per person includes 1 Carry-on bag (40cm × 30cm × 20cm), 1 x check-in bag (max. 23 kg). Any additional item of luggage is considered an extra.
ski_count integer optional Included count based on selected fare. 1 set of skis or 1 snowboard (max. 23 kg, max. dimensions: length 180 cm, width 33 cm, depth 24 cm)
booster_seat_count integer optional 0 Child Booster Seat – Suitable for 19kg/42lbs – 36kg/79lbs and 125cm or taller (approx. 6-11yrs).
child_seat_count integer optional 0 Child Seat – Suitable for 9kg/20lbs to 18kg/40lbs (approx. 1-5yrs)
additional_information string optional

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE INPUT

{
  "Transfer": {
    "is_return": 1,
    "route_from_code": "airport-1",
    "route_to_code": "resort-22",
    "outbound_date": "2023-12-23",
    "outbound_time": "11:05:00",
    "return_date": "2024-01-05",
    "return_time": "17:00:00",
    "adult_count": 2,
    "children_count": 1,
    "luggage_count": 0,
    "ski_count": 1,
    "booster_seat_count": 1,
    "child_seat_count": 0,
    "additional_information": ""
  }
}

EXAMPLE OUTPUT

🔑  GET /shuttle-transfer/{id} Returns previously created shuttle transfer request and available offer data  

Returned value is the same as successful POST /shuttle-transfer response.

Note that shuttle transfer request offers expire 24 hours after creation.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

🔑  POST /shuttle-booking Creates shuttle booking based on previously created shuttle transfer data  

Successful booking response data will contain booking reference. Vouchers can be requested through the API at a later time (see GET /voucher method) and will also be delivered to your account's email address upon booking creation.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE INPUT

{
  "Booking": {
    "transfer_id": 131624872,
    "TransferSelection": {
      "outbound": {
        "offer_code": "scheduled-basic-2",
        "stop_id": 39220
      },
      "return": {
        "offer_code": "scheduled-skier-6",
        "stop_id": 39220
      }
    },
    "Customer": {
      "name": "John",
      "last_name": "Smith",
      "email": "john.smith@example.com",
      "country_code": "+371",
      "mobile_number": "98765432",
      "reference": ""
    }
  }
}

EXAMPLE OUTPUT

{
  "Booking": {
    "reference": "AMI3453"
  }
}

Resources

🔑  GET /destinations/{code} Returns transfer destinations from/to another destination  

Method returns transfer destination names mapped by corresponding destination codes that create a valid route with the destination based on the provided code.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "resort-262": "Adelboden",
  "resort-226": "Bern",
  "resort-267": "Chateau d'Oex",
  "resort-229": "Chur",
  ...
}
🔑  GET /destinations-extended Returns all transfer destinations 

Method returns all active transfer destinations with extended information.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

[
  {
    "code": "resort-2",
    "code_alt": null,
    "name": "Abondance Portes du Soleil",
    "country": "FR",
    "type": "resort",
    "lat": "46.280680",
    "lng": "6.720272",
    "iata": null,
    "timezone": "Europe/Paris"
  },
  {
    "code": "airport-1",
    "code_alt": null,
    "name": "Geneva Airport",
    "country": "CH",
    "type": "airport",
    "lat": null,
    "lng": null,
    "iata": "GVA",
    "timezone": "Europe/Zurich"
  },
  {
    "code": "city-46",
    "code_alt": "resort-644",
    "name": "Geneva city",
    "country": "CH",
    "type": "city",
    "lat": "46.20826",
    "lng": "6.14535",
    "iata": null,
    "timezone": "Europe/Zurich"
  },
  "..."
]
🔑  GET /prices Returns base prices for routes  

Method returns an array of base prices based on passenger count and vehicle type for all routes or routes containing a specific destination based on provided destination code.

To return only recently added or changed base prices you should add the optional parameter since containing the Unix timestamp of the earliest time to check.

Please note that returned vehicle in case of shared transfers is not the transfer vehicle but instead the vehicle that is used to find the correct markup.

Additional optional request parameters can be provided:

Attribute Default Value
type string private Transfer type - private or shared.
since integer Unix timestamp.
destination_code string Destination code.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "airport-1": {
    "resort-1": [
      {
        "vehicle": "2",
        "pax_min": "1",
        "pax_max": "2",
        "price": "231"
      },
      {
        "vehicle": "3",
        "pax_min": "3",
        "pax_max": "3",
        "price": "248"
      }
    ],
    "resort-2": [
      {
        "vehicle": "2",
        "pax_min": "1",
        "pax_max": "2",
        "price": "277"
      },
      {
        "vehicle": "2",
        "pax_min": "3",
        "pax_max": "3",
        "price": "336"
      }
    ]
  },
  "airport-2": {
    "resort-2": [
      {
        "vehicle": "3",
        "pax_min": "1",
        "pax_max": "2",
        "price": "330"
      },
      {
        "vehicle": "10",
        "pax_min": "3",
        "pax_max": "3",
        "price": "385"
      }
    ]
  }
}
🔑  GET /prices/markups Returns active and upcoming markup rules list for routes  

Method returns an array of all active and upcoming markup rules list for all routes or routes containing a specific destination based on provided destination code.

Returned data is separated into pages and you should query each page by adding the optional parameter page. You can also change the page size by setting the optional parameter size, which has a default value of 1000.

Usage rules:

  • Weekdays are represented by numbers 1 through 7 and correspond to Monday through Sunday accordingly;
  • Level represents markup rule priority - if transfer time matches two rules, higher level rule must be applied;
  • Route direction matters - routes array keys represent departure point and each key contains a list of codes for the arrival point.

Additional optional request parameters can be provided:

Attribute Default Value
since integer Unix timestamp. Used to filter only the latest markups rules.
destination_code string Destination code. Used to filter markup rules only valid for routes containing a certain destination.
date string Date in format YYYY-MM-DD. Used to filter markup rules only valid for a certain date.
vehicle integer Vehicle type ID. Used to filter markup rules only valid for a certain vehicle type.
page integer 1 Current page.
size integer 100 Page size. Markup rules per page.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT (type=private)

{
  "pages": 67,
  "page": 1,
  "data": [
    {
      "vehicle": "2",
      "weekday_from": "6",
      "weekday_to": "6",
      "date_from": "2021-12-01",
      "date_to": "2021-12-13",
      "time_from": "00:00:00",
      "time_to": "05:00:00",
      "percentage": "70",
      "level": "5",
      "routes": {
        "airport-1": [
          "resort-1",
          "resort-2",
          "resort-3",
          "resort-4"
        ],
        "airport-2": [
          "resort-1",
          "resort-2",
          "resort-3"
        ]
      }
    },
    {
      "vehicle": "2",
      "weekday_from": "6",
      "weekday_to": "6",
      "date_from": "2021-12-01",
      "date_to": "2021-12-13",
      "time_from": "09:00:00",
      "time_to": "14:00:00",
      "percentage": "80",
      "level": "5",
      "routes": {
        "resort-1": [
          "airport-1",
          "train_station-11"
        ],
        "resort-2": [
          "airport-1",
          "airport-2",
          "airport-3"
        ]
      }
    }
  ]
}
🔑  GET /routes Returns all transfer routes  

Method returns an array of destination codes for each of destinations representing all valid routes.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "airport-1": [
    "resort-1",
    "resort-2",
    ...
    "resort-499",
    "resort-500"
  ],
  ...
  "resort-418": [
    "airport-39",
    "airport-40",
    "airport-41"
  ],
  ...
}
🔑  GET /routes/{code_a}/{code_b} Returns route configuration  

Method returns route configuration.

Information provided by route configuration can be used to avoid sending transfer requests that are not available for online booking.

Following parameters will be returned:

max_passengers integer Largest allowed passenger count for a transfer booking.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "max_passengers": 49
}
🔑  GET /shuttle-extras Returns all shuttle transfer extras  

Method returns an array of shuttle transfer extras. Price returned is per unit. Included unit count is per passenger based on selected fare.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "child_seat": {
    "code": "child_seat",
    "description": "Child seat",
    "price": 2,
    "currency": "EUR",
    "included": {
      "basic": 0,
      "skier": 0,
      "pro": 0
    },
    "included_description": null
  },
  "booster_seat": {
    "code": "booster_seat",
    "description": "Booster seat",
    "price": 2,
    "currency": "EUR",
    "included": {
      "basic": 0,
      "skier": 0,
      "pro": 0
    },
    "included_description": null
  },
  "luggage": {
    "code": "luggage",
    "description": "Any additional item of luggage",
    "price": 20,
    "currency": "EUR",
    "included": {
      "basic": 1,
      "skier": 1,
      "pro": 1
    },
    "included_description": "1 Carry-on bag (40cm × 30cm × 20cm), 1 x check-in bag (max. 23 kg)"
  },
  "ski": {
    "code": "ski",
    "description": "1 set of skis or 1 snowboard (max. 23 kg, max. dimensions: length 180 cm, width 33 cm, depth 24 cm)",
    "price": 20,
    "currency": "EUR",
    "included": {
      "basic": 0,
      "skier": 1,
      "pro": 1
    },
    "included_description": "1 set of skis or 1 snowboard (max. 23 kg, max. dimensions: length 180 cm, width 33 cm, depth 24 cm)"
  }
}
🔑  GET /vehicles Returns all vehicles  

Method returns a list of available vehicles mapped by corresponding IDs.

Each vehicle list object contains the following attributes:

id integer Used to indicate the vehicle in transfer offers in the field vehicle_type_id.
name string
description string
image_link string
max_passengers integer Maximum passenger count the vehicle can carry.
can_transport_skis boolean Indicator for whether the vehicle can fit and carry any ski equipment.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "2": {
    "id": "2",
    "name": "Standard/economy",
    "description": "VW Passat, Volvo V70, Pegueot 508 or similar vehicle",
    "image_link": "https://www.alps2alps.com/img/vehicles/2.png",
    "max_passengers": "3",
    "can_transport_skis": "0"
  },
  ...
  "16": {
    "id": "16",
    "name": "49-seater bus",
    "description": "Mercedes, Scania, Volvo or similar",
    "image_link": "https://www.alps2alps.com/img/vehicles/16.png",
    "max_passengers": "49",
    "can_transport_skis": "1"
  }
}
🔑  GET /availability Returns general availability information  

Method returns a lists of route availability codes by passenger count data.by_pax and by season code data.by_season as well as season information data.seasons.

The response contains the following attributes:

data
by_pax array List of route availability codes by passenger count route_from_code--route_to_code--passenger_count.
by_season array List of route availability codes by season code route_from_code--route_to_code--season_code.
seasons object Object containing start and end dates for each season code.
meta
by_pax_count integer Total number of route availability codes by passenger count.
by_season_count integer Total number of route availability codes by season code.
last_modified integer Timestamp of the last modification of the availability data.

Availability codes are listed in a single direction, but are valid for both directions, meaning that to look up availability route A--B, you should look up both A--B and B--A - if one of the values is present, there is general availability for that route in any direction.

API methods return standard Last-Modified header as well as last modified timestamp in meta.last_modified field.

This method requires authorization. Add Authorization: Bearer <token> header to your request.

EXAMPLE OUTPUT

{
  "data": {
    "by_pax": [
      "airport-1--resort-1--1",
      "airport-1--resort-1--2",
      "airport-1--resort-1--3",
      "airport-1--resort-1--4",
      "airport-1--resort-1--5",
      "airport-1--resort-1--6",
      "airport-1--resort-1--7",
      "airport-1--resort-1--8",
      "airport-1--resort-2--1",
      "airport-1--resort-2--2",
      "airport-1--resort-2--3"
    ],
    "by_season": [
      "airport-1--resort-1--w",
      "airport-1--resort-1--s",
      "airport-1--resort-2--s",
      "airport-1--resort-3--w"
    ],
    "seasons": {
      "s": {
        "start": {
          "month": 5,
          "day": 1
        },
        "end": {
          "month": 11,
          "day": 30
        }
      },
      "w": {
        "start": {
          "month": 12,
          "day": 1
        },
        "end": {
          "month": 4,
          "day": 30
        }
      }
    }
  },
  "meta": {
    "by_pax_count": 11,
    "by_season_count": 4,
    "last_modified": 1774859093
  }
}

Additional Methods

🔑  GET /voucher/{reference}/{direction} Returns booked transfer voucher  

Transfer direction must be either outbound or return.

Successful response will containt PDF voucher with Content-Type: application/pdf header.

Method works for all transfer types.

This method requires authorization. Add Authorization: Bearer <token> header to your request.


Date Change
2026-07-28 Now accepting Booking.AdditionalInformation in POST /booking. All provided attributes override matching values from POST /transfer; attributes not provided retain their existing values.
2026-07-22 Now accepting value any in Transfer.type field in POST /transfer. When Transfer.type=any, both private and shared offers are returned. Each offer now also contains type field.
2026-07-15 Added GET /availability endpoint that lists available route/pax and route/season combinations for early filtering.
2026-06-09 B2B API v1 retired.
2023-09-28 B2B API v1 deprecated.