Car Rental Software

Introduction

Car Rental Software offers two different APIs that allow its users to make, modify or cancel reservations.

An OTA compliant SOAP web service that offers functions to retrieve pricing information, block quotes and make and cancel reservations. The OTA compliant API is under ongoing development and may offer new functions in the future.

The CRS Booking Engine on the other hand is a more light-weight API that offers the retrieval of pricing information, block quotes and make reservations. Reservation modifications are not supported. The Booking Engine is the result of earlier API requirements and was replaced by the OTA compliant API.

Authorizing API calls

API calls have to provide authorization information in order for the system to identify the calling party. The APIs are designed for brokers to allow to work with bookings of their partner car rental companies directly from their desk.

Therefore each system connecting to one of Car Rental Software's APIs has to clearly identify itself as a registered broker for the car rental company, respectively. In order to do so it has to provide the broker's unique identifier (username) and a valid API key (password) in every API call.

The credentials can be requested from the appropriate car rental company.

OTA Compliant Web Service

Car Rental Software offers a OTA-compliant SOAP web service described by its WSDL file located at https://carrentalsoftware.myappy.it/web/ota/?wsdl. This web service is a partial implementation of the 2017B-1.0 version of the OpenTravel schema and the documentation is limited on the functions supported by the CRS OTA API.

A more comprehensive documentation of the full OTA standard can be found on their website: https://opentravel.org. If you're looking for a more detailed description of the types and models used by OTA, you can have a look at https://modelviewers.pilotfishtechnology.com/modelviewers/OTA/

As of now the CRS OTA API offers the following functions:

Function Description
OTA_Ping This function is solely for testing purposes and can be used to test whether the interface is available and running as expected.
OTA_VehAvailRate Call OTA_VehAvailRate in order to get pricing information for a given period, pickup/drop off stations and vehicle types.
OTA_VehLocSearch This function can be used to get a list of all or of selected stations matching given search criteria of the car rental company.
OTA_VehRes OTA_VehRes is the function that has to be called to block an offer retrieved earlier via OTA_VehAvailRate or to book a previously requested offe.r
OTA_VehRetRes Once an offer has been blocked or booked, you can use this function to retrieve its details.

All API calls are based on SOAP messages containing the request and response data. The main data block of a SOAP message usually starts with the name of the called function followed by the suffix RQ indicating a function call (request) and RS for a response.

Authentication

Every API call (except the Ping method) has to provide proper authentication information so that the system is able to identify the calling party. Therefore you need to include a Username and a Password in the requests that you want to send to the server. These credentials can be requested by the appropriate car rental company that can generate them or look them up using the broker file of the CRS control panel.

Authentication credentials are put into a POS → Source → RequestorID tag of the SOAP message as demonstrated in the code sample.

Parameter Description
Type Indicates the type of the entity that is trying to identify. Set to 29 which is the value for Booking agent.
ID The unique broker ID/username that the car rental company provided to you.
MessagePassword The broker's API Key/password that the car rental company provided to you.

Please note that in the following, the authentication part will be skipped in order to keep code samples as simple as possible.

Authentication part for a OTA_VehAvailRateRQ message
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehAvailRateRQ>
      <POS>
        <Source>
          <RequestorID Type="29" ID="{Username}" MessagePassword="{Password}"/>
        </Source>
      </POS>
      
      <!-- Message content here -->
      
    </ns1:OTA_VehAvailRateRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Error handling

Every response from the server should contain either the Success flag indicating that the request has been processed successfully or an Errors tag indicating one or more errors that occurred during the elaboration of the request.

Response parameter Description
Success Flag indicating that the request has been processed successfully. If not present, check for the Errors tag to see what went wrong.
Errors Container for one ore more error messages that indicate why the request could not been processed successfully.

Please note that in the following, the success/errors part will be skipped in order to keep code samples as simple as possible.

Response of a successfully processed OTA_VehLocSearch request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehLocSearchRS>
      <ns1:Success/>
      
      <!-- Response data here -->
      
    </ns1:OTA_VehLocSearchRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Permission denied error occurring when using wrong authentication credentials
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehLocSearchRS>
      <Errors>
        <Error Code="403" ShortText="Permission denied"/>
      </Errors>
    </ns1:OTA_VehLocSearchRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

OTA_Ping

The OTA_Ping method is for testing purposes only and can be used to check whether the system is up and running correctly.

Request

The only parameter expected inside its main OTA_PingRQ message is a random string identified as EchoData.

Request parameter Description
EchoData The string that the server should echo back.

Response

After processing the request, the system will respond to the caller echoing back the same string that was provided when the function was called together with the Success flag set.

