More products
Transfers
Transfers move travellers between an airport, a hotel or any address. Search by pickup and drop-off, book with the arriving flight when it's needed, and pass on pickup instructions exactly.
Search
{
"productType": "transfer",
"pickupLocation": { "type": "airport", "code": "DXB" },
"dropoffLocation": { "type": "hotel", "code": "c9b1e2f4a7d34b0e" },
"pickupAt": "2026-11-10T14:30:00",
"returnAt": "2026-11-13T09:00:00",
"occupancy": [{ "adults": 2, "childrenAges": [7] }],
"currency": "USD",
"market": "GB"
}| Location type | code |
|---|---|
airport | IATA airport code, e.g. DXB. |
hotel | The hotel's canonicalId from GET /catalog/suggest. |
address | Coordinates as "lat,lng", e.g. "25.2048,55.2708". |
pickupAtis the pickup date and time; for airport pickups, use the flight's scheduled landing time. AddreturnAtfor a return journey. Depending on the inventory, a row then covers either one direction —details.directiononGET /quotes/:id/detailsisARRIVALorDEPARTURE, and you book each leg as its own booking — or the whole round trip, withsummary.tripType: "round", priced for both legs and booked as one booking.- The party comes from
occupancy. The optionalpassengersoverrides only the adult count — children fromchildrenAgesare still added — so for 2 adults and a child, sendpassengers: 2or leave it out.luggageis accepted but not currently used; check each row'sluggageAllowanceinstead. - No
destinationis needed. Transfer searches finish beforePOST /searchreturns.
Results
Each row is one vehicle option for the journey:
{
"rateQuoteId": "66f2c4e5e4b0c1d2e3f4e300",
"sellAmountMinor": 6400,
"sellCurrency": "USD",
"refundable": true,
"summary": {
"route": "DXB→c9b1e2f4a7d34b0e",
"vehicleName": "Standard car",
"transferType": "PRIVATE",
"categoryName": "Standard",
"minPax": 1,
"maxPax": 3,
"journeyTime": 35,
"luggageAllowance": 3,
"requiresFlightDetails": true,
"cancellationPolicy": {
"refundable": true,
"deadlines": [{ "before": "2026-11-09T14:30:00Z", "penaltyMinor": 6400, "currency": "USD" }]
}
}
}Show the vehicle, whether it's private or shared, the passenger and luggage limits and the journey time. Check maxPax and luggageAllowance against the party — an overfull car is refused at pickup. Capacity, category and journey-time fields are null when the inventory doesn't provide them; then go by the vehicle description and the quote details.
Price-check and details
Transfer prices are fixed at search, but the price-check is still required before booking. Fetch GET /quotes/:id/details for the pickup details (pickupInformation) and remarks (transferRemarks, when present), and show them before the traveller books.
Flight details
When a row has requiresFlightDetails: true, the transfer needs the flight — the arriving flight for an airport pickup, or the departing flight for an airport drop-off. Add it to the lead traveller:
{
"title": "Ms",
"firstName": "Anna",
"lastName": "Smith",
"email": "anna.smith@example.com",
"phone": "+447700900123",
"carrierName": "Example Air",
"flightNumber": "XA001",
"flightTime": "14:05"
}flightNumberis at most 7 characters: airline code plus number, no spaces (XA001). Anything longer is refused with400 validation_error.- Missing
carrierNameorflightNumberreturns400 transfer_flight_details_required. - The lead traveller also needs
emailandphone— drivers call when they can't find the party. - Always send a
titleon the lead traveller (Mr,Mrs,Ms,Miss,MasterorDr), whether or not the flight is needed. Some transfers need it, the quote doesn't say which, and without it they return400 traveler_title_required.
Pickup-time reconfirmation
For some transfers the exact pickup time is only fixed close to the day. These have mustCheckPickupTime: true in the quote details:
"details": {
"mustCheckPickupTime": true,
"checkPickup": {
"mustCheckPickupTime": true,
"url": "https://www.checkpickup.com",
"hoursBeforeConsulting": 48
},
"pickupInformation": {
"from": { "code": "DXB", "description": "Dubai International Airport" },
"to": { "code": "…", "description": "Example Marina Hotel" }
},
"transferRemarks": "Meet your driver at the arrivals hall exit, holding a sign with your name."
}Book and deliver the voucher
Book with paymentMethod: "credit"; transfers are sold net. Most confirm straight away; if one returns supplier_pending, poll it as described in Booking statuses. When the operator issues one, a confirmed transfer carries the operator's voucher in the line item's details.supplierVouchers — give it to the traveller unchanged, together with the pickup instructions. Not every transfer has one (round trips booked as one booking often don't); then your own voucher with the pickup details is what the traveller carries.
A round trip booked as one booking has details.transferLegs on its line item, with a departure and a return entry, each carrying its own bookingReference and status.
Cancel
Cancel with POST /bookings/:id/cancel after checking cancellationPolicy. For a round trip booked as one booking, the whole trip is cancelled unless you send a scope in the body:
{ "transferCancelScope": "return" }transferCancelScopeis"whole"(the default),"departure"or"return". It is ignored for other bookings.- Cancelling one leg leaves the booking in its current state; that leg's
details.transferLegsentry changes tocancelled, andrefund.statusismanual_review— our operations team settles any refund for the leg. - Once both legs are cancelled, the booking itself is cancelled.