ShippitDeveloper Centre

Quote API

The Quote API returns a quote when given a destination location and parcel attributes.

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_typestringOptional
optional If 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 included in the price if the carrier is configured to return a DDP quote.
import_taxnumberOptional
Import tax component for international orders, if applicable. This amount is included in the price if the carrier is configured to return a DDP quote.
import_feenumberOptional
Import fees component for international orders, if applicable. This amount is included in the price if 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. null when confidence is none.
lateststring (ISO 8601 date)Optional
The latest estimated delivery date. null when confidence is none.
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 a key (lower-camelCase identifier), type (courierCost, surcharge, fee, or tax), and amount. Omitted when cost breakdown data is unavailable, the quoted price is zero, or the carrier base cost is zero. Not returned for on_demand or priority (timeslot) quotes.

Top-level fields customs_duty, import_tax, and import_fee are still returned when applicable. They may also appear in price_breakdown under customsDuty, importTax, and importFee.

Successful standard, express, and click-and-collect quotes may include a price_breakdown array that decomposes the quoted price into carrier cost, surcharges, fees, and taxes.

Show child attributesHide child attributes
keystringRequired
Identifier for the charge (for example, courierCost, fuelSurcharge, customsDuty, gst). Line-item key values 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 all amount values equals price when price_breakdown is 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.

ValueMeaningExample display
highearliest and latest are the same date. High-accuracy estimate."Arrives Tue, Apr 20"
mediumearliest and latest differ by a moderate spread."Arrives Tue, Apr 20 - Wed, Apr 21"
lowWide spread between earliest and latest."Arrives by Mon, Apr 27"
noneNo 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.

Sample responseJSON
{
  "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_postcode is unassigned or set to AU
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 the qty and weight fields are required. There is a maximum of 1000 parcels per quote request.

For information about using parcel_attributes in conjunction with product_attributes, see the create an order section of the Developer Guide.

Show child attributesHide child attributes
package_typestringOptional
Set to pallet if 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.
qtynumberOptional
conditional -- The number of products specified by the entry.

There is a maximum of 1000 parcels per quote request.

Should not be present if a product_attributes key is present in the request.

If Allocate each item in an order to a separate carton is 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 priority orders
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_amountnumberOptional
conditional Declared 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-2 format. 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 OnDemand orders.
authority_to_leavestringOptional
whether or not the parcel can be left unattended at the delivery address, options are Yes or No
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, or identity_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 for OnDemand orders in the format YYYY-MM-DDTHH:mm:ss+HH:mm
pickup_deadline_atstringOptional
The end of the pickup window for OnDemand orders in the format YYYY-MM-DDTHH:mm:ss+HH:mm
dropoff_atstringOptional
The start of the dropoff window for OnDemand orders in the format YYYY-MM-DDTHH:mm:ss+HH:mm
dropoff_deadline_atstringOptional
The end of the dropoff window for OnDemand orders in the format YYYY-MM-DDTHH:mm:ss+HH:mm

Response codes

StatusMeaningDescription
200OKSuccessful quote response
400Bad RequestReturned when a quote request cannot be generated at all. If returned as text or HTML, the response is blank.
403ForbiddenReturned when the API key doesn't match a valid merchant account, or the API secret is missing the permission this endpoint requires.
422Unprocessable EntityReturned when a parcel exceeds the size or weight limits Shippit can quote for.
500Internal Server ErrorReturned 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 2025After August 2025
Calculated a $0 quote. Suburb/state/postcode mismatchUnable to calculate quote. Please check if suburb, state, and postcode match correctly.
Calculated a $0 quote. no valid rates returnedUnable to calculate quote. No valid shipping rates matched the request. Please check the service, product, or delivery.
Product Code Not FoundUnable to calculate quote. One or more product codes are missing or invalid. Please check your product mappings.
Contract for charge account expired or not validUnable to calculate quote. The contract linked to charge account 0007290406 is either expired or not yet active.
no valid rates matchedUnable to calculate quote. No matching rates found for the selected details.
Suburb is missing 1 mandatory English characterUnable to calculate quote. Suburb name must include at least one English character. Please update and try again.
Missing or incorrect mandatory attributeUnable to calculate quote. The request is missing one or more required fields. Please review the input and try again.
Packaging type is invalidUnable 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 charactersUnable to calculate quote. State value must be a 3-letter abbreviation (e.g. NSW, VIC). Please correct and try again.
TNT: brisbane - 4000Unable to calculate quote. Destination zone not found for the selected service. Please check the destination or carrier.
Connection timed outUnable to calculate quote. The request timed out — please try again.
Product not available on your contractUnable 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,NSWUnable 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 3122Unable 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
  • price is zero
  • the computed carrier base cost is zero, even if surcharges or taxes exist
  • the service level is on_demand or priority (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.

RequestJSON
{
  "quote": {
    "dropoff_postcode": "2000",
    "dropoff_state": "NSW",
    "dropoff_suburb": "Sydney",
    "parcel_attributes": [
      {
        "qty": 1,
        "weight": 1
      }
    ]
  }
}
JSON
{
  "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
}