Response parameter Description
EchoData The string echoed back to the caller
Ping Request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_PingRQ>
      <EchoData>Echo data</EchoData>
    </ns1:OTA_PingRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Ping Response
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_PingRS>
      <ns1:Success/>
      <ns1:EchoData>Echo data</ns1:EchoData>
    </ns1:OTA_PingRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

OTA_VehAvailRate

The OTA_VehAvailRate function can be used to retrieve pricing information for one or more specific vehicle type(s) or a given period of time and a pickup/drop-off station. This function does not block any requested prices but does only return price. After analyzing the server's response, it is then possible to use the OTA_VehRes function to block a certain quote or make a booking straightaway.

Request

In order to get pricing information, a certain set of parameters are mandatory while others are optional to refine the search. Please check the code sample to find out how the parameters are structured and whether they are separate tags or tag attributes.

Request parameter Description
PickUpDateTime* Date and time at which the vehicle has to be picked up.
Use the date format YYYY-MM-DD'T'hh:mm:ss'Z' (including the Z suffix) to specify the date and time in UTC. If the trailing Z is omitted, hence you are using YYYY-MM-DD'T'hh:mm:ss as format, the date and time value is considered to be in local time (referred to the timezone of the car rental company).
ReturnDateTime* Date and time (given in UTC) at which the vehicle will be returned.
Use the date format YYYY-MM-DD'T'hh:mm:ssZ (including the Z suffix) to specify the date and time in UTC. If the trailing Z is omitted, hence you are using YYYY-MM-DD'T'hh:mm:ss as format, the date and time value is considered to be in local time (referred to the timezone of the car rental company).
PickUpLocation* The station where the vehicle has to be picked up from. Provide the station's UID in the LocationCode attribute.
ReturnLocation The station where the vehicle will be returned to. Provide the station's UID in the LocationCode attribute. This parameter is optional and in case it is not given, the PickUpLocation will also be used as the ReturnLocation.
RateRange This tag can be used to filter out pricing information that does not match your expectations. You can specify either a MinRate and/or a MaxRate or a FixedRate. Please note that the system will only consider the rental rate (taxes, optionals and coverages excluded) for given rate range. All monetary amounts are expected to be given in EUR.
VehPrefs Optional vehicle preferences. Can be used to indicate a vehicle type preference. Use separate VehPref blocks for each preference, specifying the ACRISS code of the preferred type in the Code attribute of the VehMakeModel tag. The Name is ignored by the system and can be left empty. If in doubt, get in contact with the car rental company to get a list with available ACRISS codes.
(*) mandatory field

Response

After processing the request, the system will respond to the caller providing a set of pricing information matching the calling request. The quotes will appear in different VehAvail blocks that can be found in VehVendorAvails → VehVendorAvail → VehAvails. Furthermore, the response will contain the request's information about pickup/drop-off times and stations in the VehicleRentalCore to confirm the search parameters.

Each VehAvail block contains two elements. VehAvailCore provides information about the vehicle type linked to an offer together with rental pricing information and additional equipment that can be booked. The VehAvailInfo part provides information about available coverage options that can be booked for the given vehicle type. Since the equipment and coverage options are optional they are not included in the rental price and the total estimate in VehAvailCore → TotalCharge.

Please note, that all prices provided by the system are taxes excluded. For each charge however, you'll also find the TaxAmounts part summarizing the expected taxes. Only the field EstimatedTotalAmount of VehAvailCore → TotalCharge contains the rental price including taxes (but excluded any optional equipment and coverage options).

VehAvailCore parameter Description
Vehicle The vehicle tag contains information about the vehicle type associated to the pricing information, such as the ACRISS code in the Code attribute and a textual Description. CodeContext specifies what to expect in Code field and will always be set to SIPP which refers to ACRISS code.
If available, the vehicle element may contain a PictureURL child indicating the URL of an image file in order to illustrate the vehicle type.
TotalCharge The total charge to expect when booking this option, taxes excluded (RateTotalAmount) and taxes included (EstimatedTotalAmount).
Please note that the total charge indicated here does not include any optional equipment or coverage options.
Rental Rate Provides further information about the specific rental rate applied to this offer.

The rate distance specifies distance limitations. If applicable (Unlimited="false") the DistUnitName together with the Quantity and VehiclePeriodUnitName indicate the maximum distance that is covered by the quote. If no limits apply, Unlimited will be set to true.

The vehicle charges element provides a list of different charges that were considered for the calculation of the total charge. These are always included in the total charge specified above (IncludedInRate and IncludedInEstTotalInd will always be true) and are taxes excluded. The TaxAmounts child however indicates expected taxes that have to be added in order to get the full estimated rental price. The VehicleCharges element of a VehAvailRate response does only include pricing information about the vehicle itself without any equipment or coverage options; therefore Purpose will always be set to 1 (= vehicle rental).

