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
| Name | Type | Required/Optional | Description |
|---|---|---|---|
| pickupDate | String | Required | The earliest date when a carrier can pickup the shipment, in YYYY-MM-DD format. Date is in the timezone of the pickup stop. |
| pickupInfo | Object | Required | The details of the pick up stop. |
| pickupInfo.zipcode | String | Required | The postal code of the pick up stop. The pick up stop is where the shipment will be picked up. |
| pickupInfo.country | String | Optional | The country code (ISO 3166-1 alpha-2) of the pick up stop. Supported: "US", "CA". Defaults to "US" if not provided. |
| deliveryInfo | Object | Required | The details of the delivery stop. |
| deliveryInfo.zipcode | String | Required | The postal code of the delivery stop. The delivery stop is where the shipment will be delivered. |
| deliveryInfo.country | String | Optional | The country code (ISO 3166-1 alpha-2) of the delivery stop. Supported: "US", "CA". Defaults to "US" if not provided. |
| pickupServices | Array<PickupService> | Optional | Any pickup services required to service the shipment in the pickup location. |
| deliveryServices | Array<DeliveryService> | Optional | Any delivery services required to service the shipment in the delivery location. |
| additionalServices | Array<AdditionalService> | Optional | Any additional services required to service the shipment. |
| listItems | Array<Item> | Required | The list of commodities being shipped. |
| shipmentType | String ("LTL", "FTL" or "PARCEL") | Optional | The 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). |
| vehicleType | VehicleType | Optional | The vehicle. If not provided, the system will automatically select the best vehicle based on the items. Ignored for PARCEL. |
| insuranceInfo | Object | Optional | Provide 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.commodity | String | Required when insuranceInfo is provided | A description of the commodity being shipped. |
| insuranceInfo.insuredValue | Number | Required when insuranceInfo is provided | The declared value of the goods to be insured (in USD). |
| Name | Type | Required/Optional | Description |
|---|---|---|---|
| name | String | Optional | The name of the shipment item. |
| height | Number | Required | The height of the shipment item. |
| length | Number | Required | The length of the shipment item. |
| width | Number | Required | The width of the shipment item. |
| sizeUnit | String | Required | The unit for the length, height, width. One of "IN" (inches) or "FT" (feets). |
| quantity | Number | Required | The quantity of this particular shipment item. |
| totalWeight | Number | Required | Total weight of all packages composing this line item |
| weightUnit | String | Required | The unit for the weight. One of "lbs" (pounds) or "kgs" (kilograms). |
| packaging | String | Optional | Packaging unit of the line item (e.g. "Pallet"). Defaults to "Pallet". |
| temperature_limit | Object | Optional | Do 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.min | Number | Optional | The minimum temperature, if applicable (see above). |
| temperature_limit.max | Number | Optional | The maximum temperature, if applicable (see above). |
| stackable | Boolean | Optional | stackable = True if the shipment item can be stacked on the trailer, False otherwise. |
| notes | String | Optional | any notes. |
| freightClass | String | Optional | NMFC freight class of the line item (e.g. "70"). |
| barcodes | Array<String> | Optional | The barcodes of the shipment items. |
- 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
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
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.