Download the current OpenTravel Alliance (OTA) Car Rental specification (2015B or later) from opentravel.org; identify the OTA_VehAvailRate and OTA_VehRes message pairs you need to implement.
Build an OTA_VehAvailRateRQ XML document with RequestedInfo specifying VehicleAvailCore and VehicleAvailInfo; set PickUpLocation and ReturnLocation using IATA or supplier location codes.
Send the request to the rental supplier's OTA endpoint over HTTPS with appropriate SOAPAction or REST Content-Type headers; handle the OTA_VehAvailRateRS response, checking the Errors element before parsing rates.
Map the AcrissCode in each VehicleAvailCore to display vehicle category (e.g., CCAR = compact car) using the ACRISS 4-character code lookup table published at acriss.org.
Construct OTA_VehResRQ with the selected RateKey, customer PII (name, contact, driving licence country), and optionally a corporate ID or promotional code; submit to the reservation endpoint.
Parse OTA_VehResRS: check InventoryStatus and extract VehReservation/ConfID for the supplier confirmation number and any deposit or payment instructions.
Known gotchas
OTA XML namespaces must exactly match the schema version being used; a minor version mismatch (e.g., 2015A vs 2015B) in the xmlns declaration causes validation rejections on strict supplier implementations.
RateKey values in OTA responses are session-scoped and short-lived; do not persist them across user sessions or you risk booking failures with an 'expired rate key' error.
Some suppliers implement a subset of the OTA Car specification and omit optional elements; always code defensively with null-checks on optional elements like SpecialEquipment and RentalPaymentAmount.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp