# Get 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 offer_id to Book a freight shipment.

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

Endpoint: POST /v1/freight/quotes
Version: 1.1.202604070904
Security: api_key

## Request fields (application/json):

  - `freight_provider_account_id` (string, required)
    The freight provider account to quote against. It must be an active connection on your account — retrieve it with [List freight provider accounts](#operation/list_freight_provider_accounts).
    Example: "se-28529731"

  - `shipment_id` (string)
    An existing shipment to quote for. When provided, the origin is taken from the shipment's ship-from warehouse and the destination from the order's ship-to address, and ship_from and ship_to must be omitted. The handling_units, accessorials, and insurance you send are saved as the shipment's freight configuration; omit them to reuse the configuration already saved.
    Example: "se-28529731"

  - `ship_from` (object)
    The origin address. Required when shipment_id is omitted, and must not be provided when shipment_id is present.

  - `ship_from.name` (string)
    The name of the contact person at this location.
    Example: "Marcus Bell"

  - `ship_from.company_name` (string)
    The name of the business at this location.
    Example: "Northgate Distribution"

  - `ship_from.address_line1` (string)
    The first line of the street address.
    Example: "4200 Industrial Pkwy"

  - `ship_from.address_line2` (string,null)
    The second line of the street address, such as a dock or suite number.
    Example: "Dock 12"

  - `ship_from.city_locality` (string, required)
    The city or locality.
    Example: "Grand Rapids"

  - `ship_from.state_province` (string, required)
    The state or province.
    Example: "MI"

  - `ship_from.postal_code` (string, required)
    The postal code.
    Example: "49512"

  - `ship_from.country_code` (string, required)
    The two-letter ISO 3166-1 alpha-2 country code.
    Example: "US"

  - `ship_from.phone` (string)
    The phone number of the contact person. Carriers call this number to arrange pickup or delivery.
    Example: "+1 616 555 0142"

  - `ship_from.email` (string,null)
    The email address of the contact person.
    Example: "dock@northgate-dist.example"

  - `ship_from.location_type` (string,null)
    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.
    Enum: "airport", "carrier_terminal", "commercial", "construction", "container_freight_station", "distribution_center", "government_facility", "limited_access", "pier_port_wharf", "residential", "secured_access", "trade_show", null

  - `ship_to` (object)
    The destination address. Required when shipment_id is omitted, and must not be provided when shipment_id is present.

  - `ship_to.name` (string)
    The name of the contact person at this location.
    Example: "Marcus Bell"

  - `ship_to.company_name` (string)
    The name of the business at this location.
    Example: "Northgate Distribution"

  - `ship_to.address_line1` (string)
    The first line of the street address.
    Example: "4200 Industrial Pkwy"

  - `ship_to.address_line2` (string,null)
    The second line of the street address, such as a dock or suite number.
    Example: "Dock 12"

  - `ship_to.city_locality` (string, required)
    The city or locality.
    Example: "Grand Rapids"

  - `ship_to.state_province` (string, required)
    The state or province.
    Example: "MI"

  - `ship_to.postal_code` (string, required)
    The postal code.
    Example: "49512"

  - `ship_to.country_code` (string, required)
    The two-letter ISO 3166-1 alpha-2 country code.
    Example: "US"

  - `ship_to.phone` (string)
    The phone number of the contact person. Carriers call this number to arrange pickup or delivery.
    Example: "+1 616 555 0142"

  - `ship_to.email` (string,null)
    The email address of the contact person.
    Example: "dock@northgate-dist.example"

  - `ship_to.location_type` (string,null)
    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.
    Enum: "airport", "carrier_terminal", "commercial", "construction", "container_freight_station", "distribution_center", "government_facility", "limited_access", "pier_port_wharf", "residential", "secured_access", "trade_show", null

  - `shipment_date` (string,null)
    The date the freight is ready to ship. Defaults to the current date when omitted.
    Example: "2026-04-17T00:00:00Z"

  - `handling_units` (array)
    The handling units being shipped. Required when shipment_id is omitted.

  - `handling_units.type` (string,null)
    The kind of handling unit. Defaults to pallet. Unrecognized values are ignored rather than rejected.
    Enum: "bag", "bale", "box", "bundle", "carton", "case", "crate", "cylinder", "drum", "pail", "pallet", "pieces", "reel", "roll", "skid", "tank", "tote", "trailer", "tube", null

  - `handling_units.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.
    Example: 2

  - `handling_units.length` (number, required)
    The length of a single handling unit, in the unit specified by dimension_unit.
    Example: 48

  - `handling_units.width` (number, required)
    The width of a single handling unit, in the unit specified by dimension_unit.
    Example: 40

  - `handling_units.height` (number, required)
    The height of a single handling unit, in the unit specified by dimension_unit.
    Example: 52

  - `handling_units.dimension_unit` (string, required)
    The unit of measure for length, width, and height.
    Enum: "inch", "centimeter"

  - `handling_units.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.

  - `handling_units.commodities` (array, required)
    The goods inside a single handling unit. At least one commodity is required.

  - `handling_units.commodities.description` (string,null)
    A description of the goods. Carriers print this on the Bill of Lading.
    Example: "Assembled oak dining chairs"

  - `handling_units.commodities.quantity` (integer, required)
    The number of pieces of this commodity inside a single handling unit.
    Example: 24

  - `handling_units.commodities.weight` (number, required)
    The total weight of this commodity line inside a single handling unit.
    Example: 310

  - `handling_units.commodities.weight_unit` (string, required)
    The unit of measure for weight.
    Enum: "pound", "ounce", "gram", "kilogram"

  - `handling_units.commodities.packaging_type` (string,null)
    How this commodity is packaged inside the handling unit. Unrecognized values are ignored rather than rejected.
    Enum: "bag", "bale", "box", "bundle", "carton", "case", "crate", "cylinder", "drum", "pail", "pallet", "pieces", "reel", "roll", "skid", "tank", "tote", "trailer", "tube", null

  - `handling_units.commodities.freight_class` (string, 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.
    Enum: "50", "55", "60", "65", "70", "77.5", "85", "92.5", "100", "110", "125", "150", "175", "200", "250", "300", "400", "500"

  - `handling_units.commodities.nmfc_code` (string,null)
    The NMFC item and sub number for the goods.
    Example: "80700-2"

  - `handling_units.commodities.hazardous_materials` (object)
    Hazmat details. Provide this object only for hazardous commodities.

  - `handling_units.commodities.hazardous_materials.identification_number_type` (string, required)
    The authority that issued the identification number: un for a United Nations number or na for a North America number.
    Enum: "un", "na"

  - `handling_units.commodities.hazardous_materials.identification_number` (string, required)
    The UN or NA number identifying the hazardous material.
    Example: "UN1263"

  - `handling_units.commodities.hazardous_materials.proper_shipping_name` (string, required)
    The proper shipping name of the hazardous material, as published in the hazardous materials table.
    Example: "Paint"

  - `handling_units.commodities.hazardous_materials.hazard_class` (string, required)
    The primary hazard class or division of the material.
    Enum: "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"

  - `handling_units.commodities.hazardous_materials.subsidiary_hazard_classes` (array)
    Any subsidiary hazard classes, using the same values as hazard_class. Values must be unique and must not repeat the primary hazard_class.
    Example: ["8"]

  - `handling_units.commodities.hazardous_materials.packing_group` (string, required)
    The packing group assigned to the material, or none when the material has no packing group.
    Enum: "i", "ii", "iii", "none"

  - `handling_units.commodities.hazardous_materials.emergency_contact_name` (string, required)
    The name of the 24-hour emergency response contact.
    Example: "Chemtrec"

  - `handling_units.commodities.hazardous_materials.emergency_contact_phone` (string, required)
    The phone number of the 24-hour emergency response contact.
    Example: "+1 800 424 9300"

  - `handling_units.commodities.hazardous_materials.emergency_response_reference` (string,null)
    The emergency response registration or contract number, such as a CHEMTREC contract number.
    Example: "CCN12345"

  - `handling_units.commodities.hazardous_materials.flashpoint_temperature` (number,null)
    The flashpoint of the material in degrees Fahrenheit, when it has one.
    Example: 73

  - `handling_units.commodities.hazardous_materials.additional_details` (string,null)
    Any additional hazmat information the carrier should print on the Bill of Lading.
    Example: "Keep upright. Do not stack."

  - `accessorials` (object)
    Additional services to include in the quote.

  - `accessorials.liftgate_pickup` (boolean)
    The origin has no loading dock and the driver needs a liftgate to load the freight.
    Example: true

  - `accessorials.inside_pickup` (boolean)
    The driver needs to collect the freight from inside the building rather than at the dock or curb.

  - `accessorials.carrier_terminal_pickup` (boolean)
    The freight is dropped off at the carrier's terminal instead of being collected.

  - `accessorials.grocery_consolidation_pickup` (boolean)
    The origin is a grocery consolidation facility.

  - `accessorials.liftgate_delivery` (boolean)
    The destination has no loading dock and the driver needs a liftgate to unload the freight.
    Example: true

  - `accessorials.inside_delivery` (boolean)
    The driver needs to bring the freight inside the building rather than leave it at the dock or curb.

  - `accessorials.appointment_delivery` (boolean)
    The carrier must schedule a delivery appointment with the consignee.

  - `accessorials.notify_before_delivery` (boolean)
    The carrier must call the consignee before delivering.
    Example: true

  - `accessorials.hold_at_terminal` (boolean)
    The carrier holds the freight at the destination terminal for the consignee to collect.

  - `accessorials.grocery_consolidation_delivery` (boolean)
    The destination is a grocery consolidation facility.

  - `accessorials.sort_and_segregate` (boolean)
    The carrier sorts or segregates the freight on delivery.

  - `accessorials.protection_from_cold` (boolean)
    The freight must be protected from freezing.

  - `accessorials.protection_from_heat` (boolean)
    The freight must be protected from heat.

  - `accessorials.tradeshow_pickup` (object)
    The freight is collected from a tradeshow. Providing this object requests the tradeshow pickup accessorial.

  - `accessorials.tradeshow_pickup.name` (string)
    The name of the tradeshow.
    Example: "Midwest Home & Garden Expo"

  - `accessorials.tradeshow_pickup.booth_number` (string)
    The booth number at the tradeshow.
    Example: "B-1147"

  - `accessorials.tradeshow_delivery` (object)
    The freight is delivered to a tradeshow. Providing this object requests the tradeshow delivery accessorial.

  - `accessorials.tradeshow_delivery.name` (string)
    The name of the tradeshow.
    Example: "Midwest Home & Garden Expo"

  - `accessorials.tradeshow_delivery.booth_number` (string)
    The booth number at the tradeshow.
    Example: "B-1147"

  - `insurance` (object)
    Cargo insurance to quote alongside the freight charges.

  - `insurance.insured_value` (number, required)
    The declared value of the freight to insure, in USD. Must be greater than 0.
    Example: 18500

  - `insurance.item_condition` (string,null)
    The condition of the insured goods. Maximum liability differs between new and used freight. An unrecognized value is rejected with a 400 Bad Request.
    Enum: "new", "used", null

  - `insurance.commodity_category` (string,null)
    The category of the insured goods. Some categories are excluded or restricted by the insurer. An unrecognized value is rejected with a 400 Bad Request.
    Enum: "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

  - `insurance.marks_numbers` (string,null)
    The marks and numbers identifying the insured freight on the shipping documents.
    Example: "NG-2026-0417"

## Response 200 fields (application/json):

  - `quotes` (array,null)
    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.

  - `quotes.freight_provider_account_id` (string)
    The freight provider account that returned the offer.
    Example: "se-28529731"

  - `quotes.freight_provider_code` (string)
    The code of the freight provider that returned the offer.
    Example: "UNISHIPPERS"

  - `quotes.offer_id` (string,null)
    Identifies this offer when booking. Resolves server-side to the provider connection, carrier, and expiration — pass this id alone to [Book a freight shipment](#operation/book_freight_shipment).
    Example: "0f2b41d8-6a17-4c9e-8f52-b71d3e9c4a68"

  - `quotes.carrier_name` (string,null)
    The name of the LTL carrier that would move the freight.
    Example: "FedEx Freight Economy"

  - `quotes.carrier_scac` (string,null)
    The Standard Carrier Alpha Code (SCAC) of the LTL carrier.
    Example: "FXFE"

  - `quotes.service_name` (string,null)
    The name of the service level the carrier is offering.
    Example: "Standard LTL"

  - `quotes.service_type` (string,null)
    Whether the origin terminal serves the lane directly (Direct) or hands the freight to another carrier (Interline).
    Example: "Direct"

  - `quotes.total_charges` (number)
    The total price of the offer in USD, including any accessorials and insurance premium.
    Example: 842.37

  - `quotes.transit_days` (integer)
    The carrier's estimated number of transit days.
    Example: 3

  - `quotes.estimated_delivery_date` (string,null)
    The carrier's estimated delivery date, when provided.
    Example: "2026-04-22T00:00:00Z"

  - `quotes.is_guaranteed` (boolean)
    Whether the carrier guarantees the transit time for this offer.

  - `quotes.origin_terminal_code` (string,null)
    The code of the carrier terminal serving the origin.
    Example: "GRR"

  - `quotes.destination_terminal_code` (string,null)
    The code of the carrier terminal serving the destination.
    Example: "DFW"

  - `quotes.insured_amount` (number,null)
    The insured value in USD, when insurance was requested.
    Example: 18500

  - `quotes.insurance_premium` (number,null)
    The insurance premium in USD included in total_charges, when insurance was requested.
    Example: 46.25

  - `quotes.insurance_certificate_number` (string,null)
    The insurance certificate number, when the insurer issued one for the offer. null when no insurance was requested.
    Example: "CRT-4471902"

  - `quotes.quote_expiration_date` (string,null)
    When the offer expires. Expiry is enforced server-side when booking.
    Example: "2026-04-16T23:59:59Z"

  - `quotes.max_liability_new` (number,null)
    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.
    Example: 25

  - `quotes.max_liability_used` (number,null)
    The carrier's maximum liability per pound for used goods, in USD.
    Example: 10

## Response 400 fields (application/json):

  - `request_id` (string, required)
    A UUID that uniquely identifies the request id.
This can be given to the support team to help debug non-trivial issues that may occur
    Example: "aa3d8e8e-462b-4476-9618-72db7f7b7009"

  - `errors` (array, required)
    The errors associated with the failed API call

  - `errors.error_source` (string, required)
    The source of the error, as indicated by the name this informs us if the API call failed because of the
carrier, the order source, or the ShipEngine API itself.
    Enum: "carrier", "order_source", "shipengine"

  - `errors.error_type` (string, required)
    The type of error
    Enum: "account_status", "business_rules", "validation", "security", "system", "integrations"

  - `errors.error_code` (string, required)
    The error code specified for the failed API Call
    Enum: "auto_fund_not_supported", "batch_cannot_be_modified", "carrier_conflict", "carrier_disconnected", "carrier_not_connected", "carrier_not_supported", "confirmation_not_supported", "default_warehouse_cannot_be_deleted", "field_conflict", "field_value_required", "forbidden", "identifier_conflict", "identifiers_must_match", "insufficient_funds", "invalid_address", "invalid_billing_plan", "invalid_field_value", "invalid_identifier", "invalid_status", "invalid_string_length", "label_images_not_supported", "meter_failure", "order_source_not_active", "rate_limit_exceeded", "refresh_not_supported", "request_body_required", "return_label_not_supported", "settings_not_supported", "subscription_inactive", "terms_not_accepted", "tracking_not_supported", "trial_expired", "unauthorized", "unknown", "unspecified", "verification_failure", "warehouse_conflict", "webhook_event_type_conflict", "customs_items_required", "incompatible_paired_labels", "invalid_charge_event", "invalid_object", "no_rates_returned", "file_not_found", "shipping_rule_not_found", "service_not_determined", "no_rates_returned", "funding_source_registration_in_progress", "insurance_failure", "funding_source_missing_configuration", "funding_source_error", "freight_connection_inactive", "freight_provider_id_required", "freight_provider_already_connected", "freight_shipment_not_found", "freight_tracking_not_available", "freight_tracking_not_found", "freight_shipment_not_batchable"

  - `errors.message` (string, required)
    An error message associated with the failed API call
    Example: "Body of request cannot be null."

  - `errors.carrier_id` (string)
    A string that uniquely identifies the carrier that generated the error.
    Example: "se-28529731"

  - `errors.carrier_code` (string)
    The name of the shipping carrier that generated the error, such as fedex, dhl_express, stamps_com, etc.
    Example: "dhl_express"

  - `errors.field_name` (string)
    The name of the field that caused the error
    Example: "shipment.ship_to.phone_number"