There only two exception to this. First, when the system determines that either the pickup date and time or the return date and time are beyond office hours, another VehicleCharge element of type 82 (= Out of hours fee) might be present. In order to support automatic out of hours fee calculation for your company, get in touch with My Appy for activation.
Please note, if an out of hours fee is present in a requested quote, you have to include this fee in an eventual OTA_VehRes request in order to block a quote or make booking successfully. If you try to block a quote without an indicated out of hours fee, the system will not proceed with the operation and return an error.
The second case in which another VehicleCharge element might be listed is when a company takes extra fees for One way rentals, i.e. where the drop-off station is not the same as the pickup station. In this case a VehicleCharge element of type 2 (= Drop fee) might be present, following the same logic and restrictions as the out of hours fee.
PricedEquips Gives you a list of optional equipment that can be booked together with the vehicle. Each PricedEquip element provides information about the equipment itself including the OpenTravel Code List Equipment Type (EQP) in the EquipType attribute and a textual Description, as well as pricing information provided by the Charge element. As said before, equipment prices are never included in the rate totals of an availability response, so IncludedInRate and IncludedInEstTotalInd will always be false.

Please note, that if EquipType is set to 39 (= other) booking a specific equipment might not succeed. In this case get in contact with the car rental company and ask them to properly set the equipment type for registered optionals via their control panel.
VehAvailInfo parameter Description
PricedCoverages Provides a list with coverage options that may be booked together with the vehicle. Each PricedCoverage element specifies information about the coverage itself in the Coverage element and pricing information in Charge.

Each option comes with a unique identifier in the Code attribute that is needed in case you want to book an option. CoverageType provides details about the type of coverage and will be set to 21 (= insurance). This might change in the future in order to provide more information using a more detailed OpenTravel Code List Vehicle Coverage Type (VCT). The Details child gives you a textual description of the coverage option.

The coverage charges are similar to equipment charges and are not further explained here.

