# Get the current quote of an order

> Get the current price of an order, its status and whether it can still be paid.

Endpoint: `POST /flights/get_order_quote`

Source: https://fx-port.com/docs/api/get-order-quote

`POST /api/v1/flights/get_order_quote`

Requires an API key with **Read** permission; a **Read+Write** key works too.

The step is optional: call it to preview or refresh the price of a held order before `pay_order`.

Send one of `order_id` (the supplier's order id, **preferred**), `booking_id` and `pnr`: the first one present wins. The FX-Port UUID is not accepted here. An Amadeus order is answered from the stored booking; a Duffel order is priced by the supplier. The order must be a booking of your agency in the environment of your key: an unknown order and the order of another agency answer the same `404 not_found`, before any supplier is asked.

**Read `success`.** When the supplier refuses the quote for an order FX-Port knows (a Duffel order that no longer exists at the supplier, for example) the answer is not a `404`: it is HTTP `200` with `success: false` and the supplier's own `error`, as in the second example.

## Request

### Body

Required, JSON.

- `order_id` (string, optional): The supplier's order id (`booking.reference` of the booking response). **Preferred**: a PNR is not unique.
- `booking_id` (string, optional): The PNR of the booking.
- `pnr` (string, optional): The airline record locator.
- `supplier_id` (string, optional): Only used when the booking has no supplier of its own.
- `agency_id` (string, optional): Not needed: the agency of a call is always the one of your API key. The field is accepted so that older clients keep working, and it is ignored.
- `orderId` (string, deprecated, optional): Legacy name: use `order_id`. The previous spelling of `order_id`: The supplier's order id (`booking.reference` of the booking response).
- `bookingId` (string, deprecated, optional): Legacy name: use `booking_id`. The previous spelling of `booking_id`: The PNR of the booking.
- `supplierId` (string, deprecated, optional): Legacy name: use `supplier_id`. The previous spelling of `supplier_id`: Only used when the booking has no supplier of its own.
- `agencyId` (string, deprecated, optional): Legacy name: use `agency_id`. The previous spelling of `agency_id`: Not needed: the agency of a call is always the one of your API key.

### Example request

```bash
curl https://api.fx-port.com/api/v1/flights/get_order_quote \
  -H "Authorization: Bearer fxp_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "order_id": "eJzTd9ePNA9wdA0FAAs8AmE"
}'
```

## Response

### 200: The quote. `success: false` with `error` when the supplier refused it.

- `environment` (string): The environment of the key that made the call: `sandbox` for fxp_test_ keys, `live` for fxp_live_ keys. Present in every JSON body. One of `sandbox`, `live`.
- `request_id` (string): The id of the request, also in the `X-Request-Id` header.
- `warnings` (array of object): Present only when the request used a previous spelling of a field or something the endpoint ignored.
  - `code` (string): What the warning is about. One of `deprecated_field`, `ignored_field`, `coerced_value`, `deprecated_value`, `deprecated_endpoint`.
  - `field` (string): The request field the warning is about.
  - `replacement` (string): The name to use instead, for `deprecated_*` warnings.
  - `message` (string): A sentence that says what happened and what to do.
  - `documentation_url` (string): Where the naming rules are explained.
- `success` (boolean): `true` when the quote could be built.
- `requestId` (string, deprecated): Legacy name: use `request_id`. The id of this request, 8 characters, for support.
- `orderId` (string, deprecated): Legacy name: use `order_id`. The supplier's order id.
- `order_id` (string): The supplier's order id. The snake_case twin of `orderId`, with the same value: use this name.
- `processingTime` (number, deprecated): Legacy name: use `processing_time`. Seconds spent.
- `processing_time` (number): Seconds spent. The snake_case twin of `processingTime`, with the same value: use this name.
- `orderQuote` (object): The quote.
  - `orderId` (string, deprecated): Legacy name: use `order_id`. The supplier's order id.
  - `order_id` (string): The supplier's order id. The snake_case twin of `orderId`, with the same value: use this name.
  - `bookingReference` (string, deprecated): Legacy name: use `pnr`. The PNR.
  - `pnr` (string): The PNR. The snake_case twin of `bookingReference`, with the same value: use this name.
  - `status` (string): The status of the booking: `awaiting_payment`, `confirmed`, `cancelled`.
  - `pricing` (object): The agency-facing price of an offer, a booking or a quote. Every amount is in `agencyCurrency`; the rate, when the currencies differ, is `exchangeRate` at the top level of the response.
    - `supplierCurrency` (string): ISO 4217 currency in which the supplier prices the fare.
    - `agencyCurrency` (string): ISO 4217 currency of your agency. Every amount of the block is in it.
    - `basePrice` (number, deprecated): Legacy name: use `base_price`. The airline's base fare, before taxes, in the agency currency.
    - `base_price` (number): The airline's base fare, before taxes, in the agency currency. The snake_case twin of `basePrice`, with the same value: use this name.
    - `taxesAndFees` (number, deprecated): Legacy name: use `taxes_and_fees`. Taxes plus the platform's fees, folded together. Excludes your agency commission.
    - `taxes_and_fees` (number): Taxes plus the platform's fees, folded together. Excludes your agency commission. The snake_case twin of `taxesAndFees`, with the same value: use this name.
    - `agencyCommission` (number, deprecated): Legacy name: use `agency_commission`. The commission of your agency on this sale.
    - `agency_commission` (number): The commission of your agency on this sale. The snake_case twin of `agencyCommission`, with the same value: use this name.
    - `finalPrice` (number, deprecated): Legacy name: use `final_price`. What the traveler pays: `basePrice + taxesAndFees + agencyCommission`.
    - `final_price` (number): What the traveler pays: `basePrice + taxesAndFees + agencyCommission`. The snake_case twin of `finalPrice`, with the same value: use this name.
    - `b2bPrice` (number, deprecated): Legacy name: use `b2b_price`. The amount debited from your agency balance: `finalPrice - agencyCommission`.
    - `b2b_price` (number): The amount debited from your agency balance: `finalPrice - agencyCommission`. The snake_case twin of `b2bPrice`, with the same value: use this name.
    - `totalAmount` (number): Order quote only: an alias of `b2bPrice`.
    - `taxAmount` (number): Order quote of a Duffel order only: the airline's taxes in your agency currency.
    - `originalTaxAmount` (number): Order quote of a Duffel order only: the same taxes in the supplier currency.
    - `additionalServices` (array of object): Paid extras. A list in the offers of a search (empty for most offers).
    - `acd` (object): Whether the fare is an ACD fare. Present on the offers of Amadeus Algeria, absent on Duffel offers. An ACD fare carries more keys with the amounts of the adjustment: they are informational, can change without notice and are not part of the contract.
      - `applied` (boolean): `true` for an ACD fare: the booking needs one passport copy for every traveler, sent with `upload_acd_documents`. `false` for an ordinary fare.
      - `scenario` (string): Only on an ACD fare: the rule that adjusted the price. Informational. One of `A`, `B`.
      - `exempt` (boolean): `true` when the search named an ACD-exempt company of your agency: the fare is priced without ACD.
      - `reason` (string): Only on some ACD fares: why the rule applied. Informational; the wording can change.
  - `paymentStatus` (object): Whether and until when the order can be paid.
    - `awaitingPayment` (boolean): `true` for a hold.
    - `paymentRequiredBy` (string, nullable): The payment deadline, when there is one.
    - `priceGuaranteeExpiresAt` (string, nullable): Until when the price is guaranteed.
    - `priceGuaranteed` (boolean): Whether the price of the hold is guaranteed.
    - `canPay` (boolean): Whether `pay_order` can pay the order now.
  - `liveMode` (boolean): `false` in the sandbox.
- `supplier` (object): The supplier of the order.
  - `id` (string, deprecated): Legacy name: use `supplier_id`. Id of the supplier.
  - `supplier_id` (string): Id of the supplier. The snake_case twin of `id`, with the same value: use this name.
  - `technology` (string): The technology of the supplier: `amadeus_aqc` or `duffel`.
  - `name` (string, deprecated): Legacy name: use `supplier_name`. Name of the supplier.
  - `supplier_name` (string): Name of the supplier. The snake_case twin of `name`, with the same value: use this name.
  - `offerId` (string, nullable, deprecated): Legacy name: use `supplier_offer_id`. The supplier's own id of the offer.
  - `supplier_offer_id` (string, nullable): The supplier's own id of the offer. The snake_case twin of `offerId`, with the same value: use this name.
- `agency` (object): Your agency. The id of the agency is not returned: you know it.
  - `currency` (string): ISO 4217 currency of your agency. Every amount of the response is in it.
- `meta` (object): `priceGuaranteed`, `paymentDeadline`, `canPay`.
- `exchangeRate` (object, deprecated): Legacy name: use `exchange_rate`. Duffel orders: `{ rate, marginPercent, fromCurrency, toCurrency }`.
- `exchange_rate` (object): Duffel orders: `{ rate, marginPercent, fromCurrency, toCurrency }`. The snake_case twin of `exchangeRate`, with the same value: use this name.
- `error` (object): Only when `success` is `false`: the refusal of the supplier for `get_order_quote`.
  - `message` (string): The supplier's message.
  - `code` (string): The supplier's code: a number as text for Amadeus (`4926`), a name for Duffel (`order_not_cancellable`).
  - `type` (string): The supplier's error type.
  - `details` (array of object): The supplier's details, in its own format.
  - `userMessage` (string): A sentence the supplier wrote for the traveler, when there is one.
- `errors` (array of object): Only when `success` is `false`: the unified error list. `errors[0].code` is the supplier's code in lower case and `errors[0].type` is `supplier_error`.
  - `code` (string): Stable, machine-readable code in snake_case. Branch on this, never on the message.
  - `type` (string): The family of the error: tells you how to react. One of `authentication_error`, `permission_error`, `validation_error`, `not_found`, `conflict`, `payment_error`, `rate_limit_error`, `supplier_error`, `internal_error`.
  - `title` (string): A short label of the error.
  - `message` (string): A sentence for a human: what is wrong and how to fix it. Wording can change; the code does not.
  - `field` (string, nullable): The request field the error is about, when there is one.
  - `details` (object, nullable): Structured extras of the error (for example `available` and `required` for an insufficient balance).
  - `documentation_url` (string): The documentation of this error code.

```json
{
  "environment": "sandbox",
  "success": true,
  "requestId": "469d8803",
  "orderId": "eJzTd9ePNA9wdA0FAAs8AmE",
  "processingTime": 0.134,
  "orderQuote": {
    "orderId": "eJzTd9ePNA9wdA0FAAs8AmE",
    "bookingReference": "Y7PAEU",
    "status": "awaiting_payment",
    "pricing": {
      "supplierCurrency": "DZD",
      "agencyCurrency": "DZD",
      "basePrice": 3160,
      "taxesAndFees": 1765.44,
      "agencyCommission": 4.93,
      "finalPrice": 4930.37,
      "b2bPrice": 4925.44,
      "additionalServices": [],
      "totalAmount": 4925.44
    },
    "paymentStatus": {
      "awaitingPayment": true,
      "paymentRequiredBy": null,
      "priceGuaranteeExpiresAt": null,
      "priceGuaranteed": true,
      "canPay": true
    },
    "liveMode": false
  },
  "supplier": {
    "id": "amadeus_aqc_dz_1",
    "technology": "amadeus_aqc",
    "name": "Amadeus Algeria"
  },
  "agency": {
    "currency": "DZD"
  },
  "meta": {
    "priceGuaranteed": true,
    "paymentDeadline": null,
    "canPay": true
  }
}
```

## Errors

| Status | Code | Example message |
| --- | --- | --- |
| 400 | `bad_request` | Missing required parameter: order_id (or booking_id / pnr) |
| 400 | `invalid_booking_id` | `order_id` is not a valid identifier (letters, digits and - _ . : = ~ only, up to 128 characters). |
| 404 | `not_found` | Booking not found for order_id: ZZZZZZ |

See [Errors](https://fx-port.com/docs/errors.md) for every code and how to react.

## Related guides

- [Get an order quote](https://fx-port.com/docs/flights/get-order-quote.md)
- [Pay for a held order](https://fx-port.com/docs/flights/pay-order.md)
- [Booking flows](https://fx-port.com/docs/flights/booking-flows.md)
