---
title: "[Experimental] Get all quote options for your shipment"
method: POST
path: "/freights/freight-quote"
tags: ["Freight"]
---

# \[Experimental\] Get all quote options for your shipment

`POST /freights/freight-quote`

## Request

- Base URL: `https://stg.wearewarp.com/api/v1`
- URL: `https://stg.wearewarp.com/api/v1/freights/freight-quote`
- Auth: API key in header `apikey`

Pull a list of quote options for a potential delivery shipment - every bookable option from every enabled source is returned in `options[]`, cheapest first.<br/><br/>**Sources** depend on `shipmentType`: FTL - WARP only; LTL (default) - WARP and the partner LTL carriers; PARCEL - FedEx only. The optional `providers` query parameter (comma separated, e.g. `providers=WARP,Priority1`) restricts the sources to a subset of those allowed for your account for that shipment type.<br/><br/>**Rate limit:** this endpoint counts towards the quoting rate limit of your API key (per UTC hour and per UTC day). Above the limit the API answers 429 `rate_limit_exceeded` with a `Retry-After` header.<br/><br/>**Request notes:** `pickupDate` is `YYYY-MM-DD`. This is the only endpoint that returns every parcel service level. For PARCEL every package must respect the FedEx limits: weight per package (`totalWeight` / `quantity`) <= 150 lbs, longest side <= 108 in, length + girth (longest side + 2 x (the other two sides)) <= 165 in, and dimensions, weight and quantity must all be > 0. `items[].height` must be <= 85. Temperature-controlled (reefer) freight is not supported yet: sending `temperature_limit` is rejected with 400 `Reefer Shipment is not supported yet!`.<br/><br/>**Response notes:** `transitTime` is in seconds; `transitTimeWithoutTeam` is the transit time with a single driver instead of a team. `insurance` is only present when `insuranceInfo` was sent; when the insurance quote fails the block is `{ "insuranceQuoteId": null, "errorMessage": "..." }` and the freight options are still returned. Pass the chosen `options[].id` as `quoteId` to POST /freights/book before `expirationTs`.

## Query parameters

- `providers` string

## Request body

- FreightQuoteBody
  - `pickupDate` string, date, required: The earliest pickup date in YYYY-MM-DD format, in the timezone of the pickup stop.
  - `pickupInfo` object, required
    - `zipcode` string, required
    - `country` 'US' | 'CA': Country code (ISO 3166-1 alpha-2). Supported: US, CA. Defaults to US.
    - `serviceOptions` string[]
  - `deliveryInfo` object, required
    - `zipcode` string, required
    - `country` 'US' | 'CA': Country code (ISO 3166-1 alpha-2). Supported: US, CA. Defaults to US.
    - `serviceOptions` string[]
  - `additionalServices` string[]
  - `items` BookShipmentItem[], required: Line items. `barcodes` is ignored by this endpoint; `temperature_limit` is rejected (reefer not supported yet).
    - `name` string
    - `height` number, required: Maximum 108 on POST /freights/booking; maximum 85 on POST /freights/freight-quote, /freights/book and the multi-stops endpoints (checked on the raw value, whatever the sizeUnit).
    - `length` number, required
    - `width` number, required
    - `sizeUnit` 'IN' | 'FT', required
    - `totalWeight` number, required
    - `weightUnit` 'lbs' | 'kgs', required
    - `quantity` integer, required
    - `packaging` string: Packaging unit of the line item (e.g. Pallet). Defaults to Pallet.
    - `temperature_limit` object: Temperature-controlled (reefer) freight is NOT supported yet by the quote endpoints: POST /freights/quote rejects any non-zero min/max and POST /freights/freight-quote rejects the field entirely with 400 `Reefer Shipment is not supported yet!`. Omit this field unless instructed otherwise by WARP.
      - `min` number: Minimum temperature.
      - `max` number: Maximum temperature.
    - `stackable` boolean
    - `notes` string
    - `freightClass` string: NMFC freight class of the line item (e.g. 70).
    - `barcodes` string[]
  - `shipmentType` 'LTL' | 'FTL' | 'PARCEL': Selects the quote sources: FTL is priced by WARP only; LTL (default) by WARP and the partner LTL carriers; PARCEL by FedEx only (every parcel service level is returned as a separate option). PARCEL items must respect the FedEx limits per package: weight per package (totalWeight / quantity) <= 150 lbs, longest side <= 108 in, length + girth <= 165 in; dimensions, weight and quantity must be > 0.
  - `vehicleType` VehicleType
    - `code` 'DRY_VAN_53' | 'STRAIGHT_TRUCK_26' | 'CARGO_VAN': The type of vehicle (optional. If not provided, the system will automatically select the best vehicle type based on the shipment type and the items.)
  - `insuranceInfo` object: Optional. Provide to receive an insurance quote alongside the freight quote. Both fields are required to get an insurance quote; if omitted or incomplete, the insurance block is skipped.
    - `insuredValue` number: The declared value of the goods to be insured (in USD).
    - `commodity` string: A description of the commodity being shipped.

