Download OpenAPI specification:Download
The following documentation describes the current Shippit API (version 3).
To make requests to the API, an authentication token is required. This should be passed in the header containing Authorization: Bearer xxxx
, subsituting the authentication token in the place of xxxx
.
To view your authentication token, login to your Shippit account, then visit Settings
-> Integrations
. You should see the token labelled as API Key
.
All our APIs are rate limited to 60 requests per rolling 60 seconds per merchant (based on your API Key
). If you exceed this rate you'll receive a 429
HTTP error
Should you need a higher rate, please contact our support.
To assist Shippit’s support of our custom built API consumers we ask that requests to our HTTP APIs supply additional information in the request headers. The headers are as follows:
Request Header | Purpose/Usage | Example | Type/Limits | Mandatory |
---|---|---|---|---|
user-agent | A string to help identify technical information about the integration. Useful information includes software library names, release versions/dates. | Shippit_Shipping for Magento2 v1.5.3 | 200 chars | Optional, but strongly encouraged |
x-shippit-partner | A string to identify the entity developing and maintaining the integration. This could be a business name for self-maintained integrations, or the name of a technical partner maintaining the integration. | Shopify, Wallymart | 200 chars | optional |
x-shippit-platform | A string identifying the platform/software making the calls. This will help us to identify when all integrations on the same platform require action, or who to contact about known issues with a platform type. | Magento v2, CustomShop2000 | 200 chars | Optional, but strongly encouraged |
Whilst this information in the request headers is currently optional, it is highly encouraged as it will allow Shippit to better support your integration by helping us to more easily identify which systems are making which API requests, and who to contact with pertinent information about specific integrations and/or platforms.
Security Scheme Type | API Key |
---|---|
Header parameter name: | Authorization |
Both Shippit Staging and Production environment are protected by a HTTPS layer. This will ensure the data is in the encrypted connection.
The SSL certificates are issued by Amazon which is a trusted CA(Certificate authority), and will be auto renewed every 60 days before the expiry date. Note that due to this renewal mechanism, certificate pinning is not recommended.
Security Scheme Type | HTTP |
---|---|
HTTP Authorization Scheme | digest |
Submits a request for Quotes from different couriers on Shippit.
At minimum, a Quote requires a delivery location and information on the parcels being delivered. However, different couriers and delivery methods can require additional fields to satisfy their requirements. There is a maximum of 1000 parcels per quote request.
By default, Shippit will return a quote from the fastest / cheapest courier. However, for the purposes of showing different options, such as in a courier selection page, you may want to have Shippit display all quotes. To do this, pass the return_all_quotes
field as true.
Note that the quotes returned are filtered based on the requirements given by different couriers. Depending on the info submitted in the order and the carrier settings in the Shippit admin page, you may not see quotes from all configured carriers.
required | object (Root Type for quote) A specification of the queries to include in the quote. |
{- "quote": {
- "dropoff_postcode": "2000",
- "dropoff_state": "NSW",
- "dropoff_suburb": "Sydney",
- "parcel_attributes": [
- {
- "qty": 1,
- "weight": 1
}
]
}
}
{- "response": [
- {
- "courier_type": "CouriersPlease",
- "quotes": [
- {
- "price": 20.4,
- "estimated_transit_time": "3 business days"
}
], - "service_level": "standard",
- "success": true
}, - {
- "courier_type": "eParcelExpress",
- "quotes": [
- {
- "price": 30.4,
- "estimated_transit_time": "1 business day"
}
], - "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
}
], - "count": 3
}
Submits an Order to be created on Shippit.
At minimum, an Order requires a delivery location, user details, and parcel details. Shippit will then generate the order, allocate the courier, and fill in the origin location based on the provided info and merchant configuration on Shippit.
Note that the required fields for an Order can vary depending on the type of order, the requested courier, whether it is local or international, etcetera.
There is a maximum of 1000 parcels per quote request.
Web UI action | API call | State on completion | Where seen in UI |
---|---|---|---|
Add order | POST order | New Order | New Orders page |
Confirm order | GET label | Ready to Ship | Ready to Ship page |
Cancel order | DELETE order | Cancelled | not visible |
Book order | POST book | Booked | Track page |
Web UI action | API call | State on completion | Where seen in UI |
---|---|---|---|
N/A | POST order | Packing order | New Orders page |
Label | GET label | Packing order | New Orders page |
Cancel order | DELETE order | Cancelled | not visible |
Book order | POST book | Booked | Track page |
Unlike standard / express orders, click and collect orders do not proceed to the Ready to Ship page. They remain in the New Orders page until you call either the Book API or click the Label button.
Web UI action | API call | State on completion | Where seen in UI |
---|---|---|---|
N/A | POST order | Packing order | New Orders page |
Label | GET label | Booked | Track page |
Cancel order | DELETE order | Cancelled | not visible |
Unlike standard / express orders, priority and ondemand orders do not need the book call. They are automatically booked by Shippit on the delivery date.
Ondemand orders are automatically booked by Shippit for an ASAP pickup, respecting store pick-and-pack time. Priority and Ondemand orders will remain on the New Orders page until dismissed by clicking the Label button or the GET label API call is made.
If the validate
field is passed and set to true
, then the order is not saved unless Shippit can validate the destination suburb and postcode to be a valid combination. If a valid combination is not found, Shippit will return a suggested address.
You can allocate a courier to an order in one of two ways: you can manually specify the courier as part of the order, or you can allow Shippit to automatically allocate a courier for you.
To manually specify a courier, pass the courier_allocation
field with the identifier of the courier (see below).
To have Shippit allocate the courier for you, pass the courier_type
field to specify the type of couriers that Shippit can choose from to allocate for you. This is used to stand for a service level such as standard
, express
, priority
, click_and_collect
.
Shippit needs to know the specifications of the products you want shipped and what parcels to use in shipping them. There is a maximum of 1000 parcels per quote request.
In the simplest case, this can be specified by a parcel_attributes
field, which contains a list of Parcel specifications. Each item specifies the number, dimensions, and other information about the products being shipped, and the associated parcel. In this case, each parcel contains one type of product.
For more complex shipping arrangements, you can additionally specify a product_attributes
field, which contains a list of Product specifications. In this case, the parcel_attributes
will no longer contain product information such as qty
. Each item under product_attributes
would specify the number, dimensions, and other information about the products; while each item under parcel_attributes
would separately specify the dimensions of the parcels. By mixing parcel and product specifications, you can define arbitrary groupings of products into parcels.
The number of parcels is further determined by the Allocate each item in an order to a separate carton
setting in the Shippit administration page. If this is enabled, then each item will be assigned a separate parcel according to its dimensions. If this is disabled, then Shippit may combine multiple product or parcel specifications into one.
In a standard order, Shippit will book the courier given the provided information and provide tracking information and notifications for the merchant and recipient on the status of the order.
If you've already booked and allocated a courier to your consignment outside of Shippit, however, you can still use Shippit to provide tracking and notifications for the order. This is called a tracking order. In this case, you're only using Shippit for the tracking and notifications, and not for carrier booking.
Creating a tracking order is the same as creating a standard order, only that you have to provide additional attributes so that Shippit can match the the courier's internal info to shippit. Note the following attributes:
tracking_only
required -- true - this makes this order a tracking order.courier_allocation
required -- the name of the courier in charge of the item.courier_job_id
-- the ID assigned by some carriers to the shipment / consignment.parcel_attributes
-> label_number
required -- the label assigned by the carrier system to a parcel, used by Shippit to match the parcel number against the carrier's parcel numbertracking_histories
-- one or two optional status events that will be added to the tracking page for the benefit of the recipient.In a tracking order, you can choose to pass tracking histories for the benefit of the recipient. These are shown to the recipient in the tracking page to inform them of the status of when the order has been processed.
These items have just two fields, a status
field and a timestamp
in UTC format, to indicate to the recipient events such as order_placement
and ready_for_pickup
. The status
informs the user of the Order's state at that point in time and can be either order_placed
or ready_for_pickup
. The timestamp
indicates when that change happened. The following tracking history entries are recommended to be placed:
order_placed
- set to the time when you received the order on your system.ready_for_pickup
- set to the time when you book the order on Shippit.If no tracking_histories
entries are passed, Shippit will generate an initial tracking history for the order, set to ready_for_pickup
at the point when Shippit received the API request.
When using 500g satchels,
No
, you must have Satchel 500g (A5)
enabled in your settings (Settings > Pick & Pack > Automatic Package Sorting > Carrier Default Presets). Yes
, you must have Satchel 500g ATL (A5)
enabled in your settings (Settings > Pick & Pack > Automatic Package Sorting > Carrier Default Presets).No
Note that the final ATL value also depends on how couriers are allocated and if users manually override the ATL option in the UI. It is important when confirming quotes that the ATL is set as desired.
Standard | Express | Priority | Ondemand |
---|---|---|---|
AlliedExpressOvernight | CapitalTransport | AlliedExpressSameday | DoorDashOndemand |
AramexAuNz | CouriersPleaseExpress | Bonds | UberOndemand |
AramexExpress | DirectCouriers | DoorDash | |
AramexInternational | EparcelExpress | EparcelOndemand | |
CouriersPlease | EparcelInternationalExpress | QxpressSameday | |
DhlEcommerce | FedExInternationalPriority | YelloOndemand | |
DhlExpress | KerryExpress | ||
DhlExpressInternational | NewZealandPostExpress | ||
DirectFreightExpress | NinjaVanExpress | ||
Eparcel | PbtCourierExpress | ||
EparcelInternational | SekoExpress | ||
Fastway | SingPostExpress | ||
FedExInternationalEconomy | StarTrackPremium | ||
FourPXStandard | TntOvernightExpress | ||
HunterExpress | TollPriority | ||
Janio | |||
JanioInternational | |||
KerryStandard | |||
LyneConnect | |||
LynePlus | |||
Neway | |||
NewZealandCouriers | |||
NewZealandPost | |||
NinjaVanStandard | |||
PbtCourier | |||
Qxpress | |||
SekoStandard | |||
SingPost | |||
Skybox | |||
StarTrack | |||
Tnt | |||
Toll |
Passes an Order object under the order
field.
required | object (OrderRequestOrder) Represents parameters that can be used to create an order in Shippit |
{- "order": {
- "courier_type": "standard",
- "delivery_address": "1 Union Street",
- "delivery_postcode": "2009",
- "delivery_state": "NSW",
- "delivery_suburb": "Pyrmont",
- "authority_to_leave": "Yes",
- "parcel_attributes": [
- {
- "qty": 1,
- "weight": 2.1
}
], - "user_attributes": {
- "email": "test@shippit.com",
- "first_name": "John",
- "last_name": "Smith"
}
}
}
{- "response": {
- "courier_delivery_instructions": "special instructions",
- "courier_job_id": "30734876324",
- "courier_name": "eParcel",
- "delivery_address": "1 Union Street",
- "delivery_instructions": "test special instructions",
- "delivery_postcode": "2009",
- "delivery_state": "NSW",
- "delivery_suburb": "Pyrmont",
- "id": 26599,
- "parcel_attributes": [
- {
- "depth": 0.13,
- "length": 0.1,
- "qty": 1,
- "weight": 16.8,
- "width": 0.11
}
], - "products": [
- {
- "title": "Industrial Paint Stripper",
- "price": 29.13,
- "sku": 0.1,
- "tariff_code": "000999",
- "dangerous_goods_code": "ID8000",
- "dangerous_goods_text": "ID8000 Consumer commodities - Dangerous Goods as per attached DGD",
- "origin_country_code": "TH",
- "quantity": 1
}
], - "price": "0.0",
- "processing_state": "created",
- "receiver_contact_number": "0400000000",
- "receiver_name": "Josh",
- "retailer_invoice": "#23201005",
- "slug": "ppu38wz2tdonj",
- "state": "processing",
- "tracking_number": "PPu38Wz2TdoNj",
- "user_attributes": {
- "email": "test@shippit.com",
- "first_name": "jon",
- "last_name": "smith",
- "mobile": "0413084048"
}
}
}
Cancels an Order in Shippit using the tracking number.
The API first checks if the Order can be cancelled, ie., if its current state allows it, then returns an immediate response. If the Order is successfully cancelled, the API will answer with the Order with its state updated as cancelled
. If it cannot be cancelled, it will throw a 422
error.
tracking_number required | string The tracking number of the Order. |
{- "response": {
- "id": 33,
- "tracking_number": "PPuqD0J0uLslM",
- "state": "cancelled",
- "processing_state": " processing_cancelled",
- "delivery_address": "1 Union Street",
- "delivery_suburb": "Pyrmont",
- "delivery_postcode": "2009",
- "receiver_name": "Francois",
- "receiver_contact_number": "0404342342",
- "courier_name": "eParcel International",
- "slug": "ppuqd0j0ulslm",
- "price": "0.0",
- "retailer_invoice": "SO42637",
- "courier_job_id": "ABC0100023",
- "user_attributes": {
- "email": "test@shippit.com",
- "first_name": "John",
- "last_name": "Smith"
}, - "parcel_attributes": [
- {
- "qty": 1,
- "length": 0.325,
- "width": 0.205,
- "depth": 0.03,
- "weight": 0.5
}
]
}
}
Retrieves labelling information for an Order using the tracking number.
The labelling information for an Order can only be retrieved once the Order has been processed and allocated a courier, which may take some time after the Order has been placed. If the Order is yet to be processed, you will get a 422
Unprocessable response.
tracking_number required | string The tracking number of the Order. |
{- "response": {
- "id": 5044,
- "order": {
- "courier_delivery_instructions": "Authority to Leave. ",
- "courier_job_id": "SHP0100002",
- "delivery_address": "37 Manorvale Pde",
- "delivery_instructions": "",
- "delivery_postcode": "3030",
- "delivery_state": "VIC",
- "delivery_suburb": "Werribee",
- "id": 9972,
- "invoice_number": "INV-1384",
- "parcels": [
- {
- "depth": 0.19,
- "length": 0.38,
- "name": "",
- "weight": 1,
- "width": 0.29,
- "label_number": "SHP010000201000930803",
- "courier_data": {
- "product_code": "X123",
- "pickup_zone": "SYD",
- "dropoff_zone": "MEL"
}
}
], - "products": [
- {
- "title": "Industrial Paint Stripper",
- "price": 29.13,
- "sku": 0.1,
- "quantity": 1,
- "tariff_code": "000999",
- "dangerous_goods_code": "ID8000",
- "dangerous_goods_text": "ID8000 Consumer commodities - Dangerous Goods as per attached DGD",
- "origin_country_code": "TH"
}
], - "price": "15.95",
- "receiver_contact_number": "",
- "receiver_language_code": "EN",
- "receiver_name": "Jane Doe",
- "retailer_invoice": "",
- "slug": "ppkfqy44u8nff",
- "state": "completed",
- "tracking_number": "PPKFqy44U8Nff",
- "user": {
- "email": "jane.doe@shippit.com",
- "first_name": "Jane",
- "last_name": "Doe ",
- "mobile": ""
}, - "customs_documents_require_printing": false,
- "documents": {
- "archive_awb": {
- "page_size": "a6",
- "file_type": "pdf"
}, - "customs_invoice": {
- "page_size": "a3",
- "file_type": "pdf"
}, - "dangerous_goods_declaration": {
- "page_size": "a3",
- "file_type": "pdf"
}, - "shipping_label": {
- "page_size": "a6",
- "file_type": "pdf"
}
}
},
}
}
This sends a tracking request to the API to retrieve the status of an Order.
This uses a pull-based model of Order tracking, which sends tracking info on each request. If you would like to use a push-based model where you automatically receive messages on Order status changes, you can subscribe to the Tracking Webhook
instead.
tracking_number required | string The tracking number of the Order |
{- "response": {
- "tracking_number": "PP39TBECV7QSSPK",
- "success": true,
- "track": [
- {
- "status": "Completed",
- "date": "2015-04-03T00:00:00.000Z",
- "timestamp": 58985,
- "status_owner": "Bonds Couriers"
}, - {
- "status": "With Driver",
- "date": "2015-04-03T00:00:00.000Z",
- "timestamp": 55385,
- "status_owner": "Bonds Couriers"
}, - {
- "status": "In Transit",
- "date": "2015-04-03T00:00:00.000Z",
- "timestamp": 55325,
- "status_owner": "Bonds Couriers"
}, - {
- "status": "Ready For Pick Up",
- "date": "2015-04-03T00:00:00.000Z",
- "timestamp": 49400,
- "status_owner": "Harold's Harpoons"
}, - {
- "status": "Despatch In Progress",
- "date": "2015-04-03T00:00:00.000Z",
- "timestamp": 36603,
- "status_owner": "Harold's Harpoons"
}, - {
- "status": "Order Placed",
- "date": "2015-04-03T00:00:00.000Z",
- "timestamp": "07:23:32",
- "status_owner": "Harold's Harpoons"
}
]
}
}
The merchant settings API will allow you to query the current settings for your merchant account and to make updates to this via API.
{- "response": {
- "store_name": "New Store Name",
- "company_name": "Harold Pty Ltd",
- "contact_name": "Robert",
- "contact_phone": "0400000000",
- "shipping_cart_method_name": "",
- "preparation_time": 60,
- "website_url": "www.haroldsharpoons.com.au",
- "address_1": "110 Rex Road",
- "suburb": "Sydney",
- "state": "NSW",
- "postcode": "2000",
- "country_code": "AU"
}
}
Given an object with the desired settings to update, will update the Merchant settings on Shippit
required | object (Root Type for Merchant) Represents a merchant account |
{- "merchant": {
- "store_name": "New Store Name"
}
}
{- "response": {
- "store_name": "Harolds Harpoons",
- "company_name": "Harold Pty Ltd",
- "contact_name": "Robert",
- "contact_phone": "0400000000",
- "shipping_cart_method_name": "",
- "preparation_time": 60,
- "website_url": "www.haroldsharpoons.com.au",