03 Create quote

View as Markdown
Creates a priced quote. Every booking starts here, in status `quote`, and stays a quote until you confirm it with **06 Confirm quote**. Quotes are valid for **one week** from creation. `expires_on` in the response is authoritative. An expired quote cannot be confirmed; reprice it first with **05 Reprice quote**. ### Required fields | Field | Rules | | --- | --- | | `booker_id` | Must be a user of the company that owns your client credentials. | | `currency` | ISO code that exists in our currency table, e.g. `GBP`. | | `confirm` | `required|boolean`. See the note below before relying on it. | | `journeys[]` | At least one. | | `journeys[].flight` | Airline code plus number, e.g. `EK1`. Validated against the allowed-airline list. | | `journeys[].adult` / `.child` / `.infant` | Integers, max 1000 each. | | `journeys[].bag_medium` | Integer, max 2000. `bag_small` and `bag_large` are optional. | | `journeys[].stops` | `arrival`, `departure`, or both. **One leg is enough** on this API. | | `stops.*.date` / `.meeting_date` / `.terminal_id` | Required once that leg is present. | Optional: `comments`, `website`, `journeys[].manual`, `journeys[].passengers`, `settings.customer_reference`. `settings.customer_reference` is your own reference. Letters, digits and hyphens only, unique across your bookings, and the key you can later look the booking up by with **11 Get booking by your reference**. Worth sending on every booking: it is the only handle you control. Set `journeys[].manual` to `true` to stop us looking the flight up and adjusting your dates to the published schedule. ### How passenger counts affect the price Each service on a stop is priced from the journey's `adult`, `child` and `infant`. There is no per-service passenger override, so send the real counts. | Service | Priced on | | --- | --- | | Meet & Assist (`1`) | `adult + child`, from a nine-tier cumulative table. Infants are not counted. | | Porter Service (`2`) | `bag_small + bag_medium + bag_large`. | | Fast Track (`3`) | `adult + child`. | | Lounge Access (`4`) | `adult`, `child` and `infant` charged separately, each at its own rate. | | Electric Buggy (`84`) | `adult + child`, in bands. | Lounge Access is the only service that charges infants, and only where the airport has a non-zero infant rate. The example books Meet & Assist and Lounge Access at AUH, and the response shows the lounge line at four adults. ### Responses | Status | `error_code` | When | | --- | --- | --- | | `200` | — | Created. `message` is `Booking Created successfully!` | | `422` | `validation_failed` | Anything wrong with the payload, including a `booker_id` outside your company and a `customer_reference` you have already used. Every problem is reported at once in `errors`. | | `401` | `unauthenticated` | Bearer token missing, invalid or expired. | | `429` | `rate_limit_exceeded` | Over 300 requests a minute. | | `500` | `server_error` | Our fault. Nothing was created. | ### Two things to know **`confirm` does not confirm.** It is validated as required, but sending `confirm: true` leaves the booking in status `quote`, and the response still says `Booking Created successfully!` with no error. Measured, in both JSON and query-parameter form. Call **06 Confirm quote** explicitly instead. **There is no idempotency key.** Retrying a request that timed out creates a second booking with a second reference. Send a unique `settings.customer_reference` on every attempt. If a retry comes back `422` with `errors["settings.customer_reference"]`, that is proof the first attempt succeeded: fetch it with **11 Get booking by your reference** rather than creating another.

Authentication

AuthorizationBearer

Bearer authentication of the form Bearer <token>, where token is your auth token.

Request

This endpoint expects a string.

Response

OK
messagestring
statusinteger
responseTimestring
tracelist of any
dataobject

Errors

422
Unprocessable Entity Error