Skip to main content

Creating a booking

POST /v1/booking/create books a journey with Addison Lee. There are four common ways to call it:

  1. Against a quote — reference a request_id from a previous price quote.
  2. Directly, without a quote — send the full locations array in the booking request itself.
  3. Airport pick-ups and drop-offs — a direct booking where one stop is an airport and carries flight details.
  4. Courier delivery — a direct booking that carries a contact at each stop instead of passengers.

All of them return the same body — the booking's job_uuid, job_number, and booking_status.

Idempotency. Set partner_reference.booking.id to a unique value from your own system. Quickbook creates only one booking per partner reference, so a retried request never results in a duplicate booking.

Against a quote

Pass the request_id and quote_id you received from the quote, the chosen service, and a contact for the journey. You don't repeat the locations — they're taken from the quote.

curl -X POST "$QB_BASE/v1/booking/create" \
-H "Authorization: $QB_AUTH" \
-H "Content-Type: application/json" \
-d '{
"request_id": "158aba9c-e8c8-42cc-ae79-b9324899ac94",
"payment_method": "Account",
"service": "standard_car",
"contact": {
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
},
"passengers": [
{
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
}
]
}'

Directly, without a quote

To book without quoting first, omit request_id/quote_id and supply the full locations array (pick-up first, drop-off last). Provide the service, a booking contact, and the passengers travelling. information and references are optional.

curl -X POST "$QB_BASE/v1/booking/create" \
-H "Authorization: $QB_AUTH" \
-H "Content-Type: application/json" \
-d '{
"payment_method": "Account",
"service": "standard_car",
"pickup_dt": "2026-07-20T09:00:00+01:00",
"locations": [
{
"source": "Address",
"street_address": "Barbican Centre, 10 Silk St",
"town": "London",
"postcode": "EC2Y 8DS",
"country": "GB",
"lat": 51.520024,
"long": -0.092447
},
{
"source": "Address",
"street_address": "189 Earlsfield Road",
"town": "London",
"postcode": "SW18 3DD",
"country": "GB"
}
],
"contact": {
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
},
"passengers": [
{
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
}
],
"information": [
{
"type": "Notes",
"value": "Meet at the main entrance."
}
]
}'

Every variant returns the same confirmation body:

{
"job_uuid": "36b5ffa8-61f0-11e5-9d70-feff819cdc9f",
"job_number": "654321",
"booking_status": "booked"
}

Airport pick-ups and drop-offs

When a stop is an airport, set its source to Airport and add an airport object to that location. Everything else is an ordinary direct booking.

FieldDescription
iataAirport IATA code, e.g. LHR.
terminalTerminal, e.g. 5.
flight_numberFlight number, e.g. IB0717.
arrival_fromOrigin of the arriving flight — pick-ups only.

On a pick-up, the flight details let the driver track the flight and adjust the meeting time if it lands early or late, so send flight_number and arrival_from whenever you have them. On a drop-off, iata and terminal are what matter — they put the car at the right departures door.

Airport pick-up

The airport is the first location. arrival_from is the airport the passenger is flying in from.

curl -X POST "$QB_BASE/v1/booking/create" \
-H "Authorization: $QB_AUTH" \
-H "Content-Type: application/json" \
-d '{
"payment_method": "Account",
"service": "standard_car",
"pickup_dt": "2026-07-20T09:00:00+01:00",
"locations": [
{
"source": "Airport",
"street_address": "T5 London Heathrow Airport LHR Terminal 5",
"town": "London",
"postcode": "TW6 2NR",
"country": "GB",
"lat": 51.4715271,
"long": -0.4898423,
"airport": {
"iata": "LHR",
"terminal": "5",
"flight_number": "IB0717",
"arrival_from": "Madrid"
}
},
{
"source": "Address",
"street_address": "189 Earlsfield Road",
"town": "London",
"postcode": "SW18 3DD",
"country": "GB"
}
],
"contact": {
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
},
"passengers": [
{
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
}
]
}'

pickup_dt is still the time the car is required. For a pick-up you would normally set it a little after the scheduled landing time to allow for baggage reclaim.

Airport drop-off

The airport is the last location, and the airport object carries the departing flight instead.

curl -X POST "$QB_BASE/v1/booking/create" \
-H "Authorization: $QB_AUTH" \
-H "Content-Type: application/json" \
-d '{
"payment_method": "Account",
"service": "standard_car",
"pickup_dt": "2026-07-20T09:00:00+01:00",
"locations": [
{
"source": "Address",
"street_address": "Barbican Centre, 10 Silk St",
"town": "London",
"postcode": "EC2Y 8DS",
"country": "GB",
"lat": 51.520024,
"long": -0.092447
},
{
"source": "Airport",
"street_address": "T5 London Heathrow Airport LHR Terminal 5",
"town": "London",
"postcode": "TW6 2NR",
"country": "GB",
"lat": 51.4715271,
"long": -0.4898423,
"airport": {
"iata": "LHR",
"terminal": "5",
"flight_number": "IB0717"
}
}
],
"contact": {
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
},
"passengers": [
{
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
}
]
}'

Both variants are also available as ready-made request bodies in the API Reference — see the Airport pickup booking and Airport drop booking examples under Create a booking.

Courier delivery

A courier booking is a direct booking with two differences:

  • Choose a courier service (for example small_van).
  • Give each location its own contact — the person to collect from at the pick-up and the person to deliver to at each drop-off. passengers is not required.

Use information to carry parcel details (contents, size, handling notes).

curl -X POST "$QB_BASE/v1/booking/create" \
-H "Authorization: $QB_AUTH" \
-H "Content-Type: application/json" \
-d '{
"payment_method": "Account",
"service": "small_van",
"pickup_dt": "2026-07-20T09:00:00+01:00",
"locations": [
{
"source": "Address",
"street_address": "Barbican Centre, 10 Silk St",
"town": "London",
"postcode": "EC2Y 8DS",
"country": "GB",
"notes": "Collect from the loading bay at the rear.",
"contact": {
"name": "Warehouse Desk",
"mobile": "07700900111",
"email": "dispatch@example.com"
}
},
{
"source": "Address",
"street_address": "189 Earlsfield Road",
"town": "London",
"postcode": "SW18 3DD",
"country": "GB",
"notes": "Ring the buzzer for flat 4.",
"contact": {
"name": "Jane Doe",
"mobile": "07700900123",
"email": "jane.doe@example.com"
}
}
],
"contact": {
"name": "Logistics Team",
"mobile": "07700900100",
"email": "logistics@example.com"
},
"information": [
{
"type": "Notes",
"value": "1 box, approx. 5 kg. Fragile — keep upright."
}
]
}'

Multi-account bookings

Some partners manage a main account with one or more linked accounts underneath it — a multi-account setup. To book against a linked account instead of the main one:

  • The Authorization header must carry the main account's client_id:client_secret — never the linked account's.
  • Set payment_method to MultiAccount.
  • Set account.number to the linked account's number.
{
"payment_method": "MultiAccount",
"account": {
"number": "123456"
},
"service": "standard_car",
"pickup_dt": "2026-07-20T09:00:00+01:00",
"locations": [
{
"source": "Address",
"street_address": "189 Earlsfield Road",
"town": "London",
"postcode": "SW18 3DD",
"country": "GB"
}
]
}

This applies to any of the booking methods above, and to price quotes as well.

Next steps

  • Amend or cancel a booking, or fetch its live detail, under Bookings in the API Reference.
  • Track progress via Status webhooks rather than polling.