The Deductible elements specifies the deductible amount for this coverage option.
Quote request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehAvailRateRQ>
      <VehAvailRQCore>
        <VehRentalCore PickUpDateTime="2020-03-02T18:00:00Z"
            ReturnDateTime="2020-03-06T18:00:00Z">
          <PickUpLocation LocationCode="98107384"/>
          <ReturnLocation LocationCode="98107384"/>
        </VehRentalCore>
        <RateRange CurrencyCode="EUR" MinRate="10.00" MaxRate="40.00"/>
        <VehPrefs>
          <VehPref>
            <VehMakeModel Code="CDAR" Name=""/>
          </VehPref>
        </VehPrefs>
      </VehAvailRQCore>
    </ns1:OTA_VehAvailRateRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Quote response
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehAvailRateRS>
      <ns1:VehAvailRSCore>
        <VehRentalCore PickUpDateTime="2020-03-02T18:00:00Z"
            ReturnDateTime="2020-03-06T18:00:00Z">
          <PickUpLocation LocationCode="98107384"/>
          <ReturnLocation LocationCode="98107384"/>
        </VehRentalCore>
        <VehVendorAvails>
          <VehVendorAvail>
            <VehAvails>
              <VehAvail>
                <VehAvailCore>
                  <Vehicle Code="CDAR" CodeContext="SIPP"
                      Description="Gruppo B Automatica (Km illimitati)">
                    <PictureURL>http://url/to/image</PictureURL>
                  </Vehicle>
                  <TotalCharge CurrencyCode="EUR" RateTotalAmount="40.00"
                      EstimatedTotalAmount="48.80"/>
                  <RentalRate>
                    <RateDistance Unlimited="false" DistUnitName="km"
                        Quantity="1000" VehiclePeriodUnitName="Day"/>
                    <VehicleCharges>
                      <VehicleCharge Purpose="1" TaxInclusive="false"
                          IncludedInEstTotalInd="true" IncludedInRate="true"
                          Description="" Amount="40" CurrencyCode="EUR">
                        <TaxAmounts>
                          <TaxAmount CurrencyCode="EUR" Percentage="22"
                              Total="8.80"/>
                        </TaxAmounts>
                      </VehicleCharge>
                    </VehicleCharges>
                  </RentalRate>
                  <PricedEquips>
                    <PricedEquip>
                      <Equipment EquipType="39">
                        <Description>Navigatore</Description>
                      </Equipment>
                      <Charge IncludedInEstTotalInd="false"
                          IncludedInRate="false" TaxInclusive="false"
                          Amount="40.00" CurrencyCode="EUR">
                        <TaxAmounts>
                          <TaxAmount CurrencyCode="EUR" Percentage="22"
                              Total="8.80"/>
                        </TaxAmounts>
                      </Charge>
                    </PricedEquip>
                    <PricedEquip>
                      <Equipment EquipType="39">
                        <Description>Portasci</Description>
                      </Equipment>
                      <Charge IncludedInEstTotalInd="false"
                          IncludedInRate="false" TaxInclusive="false"
                          Amount="100.00" CurrencyCode="EUR">
                        <TaxAmounts>
                          <TaxAmount CurrencyCode="EUR" Percentage="22"
                              Total="22.00"/>
                        </TaxAmounts>
                      </Charge>
                    </PricedEquip>
                    
                    <!-- Other PricedEquip blocks with further optionals 
                         to book -->
                    
                  </PricedEquips>
                </VehAvailCore>
                <VehAvailInfo>
                  <PricedCoverages>
                    <PricedCoverage>
                      <Coverage Code="23" CoverageType="21">
                        <Details CoverageTextType="Copertura Standard"/>
                      </Coverage>
                      <Charge TaxInclusive="false"
                          Description="Copertura Standard"
                          Amount="0" CurrencyCode="EUR">
                        <TaxAmounts>
                          <TaxAmount CurrencyCode="EUR" Percentage="22"
                              Total="0.00"/>
                        </TaxAmounts>
                      </Charge>
                      <Deductible CurrencyCode="EUR" Amount="1200.00"/>
                    </PricedCoverage>
                    <PricedCoverage>
                      <Coverage Code="18" CoverageType="21">
                        <Details CoverageTextType="Mini-Kasko"/>
                      </Coverage>
                      <Charge TaxInclusive="false"
                          Description="Mini-Kasko"
                          Amount="58" CurrencyCode="EUR">
                        <TaxAmounts>
                          <TaxAmount CurrencyCode="EUR" Percentage="22"
                              Total="12.76"/>
                        </TaxAmounts>
                      </Charge>
                      <Deductible CurrencyCode="EUR" Amount="600.00"/>
                    </PricedCoverage>
                    
                    <!-- Other PricedCoverage blocks with further coverage options
                         to book -->
                    
                  </PricedCoverages>
                </VehAvailInfo>
              </VehAvail>
              
              <!-- Other VehAvail blocks with further quotes -->
              
            </VehAvails>
          </VehVendorAvail>
        </VehVendorAvails>
      </ns1:VehAvailRSCore>
    </ns1:OTA_VehAvailRateRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

OTA_VehLocSearch

The OTA_VehLocSearch function can be used to retrieve a list of available pickup/drop-off stations of the car rental company. It may be called without any search criterions to get a full list of available stations.

Request

If you are not interested in a complete list of available stations, use search criterions to filter the results. At the moment address information of the stations are non-formatted and thus the filtering functionality is limited.

Request parameter Description
VehLocSearchCriterion The only filter accepted at the moment is the Address → CityName parameter. Depending on the information that each car rental company provides, this parameter can however be used to search for a specific city name, airport code, ecc.

Response

After processing the request, the system will respond to the caller providing a list of localities where rented vehicles can be picked up or dropped off. Each locality comes in a separate VehMatchedLoc element with a LocationDetail child containing all the information.

Response parameter Description
Code Provides a unique identifier needed for booking and availability requests.
Name Name of the locality
Address Provides further information about the locality, such as its address in a non-formatted way using the AddressLine tags and CityName the name of the city where the locality can be found.
Locality search request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehLocSearchRQ>
      <VehLocSearchCriterion>
        <Address>
          <CityName>APT</CityName>
        </Address>
      </VehLocSearchCriterion>
    </ns1:OTA_VehLocSearchRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Locality search response
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehLocSearchRS>
      <ns1:VehMatchedLocs>
        <ns1:VehMatchedLoc>
          <ns1:LocationDetail Code="98107384" Name="Milano-MXP">
            <Address Remark="MI-MXP">
              <AddressLine>APT Malpensa (MI)</AddressLine>
              <AddressLine>Lun-Ven:08:00/22:00</AddressLine>
              <AddressLine>Sab:09:00/18:30</AddressLine>
              <AddressLine>Tel:+39 02-123456</AddressLine>
              <CityName>Milano - Malpensa</CityName>
            </Address>
          </ns1:LocationDetail>
        </ns1:VehMatchedLoc>
        
        <!-- Other VehMatchedLoc blocks with further stations -->
        
    </ns1:OTA_VehLocSearchRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

OTA_VehRes

