---
title: "Get freight quotes"
method: POST
path: "/v1/freight/quotes"
tags: ["freight"]
---

# Get freight quotes

`POST /v1/freight/quotes`

Retrieve freight rate offers for a shipment. Each offer in the response is a bookable quote from a specific LTL carrier.

There are two ways to request quotes:

- **Inline.** Describe the shipment in the request: `ship_from`, `ship_to`, and `handling_units`.
- **Linked to an existing shipment.** Provide `shipment_id`. The origin is taken from the shipment's ship-from warehouse and the destination from the order's ship-to address, so `ship_from` and `ship_to` must be omitted. `handling_units`, `accessorials`, and `insurance` are optional in this mode: when provided they are saved as the shipment's freight configuration, and when omitted the previously saved configuration is reused.

To book one of the returned offers, pass its `quote_request_id`, `offer_id`, `carrier_scac`, and `quote_expiration_date` to [Book a freight shipment](#operation/book_freight_shipment).

All dimensions are interpreted as inches and all weights as pounds.

## Request body

- GetFreightQuotesRequestBody — A freight quote request. Either describe the shipment inline with `ship_from`, `ship_to`, and `handling_units`, or link it to an existing shipment with `shipment_id`.
  - `freight_provider_account_id` string, required — A string that uniquely identifies a ShipEngine resource, such as a carrier, label, shipment, etc.
  - `shipment_id` string — A string that uniquely identifies a ShipEngine resource, such as a carrier, label, shipment, etc.
  - `ship_from` FreightAddress — An origin or destination address for a freight shipment. LTL carriers require a contact name, company name, and phone number at both ends of the shipment so the driver can arrange pickup and delivery.
    - `name` string, required — The name of the contact person at this location.
    - `company_name` string, required — The name of the business at this location.
    - `address_line1` string, required — The first line of the street address.
    - `address_line2` string, nullable — The second line of the street address, such as a dock or suite number.
    - `city_locality` string, required — The city or locality.
    - `state_province` string, required — The state or province.
    - `postal_code` string, required — The postal code.
    - `country_code` string, required — The two-letter ISO 3166-1 alpha-2 country code.
    - `phone` string, required — The phone number of the contact person. Carriers call this number to arrange pickup or delivery.
    - `email` string, nullable — The email address of the contact person.
    - `location_type` 'airport' | 'carrier_terminal' | 'commercial' | 'construction' | 'container_freight_station' | 'distribution_center' | 'government_facility' | 'limited_access' | 'pier_port_wharf' | 'residential' | 'secured_access' | 'trade_show' | 'null', nullable — How the carrier should classify this location. Location type affects accessorial charges — for example, residential and limited-access locations usually carry a surcharge. An unrecognized value is rejected with a `400 Bad Request`.
  - `ship_to` FreightAddress — An origin or destination address for a freight shipment. LTL carriers require a contact name, company name, and phone number at both ends of the shipment so the driver can arrange pickup and delivery.
    - `name` string, required — The name of the contact person at this location.
    - `company_name` string, required — The name of the business at this location.
    - `address_line1` string, required — The first line of the street address.
    - `address_line2` string, nullable — The second line of the street address, such as a dock or suite number.
    - `city_locality` string, required — The city or locality.
    - `state_province` string, required — The state or province.
    - `postal_code` string, required — The postal code.
    - `country_code` string, required — The two-letter ISO 3166-1 alpha-2 country code.
    - `phone` string, required — The phone number of the contact person. Carriers call this number to arrange pickup or delivery.
    - `email` string, nullable — The email address of the contact person.
    - `location_type` 'airport' | 'carrier_terminal' | 'commercial' | 'construction' | 'container_freight_station' | 'distribution_center' | 'government_facility' | 'limited_access' | 'pier_port_wharf' | 'residential' | 'secured_access' | 'trade_show' | 'null', nullable — How the carrier should classify this location. Location type affects accessorial charges — for example, residential and limited-access locations usually carry a surcharge. An unrecognized value is rejected with a `400 Bad Request`.
  - `shipment_date` string, date-time, nullable — The date the freight is ready to ship. Defaults to the current date when omitted.
  - `handling_units` FreightHandlingUnit[] — The handling units being shipped. Required when `shipment_id` is omitted.
    - `type` 'bag' | 'bale' | 'box' | 'bundle' | 'carton' | 'case' | 'crate' | 'cylinder' | 'drum' | 'pail' | 'pallet' | 'pieces' | 'reel' | 'roll' | 'skid' | 'tank' | 'tote' | 'trailer' | 'tube' | 'null', nullable — The kind of handling unit. Defaults to `pallet`. Unrecognized values are ignored rather than rejected.
    - `quantity` integer, required — The number of identical handling units being shipped. The dimensions, weight, and commodities describe one of them; the carrier multiplies them out.
    - `length` number, double, required — The length of a single handling unit, in the unit specified by `dimension_unit`.
    - `width` number, double, required — The width of a single handling unit, in the unit specified by `dimension_unit`.
    - `height` number, double, required — The height of a single handling unit, in the unit specified by `dimension_unit`.
    - `dimension_unit` 'inch' | 'centimeter', required — The dimension units that are supported by ShipEngine.
    - `stackable` boolean — Whether the carrier may stack other freight on top of this handling unit. Non-stackable freight consumes more trailer space and can cost more.
    - `commodities` FreightCommodity[], required — The goods inside a single handling unit. At least one commodity is required.
      - `description` string, nullable — A description of the goods. Carriers print this on the Bill of Lading.
      - `quantity` integer, required — The number of pieces of this commodity inside a single handling unit.
      - `weight` number, double, required — The total weight of this commodity line inside a single handling unit.
      - `weight_unit` 'pound' | 'ounce' | 'gram' | 'kilogram', required — The possible weight unit values
      - `value` number, double, nullable — Accepted but ignored. This field is not sent to the carrier and is not stored. To declare a value for cargo insurance, use `insurance.insured_value` on the quote request instead.
      - `packaging_type` 'bag' | 'bale' | 'box' | 'bundle' | 'carton' | 'case' | 'crate' | 'cylinder' | 'drum' | 'pail' | 'pallet' | 'pieces' | 'reel' | 'roll' | 'skid' | 'tank' | 'tote' | 'trailer' | 'tube' | 'null', nullable — How this commodity is packaged inside the handling unit. Unrecognized values are ignored rather than rejected.
      - `freight_class` '50' | '55' | '60' | '65' | '70' | '77.5' | '85' | '92.5' | '100' | '110' | '125' | '150' | '175' | '200' | '250' | '300' | '400' | '500', required — The National Motor Freight Traffic Association (NMFTA) [freight class](https://nmfta.org/nmfc/) of the goods. Freight class is derived from density, stowability, handling, and liability, and is one of the largest factors in the price of an LTL shipment.
      - `nmfc_code` string, nullable — The NMFC item and sub number for the goods.
      - `hazardous_materials` FreightHazardousMaterials — Hazardous materials (hazmat) details for a commodity. Providing this object flags the commodity as hazmat, which the carrier prints on the Bill of Lading. All fields other than `subsidiary_hazard_classes`, `emergency_response_reference`, `flashpoint_temperature`, and `additional_details` are required.
        - `identification_number_type` 'un' | 'na', required — The authority that issued the identification number: `un` for a United Nations number or `na` for a North America number.
        - `identification_number` string, required — The UN or NA number identifying the hazardous material.
        - `proper_shipping_name` string, required — The proper shipping name of the hazardous material, as published in the hazardous materials table.
        - `hazard_class` '1.1A' | '1.1B' | '1.1C' | '1.1D' | '1.1E' | '1.1F' | '1.1G' | '1.1J' | '1.1L' | '1.2B' | '1.2C' | '1.2D' | '1.2E' | '1.2F' | '1.2G' | '1.2H' | '1.2J' | '1.2K' | '1.2L' | '1.3C' | '1.3G' | '1.3H' | '1.3J' | '1.3K' | '1.3L' | '1.4B' | '1.4C' | '1.4D' | '1.4E' | '1.4F' | '1.4G' | '1.4S' | '1.5D' | '1.6N' | '2.1' | '2.2' | '2.3' | '3' | '4.1' | '4.2' | '4.3' | '5.1' | '5.2' | '6.1' | '6.2' | '7' | '8' | '9', required — The primary hazard class or division of the material.
        - `subsidiary_hazard_classes` string[] — Any subsidiary hazard classes, using the same values as `hazard_class`. Values must be unique and must not repeat the primary `hazard_class`.
        - `packing_group` 'i' | 'ii' | 'iii' | 'none', required — The packing group assigned to the material, or `none` when the material has no packing group.
        - `emergency_contact_name` string, required — The name of the 24-hour emergency response contact.
        - `emergency_contact_phone` string, required — The phone number of the 24-hour emergency response contact.
        - `emergency_response_reference` string, nullable — The emergency response registration or contract number, such as a CHEMTREC contract number.
        - `flashpoint_temperature` number, double, nullable — The flashpoint of the material in degrees Fahrenheit, when it has one.
        - `additional_details` string, nullable — Any additional hazmat information the carrier should print on the Bill of Lading.
  - `accessorials` FreightAccessorials — Additional services requested from the carrier. Accessorials affect the price of every quote, so request them when you quote — there is no `accessorials` field on the booking request. The offer you book already carries the accessorials it was priced with, so adding one afterwards requires requesting fresh quotes.
    - `liftgate_pickup` boolean — The origin has no loading dock and the driver needs a liftgate to load the freight.
    - `inside_pickup` boolean — The driver needs to collect the freight from inside the building rather than at the dock or curb.
    - `carrier_terminal_pickup` boolean — The freight is dropped off at the carrier's terminal instead of being collected.
    - `grocery_consolidation_pickup` boolean — The origin is a grocery consolidation facility.
    - `liftgate_delivery` boolean — The destination has no loading dock and the driver needs a liftgate to unload the freight.
    - `inside_delivery` boolean — The driver needs to bring the freight inside the building rather than leave it at the dock or curb.
    - `appointment_delivery` boolean — The carrier must schedule a delivery appointment with the consignee.
    - `notify_before_delivery` boolean — The carrier must call the consignee before delivering.
    - `hold_at_terminal` boolean — The carrier holds the freight at the destination terminal for the consignee to collect.
    - `grocery_consolidation_delivery` boolean — The destination is a grocery consolidation facility.
    - `sort_and_segregate` boolean — The carrier sorts or segregates the freight on delivery.
    - `protection_from_cold` boolean — The freight must be protected from freezing.
    - `protection_from_heat` boolean — The freight must be protected from heat.
    - `tradeshow_pickup` FreightTradeshow — Identifies a tradeshow when picking up from or delivering to one.
      - `name` string — The name of the tradeshow.
      - `booth_number` string — The booth number at the tradeshow.
    - `tradeshow_delivery` FreightTradeshow — Identifies a tradeshow when picking up from or delivering to one.
      - `name` string — The name of the tradeshow.
      - `booth_number` string — The booth number at the tradeshow.
  - `insurance` FreightInsurance — Requests cargo insurance for the shipment. When present, quotes include the insurance premium and, once bound, a certificate number. Insured values are always in USD.
    - `insured_value` number, double, required — The declared value of the freight to insure, in USD. Always send this: it is not currently validated, so omitting it requests insurance with a declared value of `0` rather than returning an error.
    - `item_condition` 'new' | 'used' | 'null', nullable — The condition of the insured goods. Maximum liability differs between new and used freight. Unrecognized values are ignored rather than rejected.
    - `commodity_category` 'general_merchandise' | 'equipment' | 'food_and_beverages' | 'chemicals' | 'electronics' | 'construction_materials' | 'furniture' | 'stonework' | 'fragile' | 'perishables' | 'jewelry' | 'motorized_transportation' | 'art_and_antiques' | 'explosives' | 'life_forms' | 'controlled_items' | 'pharmaceuticals_non_refrigerated' | 'pharmaceuticals_refrigerated' | 'null', nullable — The category of the insured goods. Some categories are excluded or restricted by the insurer. Unrecognized values fall back to `general_merchandise` rather than returning an error.
    - `marks_numbers` string, nullable — The marks and numbers identifying the insured freight on the shipping documents.

## Response `200`

The request was a success.

- FreightQuotesResponseBody — The freight offers returned for a quote request.
  - `quotes` FreightQuote[], nullable — The offers returned by the provider, one per carrier and service combination. When no carrier can serve the lane as described, this is an empty array or `null`.
    - `freight_provider_account_id` string — A string that uniquely identifies a ShipEngine resource, such as a carrier, label, shipment, etc.
    - `freight_provider_name` string — The code of the freight provider that returned the offer.
    - `quote_request_id` string, nullable — The identifier of the quote request that produced this offer. Pass it as `quote_request_id` when booking.
    - `offer_id` string, nullable — The identifier of this offer. Pass it as `offer_id` when booking.
    - `carrier_name` string, nullable — The name of the LTL carrier that would move the freight.
    - `carrier_scac` string, nullable — The Standard Carrier Alpha Code (SCAC) of the LTL carrier. Pass it as `carrier_scac` when booking.
    - `service_name` string, nullable — The name of the service level the carrier is offering.
    - `service_type` string, nullable — Whether the origin terminal serves the lane directly (`Direct`) or hands the freight to another carrier (`Interline`).
    - `total_charges` number, double — The total price of the offer in USD, including any accessorials and insurance premium.
    - `transit_days` integer — The carrier's estimated number of transit days.
    - `estimated_delivery_date` string, date-time, nullable — The carrier's estimated delivery date, when provided.
    - `is_guaranteed` boolean — Whether the carrier guarantees the transit time for this offer.
    - `origin_terminal_code` string, nullable — The code of the carrier terminal serving the origin.
    - `destination_terminal_code` string, nullable — The code of the carrier terminal serving the destination.
    - `insured_amount` number, double, nullable — The insured value in USD, when insurance was requested.
    - `insurance_premium` number, double, nullable — The insurance premium in USD included in `total_charges`, when insurance was requested.
    - `insurance_certificate_number` string, nullable — The insurance certificate number, when the insurer issued one for the offer. `null` when no insurance was requested.
    - `quote_expiration_date` string, date-time, nullable — When the offer expires. Pass it as `quote_expiration_date` when booking; booking an expired offer is rejected.
    - `max_liability_new` number, double, nullable — The carrier's maximum liability per pound for new goods, in USD. Carrier liability is far below the value of most freight, which is why cargo insurance is usually worth quoting.
    - `max_liability_used` number, double, nullable — The carrier's maximum liability per pound for used goods, in USD.

## Other responses

- `400` — The request contained errors, the freight provider connection is not active for the account, or the provider could not return quotes.
- `404` — The `shipment_id` does not identify a shipment on this account.
- `500` — An error occurred on ShipEngine's side. > This error will automatically be reported to our engineers.

---

[API](https://skmtc.net/shipstation/apis/shipengine-api.md) · [All operations](https://skmtc.net/shipstation/apis/shipengine-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/shipstation/shipengine-api/revisions/8d8a7cf79204/schema)
