Endpoints
- POST/quotesRequest quotes from the carriers that can service a delivery
The quote object
A quote response holds one object per service level or carrier that answered. Each object carries its own success flag, so a partial answer—three carriers quoted, one refused—still returns a 200.
courier_typestringOptional- The name of the courier or service level giving the quote.
errorstringOptional- Error response, if any, received from the carrier(s) during quoting.
quotesarray of objectsOptional- List of quotes returned for the service level or carrier.
Show child attributesHide child attributes
delivery_datestring(date)Optional- Estimated date of delivery for the order
delivery_windowstringOptional- For priority orders, machine-readable estimated range of times when the delivery could take place.
delivery_window_descstringOptional- For priority orders, human-readable estimated range of times when the delivery could take place.
pricenumberOptional- Amount quoted by the carrier.
courier_typestringOptionaloptionalIf returned inside a quote response for a service level (e.g.standard), the carrier returning the quote. May be omitted if a specific carrier was requested.customs_dutynumberOptional- Customs duty component for international orders, if applicable. This amount is
includedin thepriceif the carrier is configured to return a DDP quote. import_taxnumberOptional- Import tax component for international orders, if applicable. This amount is
includedin thepriceif the carrier is configured to return a DDP quote. import_feenumberOptional- Import fees component for international orders, if applicable. This amount is
includedin thepriceif the carrier is configured to return a DDP quote. incotermanyOptional- A universal term of trade that defines the responsibility and obligations with the transport of goods. Most commonly used to indicate the responsible party for payment of duties and taxes.
estimated_transit_timestringOptional- Estimated amount of time for the quote to arrive.
estimated_deliveryobjectOptional- Estimated delivery window for this quote. Present only when EDD data is available for the route and courier; absent otherwise. Clients must handle both cases.
Show child attributesHide child attributes
earlieststring (ISO 8601 date)Optional- The earliest estimated delivery date.
nullwhen confidence isnone. lateststring (ISO 8601 date)Optional- The latest estimated delivery date.
nullwhen confidence isnone. confidenceenumRequired- Confidence level for the estimate. See the confidence values table.
displaystringRequired- Pre-formatted delivery message ready to show customers. Render this directly — no client-side date logic required.
price_breakdownarray of objectsOptional- Optional array of line items that decompose the quoted
price. Each item has akey(lower-camelCase identifier),type(courierCost,surcharge,fee, ortax), andamount. Omitted when cost breakdown data is unavailable, the quoted price is zero, or the carrier base cost is zero. Not returned foron_demandorpriority(timeslot) quotes.
Top-level fieldscustoms_duty,import_tax, andimport_feeare still returned when applicable. They may also appear inprice_breakdownundercustomsDuty,importTax, andimportFee.Successful standard, express, and click-and-collect quotes may include a
price_breakdownarray that decomposes the quotedpriceinto carrier cost, surcharges, fees, and taxes.Show child attributesHide child attributes
keystringRequired- Identifier for the charge (for example,
courierCost,fuelSurcharge,customsDuty,gst). Line-itemkeyvalues use lowerCamelCase even though other v3 response fields use snake_case. typestringRequired- Charge category. One of:
-courierCost— base carrier rate, resell margin, and delivery support fee combined into one line
-surcharge— carrier or operational surcharges (for example,fuelSurcharge,lengthSurcharge,remoteAreaSurcharge)
-fee— product or landed-cost fees (for example,customsDuty,importFee)
-tax— tax components (for example,gst,importTax) amountnumberRequired- Dollar amount for this line item, rounded to two decimal places. Included in
price. The sum of allamountvalues equalspricewhenprice_breakdownis present.
service_levelstringOptional- The service level associated with this quote or group of quotes.
successbooleanOptional- Whether or not this service level was able to obtain a valid quote from the carrier(s).
Confidence values
The confidence field indicates the reliability of the delivery window and controls how display reads.
| Value | Meaning | Example display |
|---|---|---|
high | earliest and latest are the same date. High-accuracy estimate. | "Arrives Tue, Apr 20" |
medium | earliest and latest differ by a moderate spread. | "Arrives Tue, Apr 20 - Wed, Apr 21" |
low | Wide spread between earliest and latest. | "Arrives by Mon, Apr 27" |
none | No data available for this route or service level. earliest and latest are null. | "3 to 5 business days" |
Use the display string as-is for all confidence levels. It's pre-formatted server-side and requires no additional date logic. If you need a custom format, use confidence to determine the appropriate rendering — for example, show a single date for high, a range for medium, an "arrives by" message for low, or a fallback string for none.
{
"response": [
{
"courier_type": "CouriersPlease",
"quotes": [
{
"price": 27.0,
"estimated_transit_time": "3 business days",
"price_breakdown": [
{ "key": "courierCost", "type": "courierCost", "amount": 16.5 },
{ "key": "fuelSurcharge", "type": "surcharge", "amount": 2.1 },
{ "key": "lengthSurcharge", "type": "surcharge", "amount": 10.0 }
],
"estimated_delivery": {
"earliest": "2026-05-25",
"latest": "2026-05-29",
"confidence": "medium",
"display": "Arrives Mon, May 25 - Thu, May 29"
}
}
],
"service_level": "standard",
"success": true
},
{
"courier_type": "eParcelExpress",
"quotes": [
{
"price": 30.4,
"estimated_transit_time": "1 business day",
"estimated_delivery": {
"earliest": "2026-05-23",
"latest": "2026-05-23",
"confidence": "high",
"display": "Arrives Sat, May 23"
}
}
],
"service_level": "express",
"success": true
},
{
"courier_type": "Priority",
"quotes": [
{
"delivery_date": "2014-09-18T00:00:00.000Z",
"delivery_window": "07:00-10:00",
"delivery_window_desc": "7AM-10AM",
"price": 24.24,
"courier_type": "Bonds"
},
{
"delivery_date": "2014-09-18T00:00:00.000Z",
"delivery_window": "10:00-13:00",
"delivery_window_desc": "10AM-1PM",
"price": 24.24,
"courier_type": "AlliedExpressP2P"
}
],
"service_level": "priority",
"success": true
},
{
"courier_type": "DoorDashOndemand",
"quotes": [
{
"price": 10.99,
"estimated_delivery_time": "2023-10-03T16:21:57.000+11:00"
}
],
"service_level": "on_demand",
"success": true
}
],
"count": 4
}Retrieve a quote
POST/quotes
Submits a request for quotes from different carriers.
At minimum, a quote requires a delivery location, and dimensions of the parcels being delivered. However, different carriers and delivery methods can require additional fields to satisfy their requirements. There is a maximum of 1000 parcels per quote request.
By default, Shippit returns a quote from the fastest or cheapest carrier. However, for the purposes of showing different options, such as in a carrier selection page, you can choose to have Shippit display all quotes. To do this, pass the return_all_quotes field as true.
The quotes returned are filtered based on the requirements given by different carriers. Depending on the information submitted in the order, and the carrier settings in the Shippit admin page, you might not see quotes from all configured carriers.
To perform this operation, you must be authenticated with an authentication token.
Parameters
dropoff_postcodestringRequired- destination postcode for the quote
dropoff_statestringOptional- destination state for the quote. Required when
dropoff_postcodeis unassigned or set toAU dropoff_suburbstringRequired- The dropoff suburb
parcel_attributesarray of objectsRequired- An array of parcel specifications to be included in the quote.
Each item can be used to specify the qty, dimensions, and other information about the products to be shipped, and the parcel used to ship it.
At minimum, only theqtyandweightfields are required. There is a maximum of 1000 parcels per quote request.For information about using
parcel_attributesin conjunction withproduct_attributes, see the create an order section of the Developer Guide.Show child attributesHide child attributes
package_typestringOptional- Set to
palletif the package is a pallet, otherwise leave this field out. You can't mix pallets with other types of parcels within an order. weightnumberOptional- Weight of the parcel in kilos.
depthnumberOptional- Depth of the parcel in metres
lengthnumberOptional- Length of the parcel in metres
widthnumberOptional- Width of the parcel in metres.
label_numberstringOptional- Parcel number in the carrier system.
This is used when the order is a track-only order, to match the parcel number in a carrier against the parcel recorded in shippit. qtynumberOptionalconditional-- The number of products specified by the entry.
There is a maximum of 1000 parcels per quote request.
Should not be present if aproduct_attributeskey is present in the request.
IfAllocate each item in an order to a separate cartonis enabled in Shippit, a separate parcel is generated for each product listed.
product_attributesarray of objectsOptional- An array of product details to be included in the quote
Show child attributesHide child attributes
titlestringOptional- Title or description of the product
tariff_codestringOptional- Tariff or HS code for international orders declarations
quantityintegerOptional- The number of products
pricenumberOptional- Unit price of each product line item. Used to calculate duties and taxes
order_datestring(date)Optional- delivery date for the order, required for
priorityorders return_all_quotesbooleanOptional- If set to
true, the system returns all quotes instead of cheapest/fastest quote. Defaults to false.
Note: If a rules engine configuration is active and triggered for the shipment, the rules engine takes precedence and may restrict which quotes are returned — regardless of this setting. dutiable_amountnumberOptionalconditionalDeclared value for customs when shipping international.
Mandatory for International orders.product_currencystringOptional- Three letter ISO 4217 currency code that applies to the products which is used for customs.
dropoff_country_codestringOptional- The destination country code for the quote in
ISO 3166 Alpha-2format. If unassigned, defaults to the country code of the merchant's primary location, or otherwise 'AU' dropoff_addressstringOptional- The dropoff address for the quote. Mandatory for
OnDemandorders. authority_to_leavestringOptional- whether or not the parcel can be left unattended at the delivery address, options are
YesorNo service_levels[string]Optional- An array of service leves to return quotes for. Valid values include:
-standard
-express
-priorty
-on_demand features[string]Optional- Some carriers provide add-on services or features that you can indicate in the order. These services are identified by a unique string, and are dependent on the carrier. To request these services, add the appropriate string in this field. For example,
white_glove, oridentity_on_delivery. pickup_atstringOptional- In order to fulfill the delivery commitment made to the customer, the carrier needs to know the pickup and delivery times for the parcel(s). Below, you can find all the fields that the carrier may require. The specific fields that are mandatory depends on the carrier and the requested service.
The start of the pickup window forOnDemandorders in the formatYYYY-MM-DDTHH:mm:ss+HH:mm pickup_deadline_atstringOptional- The end of the pickup window for
OnDemandorders in the formatYYYY-MM-DDTHH:mm:ss+HH:mm dropoff_atstringOptional- The start of the dropoff window for
OnDemandorders in the formatYYYY-MM-DDTHH:mm:ss+HH:mm dropoff_deadline_atstringOptional- The end of the dropoff window for
OnDemandorders in the formatYYYY-MM-DDTHH:mm:ss+HH:mm
Response codes
| Status | Meaning | Description |
|---|---|---|
| 200 | OK | Successful quote response |
| 400 | Bad Request | Returned when a quote request cannot be generated at all. If returned as text or HTML, the response is blank. |
| 403 | Forbidden | Returned when the API key doesn't match a valid merchant account, or the API secret is missing the permission this endpoint requires. |
| 422 | Unprocessable Entity | Returned when a parcel exceeds the size or weight limits Shippit can quote for. |
| 500 | Internal Server Error | Returned when an unknown error occurs, or if there is a problem with the combination of the input or merchant account configuration. |
Note that if a quote request to a carrier can be generated, but one or more carriers can't respond to the quote, then the quote request succeeds and a 400 Bad Request response is not given. The status of each individual quote is then determined from the response body. The 400 Bad Request response is only returned if the quote request can't be processed.
Zero dollar quotes
In some cases, you can receive a 200 OK response, with a list of carriers. However, sometimes the carriers in the list might have returned a quote price of $0, meaning that they're unable to accept the booking.
When this happens, the quote endpoint returns an error similar to $0 quote or quote not available. Shippit made changes to these error messages in August 2025 to make them more understandable.
This table shows the different error messages before and after August 2025:
| Before August 2025 | After August 2025 |
|---|---|
| Calculated a $0 quote. Suburb/state/postcode mismatch | Unable to calculate quote. Please check if suburb, state, and postcode match correctly. |
| Calculated a $0 quote. no valid rates returned | Unable to calculate quote. No valid shipping rates matched the request. Please check the service, product, or delivery. |
| Product Code Not Found | Unable to calculate quote. One or more product codes are missing or invalid. Please check your product mappings. |
| Contract for charge account expired or not valid | Unable to calculate quote. The contract linked to charge account 0007290406 is either expired or not yet active. |
| no valid rates matched | Unable to calculate quote. No matching rates found for the selected details. |
| Suburb is missing 1 mandatory English character | Unable to calculate quote. Suburb name must include at least one English character. Please update and try again. |
| Missing or incorrect mandatory attribute | Unable to calculate quote. The request is missing one or more required fields. Please review the input and try again. |
| Packaging type is invalid | Unable to calculate quote. The specified packaging type is invalid. Please check the packaging value and try again. |
| InternalQuote::Rate::ToZoneNotFound or internal_quote “[To] courier, state - postcode, country” | Unable to calculate quote. Destination zone not found for the selected service. Please check the destination or carrier. |
| State must not be longer than 3 characters | Unable to calculate quote. State value must be a 3-letter abbreviation (e.g. NSW, VIC). Please correct and try again. |
| TNT: brisbane - 4000 | Unable to calculate quote. Destination zone not found for the selected service. Please check the destination or carrier. |
| Connection timed out | Unable to calculate quote. The request timed out — please try again. |
| Product not available on your contract | Unable to calculate quote. The product you’ve selected isn’t available under your contract. Please contact your carrier. |
| State must be one of the following VIC,NT,WA,ACT,QLD,TAS,SA,NSW | Unable to calculate quote. The state must be one of: VIC, NT, WA, ACT, QLD, TAS, SA, or NSW. |
| The product 3W05 you have entered is not available on your contract 0000500929 from lodgement 3108 to the destination 3122 | Unable to calculate quote. Product 3W05 is not available under contract 0000500929 for deliveries from 3108 to 3122. |
Price breakdown
When Shippit has detailed cost component data for a quote, successful standard, express, and click_and_collect quote objects may include a price_breakdown array. This breaks down the total price into carrier cost, surcharges, fees, and taxes. The field is additive and backward compatible — clients that do not need a breakdown can continue to use price alone.
price_breakdown is omitted (not returned as an empty array) when:
- the quote has no cost data to derive a breakdown
priceis zero- the computed carrier base cost is zero, even if surcharges or taxes exist
- the service level is
on_demandorpriority(timeslot quotes)
The sum of all line item amount values equals price when the breakdown is present. The courierCost line includes resell margin and delivery support fees internally — these are not separate line items. Top-level fields customs_duty, import_tax, and import_fee are still returned for international quotes when applicable, and may also appear in price_breakdown under customsDuty, importTax, and importFee.
Line-item key values use lowerCamelCase (for example, courierCost, fuelSurcharge) even though the surrounding v3 response uses snake_case field names.
International quote responses
International quotes can carry duties and taxes, and a carrier that cannot reach the destination returns an error inside an otherwise successful response.
{
"quote": {
"dropoff_postcode": "2000",
"dropoff_state": "NSW",
"dropoff_suburb": "Sydney",
"parcel_attributes": [
{
"qty": 1,
"weight": 1
}
]
}
}{
"response": [
{
"courier_type": "CouriersPlease",
"quotes": [
{
"price": 27.0,
"estimated_transit_time": "3 business days",
"price_breakdown": [
{ "key": "courierCost", "type": "courierCost", "amount": 16.5 },
{ "key": "fuelSurcharge", "type": "surcharge", "amount": 2.1 },
{ "key": "lengthSurcharge", "type": "surcharge", "amount": 10.0 }
],
"estimated_delivery": {
"earliest": "2026-05-25",
"latest": "2026-05-29",
"confidence": "medium",
"display": "Arrives Mon, May 25 - Thu, May 29"
}
}
],
"service_level": "standard",
"success": true
},
{
"courier_type": "eParcelExpress",
"quotes": [
{
"price": 30.4,
"estimated_transit_time": "1 business day",
"estimated_delivery": {
"earliest": "2026-05-23",
"latest": "2026-05-23",
"confidence": "high",
"display": "Arrives Sat, May 23"
}
}
],
"service_level": "express",
"success": true
},
{
"courier_type": "Priority",
"quotes": [
{
"delivery_date": "2014-09-18T00:00:00.000Z",
"delivery_window": "07:00-10:00",
"delivery_window_desc": "7AM-10AM",
"price": 24.24,
"courier_type": "Bonds"
},
{
"delivery_date": "2014-09-18T00:00:00.000Z",
"delivery_window": "10:00-13:00",
"delivery_window_desc": "10AM-1PM",
"price": 24.24,
"courier_type": "AlliedExpressP2P"
}
],
"service_level": "priority",
"success": true
},
{
"courier_type": "DoorDashOndemand",
"quotes": [
{
"price": 10.99,
"estimated_delivery_time": "2023-10-03T16:21:57.000+11:00"
}
],
"service_level": "on_demand",
"success": true
}
],
"count": 4
}{
"response": [
{
"courier_type": "SmartRoutingInternational",
"quotes": [
{
"price": 22.75,
"estimated_transit_time": "3 business days",
"customs_duty": 2.33,
"import_tax": 3.44,
"import_fee": 0.99,
"incoterm": "DDP",
"price_breakdown": [
{ "key": "courierCost", "type": "courierCost", "amount": 10.0 },
{ "key": "customsDuty", "type": "fee", "amount": 1.99 },
{ "key": "importFee", "type": "fee", "amount": 0.99 },
{ "key": "gst", "type": "tax", "amount": 2.27 },
{ "key": "importTax", "type": "tax", "amount": 2.99 }
]
}
],
"service_level": "standard",
"success": true
},
{
"courier_type": "JanioInternational",
"quotes": [
{
"price": 18.3,
"estimated_transit_time": "5 business days",
"incoterm": "DDU"
}
],
"service_level": "standard",
"success": true
},
{
"courier_type": "AramexInternational",
"quotes": [
{
"price": 30.4,
"estimated_transit_time": "4 business day"
}
],
"service_level": "express",
"success": true
},
{
"courier_type": "CouriersPlease",
"error": "cannot transport to country ID.",
"success": false
}
],
"count": 4
}{
"error": "bad_request",
"error_description": "Dutiable amount must be greater than 0 for international orders",
"success": false
}{
"error": "invalid_merchant_account",
"error_description": "An unknown error has occurred."
}{
"error": "system",
"error_description": "An unknown error has occurred."
}