The OTA_VehRes function can be used to block a quote or make a reservation. The information that have to provided when making the request have to be taken from a previously performed OTA_VehAvailRate request.

Request

In order to block a quote or make a reservation, you need to specify a series of parameters that are described in the following. Most of them are child elements of the VehResRQCore element. Only the details about the preferred coverage option to book has to be put into the VehResRQInfo element.

Pricing information have to be taken from the response of a previously made OTA_VehAvailRate call. Once the system receives a OTA_VehRes request, it performs an internal availability check to get actual quote information and only accepts the quote to be blocked or the reservation to be made if the prices from the request match the result from the internal check. It is thus important that you put monetary amounts from the availability request without modifying into the OTA_VehRes request, otherwise it will be refused.

VehResRQCore parameter Description
VehRentalCore* Describes the basic rental parameters as described for the OTA_VehAvailRate request.
VehPref* Use the Code attribute of the VehMakeModel child element to specify the ACRISS code of the vehicle type that you would like to book. For more details about the VehPref element have a look at the OTA_VehAvailRef function.
Customer* Provides basic information about the primary customer and any additional customers. In order block a quote or make a reservation successfully at least the Name of the Primary customer has to be provided. Alternatively, if you have performed a booking for the same client and know its unique identifier you can also provide the CustomerID as shown in the example to recall the customer details from a previous booking.

The following elements can be used to describe the primary and any additional customer.
- BirthDate Indicates the date of birth of the customer and has to be given as an attribute of the Primary or Additional customer tag respectively.
- PersonName* Specifies the name of the customer. At the moment, only the GivenName and the Surname are considered by the system. Please note that for every customer record, at least the Surname has to be given.
- Document Used to provide information about a legal document of the customer. DocType defines the type of the document that is presented. Use either 2 for passports, 4 for driver's licenses and 5 for national identify documents. Please note that passports and national ids are treated equally by the system and will always be returned as national id documents. DocID specifies the actual document number, DocIssueAuthority the authority that has issued the document and EffectiveDate and ExpireDate the validity period.
- Telephone Telephone number (preferably) including the national prefix to be given as PhoneNumber attribute.
- Email Valid email address of the customer
- Address Address information of the customer. While most fields are self-explaining please note that the CountryName has to be the ISO 3166 two-letter code.
- CustomerID Use this element to specify the unique identifier of a previously registered customer to recall its information automatically. Type has to be 1 (= customer) and ID the unique identifier (from the CRS context!) of the customer. This id can be retrieved from the same CustomerID field of the Customer element of an existing reservation. Please not that the CustomerID can only be used for the Primary customer.
VehicleCharges* Lists all the charges that have to be applied to the quote to be blocked or the reservation to be made. Have a look at the OTA_VehAvailRate function to learn more about vehicle charges.

Please note that while the charges listed in the OTA_VehAvailRate response contain only charges related to the vehicle itself, in a OTA_VehRes request you also have to list the charges of all additional equipment and coverage options that you want to include in the booking as well. Use the Purpose attribute of every VehicleCharge record to indicate what the charge is related to. Use 1 for charges related to the vehicle rental, 82 for out of hours fees (if present), 2 for one way fees (if present), 21 for any equipment to book and 4 for a coverage option. Similarly to the response of a OTA_VehAvailRate response, only vehicle rental charges, out of hours fees and one way fees are included in the rate (IncludedInRate="true"). All other charges and expected taxes have to be left out of the rate but have to be included in the estimated totals (IncludedInEstTotalInd="true").
SpecialEquipPrefs List with additional equipment that has to be included in the booking. Since equipment charges have to be put into the VehicleCharges part of the request, it is sufficient to provide only the equipment type via the EquipType attribute.
TotalCharge Specifies the total charge of the quote to block or the reservation to make. The RateTotalAmount is the sum of car rental specific charges only (taxes excluded) while EstimatedTotalAmount considers all the charges including taxes.
VehResRQInfo parameters Description
ResStatus The ResStatus attribute of the VehResRQInfo allows you to specify whether you simply want to block a quote or whether you want to make a booking. Set it to Book to do the latter. In case this parameter is not given, the system will simply block the quote for the given client. Quotes are usually valid for one week before they expire.
CoveragePrefs Use the CoveragePrefs → CoveragePref tag to indicate the coverage option to be included in the booking. CoverageType has to be set to 21 (= insurance) while Code has to be the code taken from the appropriate record of the respective availability search.
RentalPaymentPref Use this field in case a reservation is made and you want to inform the car rental company about a pre-payment that was made by the client. PaymentAmount takes information about the amount that has been paid. For every payment, also a Voucher with a valid Identifier has to be given in order to identify the payment.
(*) mandatory field