## Response `200`

successful creation

- FreightQuoteResult
  - `id` string: Response ID
  - `requestId` string: Request ID
  - `options` QuoteOption[]: List of Quote options with different service levels and rates.
    - `source` 'WARP' | 'Priority1' | 'WWEX' | 'Exfreight' | 'FFE' | 'ESTES' | 'DAT' | 'FedEx': Source of Quote Option (WARP network or a partner carrier).
    - `id` string: Quote ID to be used for subsequent booking.
    - `carrierCode` string: SCAC code of the carrier
    - `carrierName` string: Name of the carrier
    - `serviceLevel` string: Service level provided by carrier for the corresponding quote option
    - `name` string: Display name of the option (e.g. the FedEx service name for PARCEL options). Omitted when the source does not provide one.
    - `shipmentType` 'LTL' | 'FTL' | 'PARCEL': Type of delivery shipment
    - `transitTime` integer, nullable: Predicted Transit Time in seconds. Returned as `null` when the carrier does not publish a transit duration - FedEx only publishes one for Ground; its Express services (Overnight, 2Day, Express Saver) commit to an absolute date instead, exposed as `estimatedDeliveryDate`.
    - `transitTimeWithoutTeam` integer, nullable: Predicted transit time in seconds when the load is driven by a single driver instead of a team. Returned as `null` when not applicable.
    - `estimatedDeliveryDate` string, date: Carrier-committed delivery date (`YYYY-MM-DD`). Omitted when the carrier does not commit to a date. For FedEx Express services this is the only delivery estimate available, since `transitTime` is not published for them.
    - `rate` number, double: Total rate for this option (base freight + accessorials). Equals the sum of serviceCharges.
    - `serviceCharges` unknown[]: Rate lines making up `rate`: the TRANSIT row is the base freight charge and each SERVICE_OPTION row is an accessorial, so the amounts sum to `rate`. The TRANSIT row is omitted when it cannot be derived so that the rows always reconcile.
      - unknown
    - `expirationTs` integer: Expiration time in Epoch Milliseconds
  - `insurance` object: Insurance quote block. Only present when insuranceInfo is provided in the request. Independent of the freight rate options - it is an optional add-on. If the customer opts in, the insurance total is added to the order cost after booking.
    - `insuranceQuoteId` string, nullable: The insurance quote id. Pass this as insuranceQuoteId when booking to purchase the insurance. `null` when the insurance quote failed (see errorMessage).
    - `premium` number: The insurance premium.
    - `processingFee` number: The WARP processing fee for insurance.
    - `total` number: Total insurance charge (premium + processingFee).
    - `currency_code` string
    - `errorMessage` string: Only present when the insurance quote failed. Explains why (e.g. commodity excluded, insurer unavailable).

## Other responses

- `400`: Bad Request - the request payload is missing fields or contains invalid data.
- `401`: Unauthorized - the apikey header is missing or does not match any active API key.
- `403`: Forbidden - the customer account is suspended. The body carries `message` only, without `code`.
- `429`: Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.
- `500`: Internal Server Error - an unknown error has occurred.

---

[API](https://skmtc.dev/wearewarp/apis/warp-api-documentation.md) · [All operations](https://skmtc.dev/wearewarp/apis/warp-api-documentation/llms.txt) · [OpenAPI document](https://skmtc.dev/wearewarp/apis/warp-api-documentation/revisions/01526741bb48?raw)
