Freight

Get quote for your shipment

Returns the single cheapest rate for the shipment. To compare every available option (carriers, service levels, parcel services) use POST /freights/freight-quote instead.

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 and the Retry-After header tells how many seconds remain until the window resets.

Request parameters

NameTypeRequired/OptionalDescription
pickupDateStringRequiredThe earliest date when a carrier can pickup the shipment, in YYYY-MM-DD format. Date is in the timezone of the pickup stop.
pickupInfoObjectRequiredThe details of the pick up stop.
pickupInfo.zipcodeStringRequiredThe postal code of the pick up stop. The pick up stop is where the shipment will be picked up.
pickupInfo.countryStringOptionalThe country code (ISO 3166-1 alpha-2) of the pick up stop. Supported: "US", "CA". Defaults to "US" if not provided.
deliveryInfoObjectRequiredThe details of the delivery stop.
deliveryInfo.zipcodeStringRequiredThe postal code of the delivery stop. The delivery stop is where the shipment will be delivered.
deliveryInfo.countryStringOptionalThe country code (ISO 3166-1 alpha-2) of the delivery stop. Supported: "US", "CA". Defaults to "US" if not provided.
pickupServicesArray<PickupService>OptionalAny pickup services required to service the shipment in the pickup location.
deliveryServicesArray<DeliveryService>OptionalAny delivery services required to service the shipment in the delivery location.
additionalServicesArray<AdditionalService>OptionalAny additional services required to service the shipment.
listItemsArray<Item>RequiredThe list of commodities being shipped.
shipmentTypeString ("LTL", "FTL" or "PARCEL")OptionalThe type of shipment. Defaults to "LTL" when not provided. PARCEL returns a single FedEx rate (use POST /freights/freight-quote to compare every parcel service level); for PARCEL the items may be sent as listItems[] (or items[]) and each package must respect the FedEx limits (see PARCEL limits below).
vehicleTypeVehicleTypeOptionalThe vehicle. If not provided, the system will automatically select the best vehicle based on the items. Ignored for PARCEL.
insuranceInfoObjectOptionalProvide to receive an insurance quote alongside the freight quote. If either field below is missing or invalid, the insurance block is silently skipped and the freight quote is still returned.
insuranceInfo.commodityStringRequired when insuranceInfo is providedA description of the commodity being shipped.
insuranceInfo.insuredValueNumberRequired when insuranceInfo is providedThe declared value of the goods to be insured (in USD).
<br /> **Item** schema:
NameTypeRequired/OptionalDescription
nameStringOptionalThe name of the shipment item.
heightNumberRequiredThe height of the shipment item.
lengthNumberRequiredThe length of the shipment item.
widthNumberRequiredThe width of the shipment item.
sizeUnitStringRequiredThe unit for the length, height, width. One of "IN" (inches) or "FT" (feets).
quantityNumberRequiredThe quantity of this particular shipment item.
totalWeightNumberRequiredTotal weight of all packages composing this line item
weightUnitStringRequiredThe unit for the weight. One of "lbs" (pounds) or "kgs" (kilograms).
packagingStringOptionalPackaging unit of the line item (e.g. "Pallet"). Defaults to "Pallet".
temperature_limitObjectOptionalDo not send. Temperature-controlled (reefer) freight is not supported yet: any non-zero min/max is rejected with 400 Reefer Shipment is not supported yet!.
temperature_limit.minNumberOptionalThe minimum temperature, if applicable (see above).
temperature_limit.maxNumberOptionalThe maximum temperature, if applicable (see above).
stackableBooleanOptionalstackable = True if the shipment item can be stacked on the trailer, False otherwise.
notesStringOptionalany notes.
freightClassStringOptionalNMFC freight class of the line item (e.g. "70").
barcodesArray<String>OptionalThe barcodes of the shipment items.
<br /> **PARCEL limits** (checked per package, after converting to inches and pounds): weight per package (`totalWeight` / `quantity`) <= 150 lbs, longest side <= 108 in, length + girth (longest side + 2 x (the other two sides)) <= 165 in. Length, width, height, weight and quantity must all be greater than 0, otherwise the request is rejected with 400 `invalid_field_data`. <br /> **Response notes**
  • quote_id is the value to pass as quoteId to POST /freights/booking, before expiration_time_utc (epoch seconds). The booking payload must match this request exactly (zipcodes, every item's dimensions/weight/quantity, and the service lists), otherwise the booking is rejected. For PARCEL quotes send the items in IN and lbs on both the quote and the booking: the quote stores parcel items converted to inches/pounds and the booking compares the raw values.
  • transit_time is in days. transit_time_without_team (days, nullable) is the transit time when the load is driven by a single driver instead of a team.
  • shipmentType echoes the type that was priced: LTL, FTL or PARCEL.
  • charges: the TOTAL row equals price.amount; each SERVICE_OPTION row (the code may also be the carrier-specific accessorial code) is an accessorial and the TRANSIT row is the base freight, so the non-TOTAL rows sum to the TOTAL row.
  • insurance is only present when insuranceInfo was sent. When the insurance quote fails the block is { "insuranceQuoteId": null, "errorMessage": "..." } and the freight quote is still returned.
post/freights/quote

Request

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

Request body

pickupDatestring date required

The earliest pickup date in YYYY-MM-DD format, in the timezone of the pickup stop.

shipmentType'LTL' | 'FTL' | 'PARCEL'

The type of shipment (optional, defaults to LTL when omitted). PARCEL returns a single FedEx rate; use /freights/freight-quote to compare every parcel service level. PARCEL items are checked against the FedEx limits per package: weight per package (totalWeight / quantity) <= 150 lbs, longest side <= 108 in, length + girth (longest side + 2 x (the other two sides)) <= 165 in; dimensions, weight and quantity must all be > 0. PARCEL accepts listItems[] (or items[]).

Example request

{
  "pickupDate": "2026-09-20",
  "pickupInfo": {
    "zipcode": "90058",
    "country": "US"
  },
  "deliveryInfo": {
    "zipcode": "90028",
    "country": "US"
  },
  "pickupServices": [
    {
      "quantity": 1,
      "service": "photo-required-pickup"
    }
  ],
  "deliveryServices": [
    {
      "quantity": 1,
      "service": "photo-required-delivery"
    }
  ],
  "additionalServices": [
    {
      "quantity": 1,
      "service": "photo-required"
    }
  ],
  "listItems": [
    {
      "name": "Item Name",
      "height": 48,
      "length": 48,
      "width": 40,
      "sizeUnit": "IN",
      "totalWeight": 500,
      "weightUnit": "lbs",
      "quantity": 1,
      "packaging": "Pallet",
      "stackable": false,
      "notes": "Notes here"
    }
  ],
  "shipmentType": "LTL",
  "vehicleType": {
    "code": "CARGO_VAN"
  },
  "insuranceInfo": {
    "commodity": "Electronics",
    "insuredValue": 20000
  }
}

Response

successful creation

quote_idstring

Unique quote ID (prefixed with W, 27 characters). Use this ID when booking.

transit_timenumber nullable

Predicted transit time in DAYS. 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 estimated_delivery_date.

transit_time_without_teamnumber nullable

Transit time in DAYS when the load is driven by a single driver instead of a team. null when not applicable.

estimated_delivery_datestring date nullable

Carrier-committed delivery date (YYYY-MM-DD). null when the carrier does not commit to a date. For FedEx Express services this is the only delivery estimate available, since transit_time is not published for them.

expiration_time_utcnumber
statusstring
notesstring
shipmentType'LTL' | 'FTL' | 'PARCEL'

The shipment type that was priced.

Example response

{
  "quote_id": "W01KH5PB2V9QJ6Z8M4T3R7X1C0D",
  "price": {
    "amount": 1000,
    "currency_code": "USD"
  },
  "charges": [
    {
      "code": "TOTAL",
      "description": "Total rate",
      "amount": 1000
    },
    {
      "code": "SERVICE_OPTION",
      "description": "liftgate-delivery",
      "amount": 100
    },
    {
      "code": "TRANSIT",
      "description": "Transit Cost",
      "amount": 900
    }
  ],
  "transit_time": 2,
  "transit_time_without_team": 3,
  "estimated_delivery_date": "2026-09-03",
  "expiration_time_utc": 1529107809,
  "status": "ACCEPT",
  "notes": "Expiration time: Jan 1 2019",
  "shipmentType": "LTL",
  "insurance": {
    "insuranceQuoteId": "01J8ZQ7X8N2R6V5F3C4B9D0E1F",
    "premium": 60,
    "processingFee": 6,
    "total": 66,
    "currency_code": "USD",
    "errorMessage": "Cannot quote insurance at this time."
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.