Response

Upon successful processing of a OTA_VehRes request the full reservation record will be returned to the caller. This is the same as the result of a OTA_VehRetRes call and is described more in detail there.

Vehicle reservation request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehResRQ>
      <VehResRQCore>
        <VehRentalCore PickUpDateTime="2020-03-03T09:36:53Z" ReturnDateTime="2020-03-07T09:36:53Z">
          <PickUpLocation LocationCode="98107384"/>
          <ReturnLocation LocationCode="98107384"/>
        </VehRentalCore>
        <VehPref>
          <VehMakeModel Code="CDAR" Name=""/>
        </VehPref>
        <Customer>
          <Primary BirthDate="2000-05-13">
            <PersonName>
              <GivenName>John</GivenName>
              <Surname>Smith</Surname>
            </PersonName>
            <Document DocType="5" DocID="ABCDEF33" DocIssueAuthority="City of Washington D.C."
                EffectiveDate="2017-01-01" ExpireDate="2021-12-31"/>
            <Telephone PhoneNumber="555555"/>
            <Email>j.smith@domain.com</Email>
            <Address>
              <AddressLine>543, 5th Avenue</AddressLine>
              <CityName>Washington</CityName>
              <CountryName>US</CountryName>
              <PostalCode>1234</PostalCode>
              <StateProv>DC</StateProv>
            </Address>
            <!-- Customer ID may be used if customer is already registered and you have
                 the CRS's uid -->
            <!-- CustomerID Type="1" ID="{customer uid}" /-->
          </Primary>
          <Additional BirthDate="2002-07-25">
            <PersonName>
              <GivenName>Emily</GivenName>
              <Surname>Smith</Surname>
            </PersonName>
            <Telephone PhoneNumber="555555"/>
            <Address>
              <AddressLine>543, 5th Avenue</AddressLine>
              <CityName>Washington</CityName>
              <CountryName>US</CountryName>
              <PostalCode>1234</PostalCode>
              <StateProv>DC</StateProv>
            </Address>
          </Additional>
        </Customer>
        <VehicleCharges>
          <VehicleCharge Purpose="1" TaxInclusive="false" IncludedInEstTotalInd="true" IncludedInRate="true" Description="" Amount="40" CurrencyCode="EUR">
            <TaxAmounts>
              <TaxAmount CurrencyCode="EUR" Percentage="22" Total="8.80"/>
            </TaxAmounts>
          </VehicleCharge>
          <VehicleCharge Description="Navigatore" IncludedInEstTotalInd="true" IncludedInRate="false" Purpose="21" TaxInclusive="false" Amount="40.00" CurrencyCode="EUR">
            <TaxAmounts>
              <TaxAmount CurrencyCode="EUR" Percentage="22" Total="8.80"/>
            </TaxAmounts>
          </VehicleCharge>
          <VehicleCharge Description="Portasci" IncludedInEstTotalInd="true" IncludedInRate="false" Purpose="21" TaxInclusive="false" Amount="100.00" CurrencyCode="EUR">
            <TaxAmounts>
              <TaxAmount CurrencyCode="EUR" Percentage="22" Total="22.00"/>
            </TaxAmounts>
          </VehicleCharge>
          <VehicleCharge Description="Seggiolino" IncludedInEstTotalInd="true" IncludedInRate="false" Purpose="21" TaxInclusive="false" Amount="32.80" CurrencyCode="EUR">
            <TaxAmounts>
              <TaxAmount CurrencyCode="EUR" Percentage="22" Total="7.22"/>
            </TaxAmounts>
          </VehicleCharge>
          <VehicleCharge Description="[Cod. 2-B] Mini-Kasko" IncludedInEstTotalInd="true" IncludedInRate="false" Purpose="4" TaxInclusive="false" Amount="58.00" CurrencyCode="EUR">
            <TaxAmounts>
              <TaxAmount CurrencyCode="EUR" Percentage="22" Total="12.76"/>
            </TaxAmounts>
          </VehicleCharge>
        </VehicleCharges>
        <SpecialEquipPrefs>
          <SpecialEquipPref EquipType="13"/>
          <SpecialEquipPref EquipType="4"/>
          <SpecialEquipPref EquipType="7"/>
        </SpecialEquipPrefs>
        <TotalCharge CurrencyCode="EUR" RateTotalAmount="40.00" EstimatedTotalAmount="330.38"/>
      </VehResRQCore>
      <VehResRQInfo ResStatus="Book">
        <CoveragePrefs>
          <CoveragePref Code="18" CoverageType="21"/>
        </CoveragePrefs>
        <RentalPaymentPref>
          <PaymentAmount Amount="100.00" CurrencyCode="EUR"/>
          <Voucher Identifier="VOU-123"/>
        </RentalPaymentPref>
      </VehResRQInfo>
    </ns1:OTA_VehResRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Vehicle reservation response
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehResRS>
      <ns1:VehResRSCore>
        <VehReservation ReservationStatus="Reserved">
          
          <!-- Vehicle reservation details -->
        
        </VehReservation>
      </ns1:VehResRSCore>
    </ns1:OTA_VehResRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

