data.customer. Use data.customer.id as customer_id when you confirm the booking.brand_id, vehicle_class_id, additional_charges): the booking is priced again and the call fails without it. The reservation is not saved yet.contact_id (404 if it does not exist), contact_uuid, or external_contact_type with external_contact_id (created the first time that pair is seen). Without any of these a new contact is created on every call, even when a contact with the same email already exists.first_name, last_name and birthdate are mapped to the account's contact fields automatically. Any other field of the customer form is sent as field_<id> (see GET /car-rental/reservations/fields/customer). Which fields are required depends on the account's form. When you update an existing contact, the form fields you leave out are cleared; send ignore_empty_fields to keep the main contact fields you do not send.POST /files/upload (step 7), then create the booking with POST /car-rental/reservations/confirm (step 8).{
"pick_up_date": "2026-12-01",
"pick_up_time": "10:00",
"return_date": "2026-12-05",
"return_time": "10:00",
"pick_up_location": 1,
"return_location": 1,
"brand_id": 1,
"vehicle_class_id": 3,
"additional_charges": [
"12"
],
"external_contact_type": "my-booking-site",
"external_contact_id": "CUS-10293",
"first_name": "Jane",
"last_name": "Doe",
"birthdate": "1990-04-15",
"field_254": "D123-456-78-901-0",
"reservation_attempt_uuid": "6f1d2c9a-3b7e-4f61-8d2a-0c5e9b4a7f13"
}success. When it is false, the body is an ErrorBusinessRule (status_code 410) or an ErrorUnauthorized (status_code 401 or 403). Business-rule failures here include form validation errors and driver age or license failures. Form errors are keyed by field_<id> and also by the generic name (for example first_name). When the contact was saved but the driver checks failed, data.contact_id holds its ID: send it as contact_id on the retry to avoid a duplicate.{
"success": true,
"status_code": 200,
"errors": [],
"data": {
"reservation": {
"id": null,
"header": "New Reservation",
"pick_up_date": "2026-12-01 10:00:00",
"return_date": "2026-12-05 10:00:00",
"flight_arrival_date": "2026-12-01 10:00:00",
"flight_departure_date": "2026-12-05 10:00:00",
"flight_number": "",
"flight_departure_number": "",
"pick_up_location": {
"id": 1,
"name": "Miami Airport",
"timezone": "America/New_York"
},
"return_location": {
"id": 1,
"name": "Miami Airport",
"timezone": "America/New_York"
},
"vehicle_class_id": 3,
"customer_id": 4821,
"public_link": "",
"comments": [],
"distance_limits": {
"distance_allowed": 0,
"distance_limit_per_day": 0,
"distance_unit": "mi",
"distance_unlimited": true,
"distance_extra_price": {
"currency": "usd",
"currency_icon": "$",
"amount": "0.00",
"usd_amount": "0.00",
"amount_for_display": "$0.00"
},
"distance_extra_price_with_tax": {
"currency": "usd",
"currency_icon": "$",
"amount": "0.00",
"usd_amount": "0.00",
"amount_for_display": "$0.00"
}
}
},
"tour_operator": [],
"selected_vehicle_class": {
"vehicle_class_id": 3,
"sipp_code": "CDAR",
"price": {
"total_days": 4,
"base_price": {
"currency": "usd",
"currency_icon": "$",
"amount": "180.00",
"usd_amount": "180.00",
"amount_for_display": "$180.00"
},
"base_price_with_taxes": {
"currency": "usd",
"currency_icon": "$",
"amount": "198.00",
"usd_amount": "198.00",
"amount_for_display": "$198.00"
},
"details": [],
"total_price_with_mandatory_charges_and_taxes": {
"currency": "usd",
"currency_icon": "$",
"amount": "220.00",
"usd_amount": "220.00",
"amount_for_display": "$220.00"
}
},
"vehicle_class": {
"label": "Compact",
"short_description": "Nissan Versa or similar",
"description": "",
"features": [],
"image": "https://yourcompany.example.com/public/fleets/images/3f1c9e2a-7b4d-4c8e-9a6f-1d2e3c4b5a69/vehicle-class",
"recommended": false
}
},
"selected_additional_charges": [
{
"id": 12,
"label": "GPS",
"selection_type": "only_one",
"selected_quantity": 1,
"charge_type": "daily",
"base_price": {
"currency": "usd",
"currency_icon": "$",
"amount": "5.00",
"usd_amount": "5.00",
"amount_for_display": "$5.00"
},
"total_price": {
"currency": "usd",
"currency_icon": "$",
"amount": "20.00",
"usd_amount": "20.00",
"amount_for_display": "$20.00"
}
}
],
"external_charges": [],
"vehicle_damages": [],
"applicable_discounts": [],
"applicable_taxes": [
{
"name": "Sales Tax (10%)",
"base_price": 10,
"charge_type": "percent",
"total_amount": {
"currency": "usd",
"currency_icon": "$",
"amount": "20.00",
"usd_amount": "20.00",
"amount_for_display": "$20.00"
}
}
],
"total": {
"show_security_deposit": true,
"show_security_deposit_excess": false,
"outstanding_balance": {
"currency": "usd",
"currency_icon": "$",
"amount": "220.00",
"usd_amount": "220.00",
"amount_for_display": "$220.00"
},
"outstanding_security_deposit": {
"currency": "usd",
"currency_icon": "$",
"amount": "300.00",
"usd_amount": "300.00",
"amount_for_display": "$300.00"
},
"security_deposit": {
"currency": "usd",
"currency_icon": "$",
"amount": "300.00",
"usd_amount": "300.00",
"amount_for_display": "$300.00"
},
"security_deposit_excess": {
"currency": "usd",
"currency_icon": "$",
"amount": "0.00",
"usd_amount": "0.00",
"amount_for_display": "$0.00"
},
"total_paid": {
"currency": "usd",
"currency_icon": "$",
"amount": "0.00",
"usd_amount": "0.00",
"amount_for_display": "$0.00"
},
"total_price": {
"currency": "usd",
"currency_icon": "$",
"amount": "220.00",
"usd_amount": "220.00",
"amount_for_display": "$220.00"
}
},
"customer": {
"id": 4821,
"entity": "person",
"first_name": "Jane",
"last_name": "Doe",
"email": "jane.doe@example.com",
"phone_number": "+1 305 555 0142",
"country": "US",
"birthdate": "1990-04-15"
}
}
}