OTA_VehRetRes

The OTA_VehRetRes function can be used to retrieve a previously performed reservation or blocked quote. All you need to request the reservation details is the reservation's uid/reference.

Request

After blocking a quote or making a reservation successfully, the system returns the full reservation to the caller. This record contains a unique reservation reference that has to be given to this function in order to recall all the reservation details.

Request parameter Description
UniqueID* Use the ID field of this element of the VehRetResRQCore block to provide the unique reference of the reservation that you are requesting the details for. Note that for a reservation lookup only references of Type="16" (= reference) are valid.
(*) mandatory field

Response

Upon successful processing of a OTA_VehRetRes request the full reservation record will be returned to the caller enclosed in a VehReservation tag. As illustrated in the example, this record is very similar to the data provided during a OTA_VehRes request and will only be described very briefly.

Response parameter Description
ReservationStatus This attribute of the VehReservation indicates whether the reservation record refers to a blocked quote or a booking. For the former, ReservationStatus will be set to Requested, for the latter Reserved. If you find the status Cancelled the reservation has been cancelled.
Customer Lists the customers that are linked to the reservation. You should always find the Primary customer information with a valid CustomerID that you may use for later reference. For a more detailed description of all the other fields refer to the OTA_VehRes description.
VehSegmentCore This element contains the same information as described for the VehAvailCore element of the OTA_VehAvailRate response and does not need much explanation. Just two notes:
1) Since the CRS system only works with UTC timestamps internally, the PickUpDateTime and ReturnDateTime attributes of the VehRentalCore will be given in UTC (identifiable by the Z suffix). However, in order to enhance readability, another two attributes PickUpLocalDateTime and ReturnLocalDateTime are provided as well specifying the pickup and return dates/times in local time (considering the timezone of the car rental company).
2) While equipment options of the OTA_VehAvailRate response are never included in the TotalCharge this may be different for an actual reservation record as in this case, all equipment options that have actually been included in the reservations will be considered for the EstimatedTotalAmount attribute of the TotalCharge. Hence, if the IncludedInEstTotalInd attribute is set to true for an equipment option it can be considered included in the quote/booking.

Additionally to the previously described information you can find two ConfID values. One will be of Type=16 which gives you the unique reservation reference that you'll need to look up the reservation again afterwards. The other gives you a more readable quote (Type="23", provisional reservation), reservation (Type="14") or contract (Type="39") number depending on the progress of the given reservation record. This second ConfID is provided for information purposes only and may not be used to recall reservation information through this API. It might be useful however for operators of a car rental company, in case you need personal support for a reservation.
VehSegmentInfo Again, this part of the response is similar to its VehAvailInfo counterpart of a OTA_VehAvailInfo response containing available coverage options that can be included in the booking. In case there is one PricedCoverage option with IncludeInEstTotalInd="true" it can be considered included in the quote or reservation.
Vehicle reservation retrieval request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehRetResRQ>
      <VehRetResRQCore>
        <ConfID Type="16" ID="{reservation reference}"/>
      </VehRetResRQCore>
    </ns1:OTA_VehRetResRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Vehicle reservation retrieval response
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehRetResRS>
      <ns1:VehRetResRSCore>
        <VehReservation ReservationStatus="Reserved">
          <Customer>
            <Primary BirthDate="2000-05-13">
              <CustomerID Type="1" ID="75854"/>
              <PersonName>
                <GivenName>John</GivenName>
                <Surname>Smith</Surname>
              </PersonName>
              <Telephone PhoneNumber="555555"/>
              <Email>j.smith@domain.com</Email>
              <Address>
                <AddressLine>543, 5th Avenue</AddressLine>
                <CityName>Washington</CityName>
                <CountryName>US</CountryName>
                <PostalCode>1234</PostalCode>
                <StateProv>DC</StateProv>
              </Address>
              <Document DocType="5" DocID="ABCDEF33" DocIssueAuthority="City of Washington D.C."
                  EffectiveDate="2017-01-01" ExpireDate="2021-12-31"/>
            </Primary>
            
            <!-- Additional customer information if available -->
            
          </Customer>
          <VehSegmentCore>
            <ConfID Type="16" ID="71603"/>
            <ConfID Type="14" ID="2020/00003 MI-MXP"/>
            <VehRentalCore PickUpDateTime="2020-03-03T09:36:53Z"
                ReturnDateTime="2020-03-07T09:36:53Z"
                PickUpLocalDateTime="2020-03-03T10:36:53"
                ReturnLocalDateTime="2020-03-07T10:36:53">
              <PickUpLocation LocationCode="98107384"/>
              <ReturnLocation LocationCode="98107384"/>
            </VehRentalCore>
            <Vehicle Code="CDAR" CodeContext="SIPP">
              <VehMakeModel Code="CDAR"/>
            </Vehicle>
            <RentalRate>
              <RateDistance Unlimited="false" DistUnitName="km" Quantity="1000" VehiclePeriodUnitName="Day"/>
              <VehicleCharges>
                <VehicleCharge Purpose="1" TaxInclusive="false" IncludedInEstTotalInd="true"
                    IncludedInRate="true" Description="2018 (km illimitati)" Amount="40" CurrencyCode="EUR">
                  <TaxAmounts>
                    <TaxAmount CurrencyCode="EUR" Percentage="22" Total="8.80"/>
                  </TaxAmounts>
                </VehicleCharge>
              </VehicleCharges>
            </RentalRate>
            <PricedEquips>
              <PricedEquip>
                <Equipment EquipType="13">
                  <Description>Navigatore</Description>
                </Equipment>
                <Charge IncludedInEstTotalInd="true" IncludedInRate="false" TaxInclusive="false"
                    Amount="40.00" CurrencyCode="EUR">
                  <TaxAmounts>
                    <TaxAmount CurrencyCode="EUR" Percentage="22" Total="8.80"/>
                  </TaxAmounts>
                </Charge>
              </PricedEquip>

              <!-- Other PricedEquip blocks with further optionals 
                   to book -->

            </PricedEquips>
            <TotalCharge CurrencyCode="EUR" RateTotalAmount="40.00" EstimatedTotalAmount="330.38"/>
          </VehSegmentCore>
          <VehSegmentInfo>
            <PricedCoverages>
              <PricedCoverage>
                <Coverage Code="23" CoverageType="21">
                  <Details CoverageTextType="[Cod. 2-A] - Copertura Standard"/>
                </Coverage>
                <Charge IncludeInEstTotalInd="false" TaxInclusive="false"
                    Description="[Cod. 2-A] - Copertura Standard" Amount="0" CurrencyCode="EUR">
                  <TaxAmounts>
                    <TaxAmount CurrencyCode="EUR" Percentage="22" Total="0.00"/>
                  </TaxAmounts>
                </Charge>
                <Deductible CurrencyCode="EUR" Amount="1200.00"/>
              </PricedCoverage>
              
              <!-- Other PricedCoverage blocks with further coverage options
                   to book -->

            </PricedCoverages>
          </VehSegmentInfo>
        </VehReservation>
      </ns1:VehRetResRSCore>
    </ns1:OTA_VehRetResRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

OTA_VehCancel

The OTA_VehCancel function can be used to cancel a previously performed reservation. All you need to do so is the reservation's uid/reference.

Request

After making a reservation successfully, the system returns the full reservation to the caller. This record contains a unique reservation reference that has to be given to this function in order to cancel the reservation.

Request parameter Description
UniqueID* Use the ID field of this element of the VehCancelRQCore block to provide the unique reference of the reservation that you are requesting to cancel. Note that for a reservation lookup only references of Type="16" (= reference) are valid.
(*) mandatory field

Response

Upon successful processing of a OTA_CancelRes request the system will respond to the caller confirming the cancellation of the reservation providing the CancelStatus="Cancelled" attribute of the VehCancelRSCore block.

Response parameter Description
CancelStatus This attribute of the VehCancelRSCore indicates that the reservation has been cancelled and should be set to Cancelled.
Vehicle reservation cancellation request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehCancelRQ>
      <VehCancelRQCore>
        <UniqueID Type="16" ID="{reservation reference}"/>
      </VehCancelRQCore>
    </ns1:OTA_VehCancelRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Vehicle reservation cancellation response
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
  <SOAP-ENV:Body>
    <ns1:OTA_VehCancelRS>
      <ns1:Success/>
      <VehCancelRSCore CancelStatus="Cancelled"/>
      <VehCancelRSInfo/>
    </ns1:OTA_VehCancelRS>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

CRS Booking Engine

The CRS Booking Engine documentation has not yet been incorporated into this document. For now, the can be found under the following link: https://carrentalsoftware.myappy.it/web/docs/CRSBooker-v1.3.pdf