Shipment Tracking API
The WooCommerce REST API enables external apps to use a set of API endpoints to read and write various parts of WooCommerce data. AST PRO extends the WooCommerce Rest API and adds a set of Shipment Tracking endpoints to create, view, retrieve and delete individual shipment tracking information from orders.
To use the Shipment Tracking endpoint, you’ll need to generate a Rest API Key in your WooCommerce store. These API keys are the permission for external systems to connect with your store’s API.
How To Get WooCommerce API Keys
To generate API keys for your WooCommerce store, navigate to WooCommerce > Settings > Advanced > Rest API and Select Add Key. You are taken to the Key Details screen:

- Add a Description.
- Select the User you would like to generate a key for in the dropdown (admin user)
- Select a level of access for this API key – Read/Write access.
- Select Generate API Key, and WooCommerce will create API keys for that user.
Shipment Tracking API Endpoint
The Shipment Tracking endpoint supports the following methods:
- Add tracking information and fulfill orders
- Add tracking information per item and fulfill orders
- Retrieve tracking information from orders
- Delete tracking information from orders
- Get shipping providers list
Endpoint URL:
https://yourdomaon.com/wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings
Shipment Tracking API Properties
These are the available meta field that can be used when updating the Shipment Tracking API:
ATTRIBUTE | TYPE | DESCRIPTION | PERMISSIONS |
---|---|---|---|
order_id | String | Unique identifier for order | read-only |
tracking_number | String | Tracking number | Required |
tracking_provider | String | Tracking provider name | Required |
date_shipped | Date | Date when the package was shipped – default to the date/time that the tracking was added via the API | Optional |
replace_tracking | Boolean | 0 – add the tracking info in addition to tracking info that was already added to the order. 1 – replace the current tracking numbers for the orders (Defaults to 0) | Optional |
status_shipped | Integer | 0 – do not change the order status, 1 – change order status to “Shipped” (completed), 2 – change the order status to custom status “Partially Shipped” (Defaults to 0). | Optional |
sku | String | Line item SKU – Add tracking per item | Optional |
qty | Integer | Line item quantity – Add tracking per item | Optional |
Add Shipment tracking
This endpoint allows to add new tracking info to orders:
POST /wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings/
curl -X POST https://your-domain.com/wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-tracking
-u consumer_key:consumer_secret
-H "Content-Type: application/json"
-d '{
"tracking_provider": "Fedex",
"tracking_number": "12345678",
"date_shipped": "2019-03-08",
"status_shipped": 1,
"replace_tracking": 1
}'
//response example:
"Tracking ID: fb7170d97d0e628bc3b565999d07c6a9"
Add Shipment Tracking Per Item
Tracking per item with the API
If you use the Tracking Per Item Add-on, you can add tracking to the API endpoint to specific line items (products) using the product SKU and the quantity shipped properties.
For example, if you received an order of 5 items and want to send them in s packages with different tracking numbers:
Package 1 – tracking number – 123456
Products:
- t-shirt x 1
- blue-jeans x 1
Package 2 – tracking number – 456789
- t-shirt x 1
- blue-jeans x 2
Add tracking for Package One:
POST /wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings/
curl -X POST https://your-domain.com/wp-json/wc-ast-pro/v3/orders/<order_id>/shipment-trackings
-u consumer_key:consumer_secret
-H "Content-Type: application/json"
-d '{
"tracking_provider": "USPS",
"tracking_number": "123456",
"date_shipped": "2020-01-24",
"status_shipped": 1,
"sku": t-shirt,blue-jeans,
"qty": 1,1
}'
Add tracking for Package Two:
curl -X POST https://your-domain.com/wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings
-u consumer_key:consumer_secret
-H "Content-Type: application/json"
-d '{
"tracking_provider": "USPS",
"tracking_number": "456879",
"date_shipped": "2020-01-24",
"status_shipped": 1,
"sku": t-shirt,blue-jeans,
"qty": 1,2
}'
Get shipment tracking
With this endpoint, you can list all tracking info added to an order. You will need to pass the order id and you’ll get response with array of tracking numbers added to that order,
GET /wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings/
curl -X GET https://your-domain.com/wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings
-u consumer_key:consumer_secret
//JSON response:
{
"tracking_id": "feb9bde4475fda92cc9408607b7ecb66",
"tracking_provider": "Fedex",
"tracking_link": "http://www.fedex.com/Tracking?action=track&tracknumbers=12345678",
"tracking_number": "12345678",
"date_shipped": "2019-03-08",
"_links": {
"self": [
{
"href": "https://your-domain.com/wp-json/wc/v1/orders/340/shipment-trackings"
}
],
"collection": [
{
"href": "https://your-domain.com/wp-json/wc/v1/orders/340/shipment-trackings"
}
],
"up": [
{
"href": "https://your-domain.com/wp-json/wc/v1/orders/340"
}
]
}
}
Delete Shipment Tracking
You can delete tracking numbers from orders, you will need to pass the order id and the tracking_id for this tracking number:
DELETE /wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings/
curl -X DELETE https://your-domain.com/wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings/fa61d174a05d2f34323b51d92823947d
-u consumer_key:consumer_secret
//response example:
"Tracking ID: fa61d174a05d2f34323b51d92823947d"
Get Shipping Providers
You can get all the active shipping providers for the order
GET /wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings/providers
curl -X GET https://your-domain.com/wp-json/wc-shipment-tracking/v3/orders/<order_id>/shipment-trackings/providers
-u consumer_key:consumer_secret
JSON response example:
{
"Austria": {
"DPD Austria": "https://tracking.dpd.de/parcelstatus?locale=de_AT&query=%number%",
"post.at": "http://www.post.at/sendungsverfolgung.php?pnum1=%number%"
},
"Australia": {
"Australia Post": "http://auspost.com.au/track/track.html?id=%number%",
"CouriersPlease": "https://www.couriersplease.com.au/tools-track/no/%number%"
},
"Canada": {
"Canada Post": "https://www.canadapost.ca/track-reperage/en#/search?searchFor=%number%",
"Canpar": "https://www.canpar.ca/en/track/tracking.jsp"
},
"Chile": {
"Correos Chile": "https://www.correos.cl/web/guest/seguimiento-en-linea?codigos=%number%"
},
"China": {
"China Post": "http://english.chinapost.com.cn/html1/folder/1408/3929-1.htm?content=%number%",
"EMS": "https://www.ems.post/en/global-network/tracking"
},
"France": {
"Chronopost": "https://www.chronopost.fr/fr/chrono_suivi_search?listeNumerosLT=%number%",
"Colis Privé": "https://www.colisprive.com/moncolis/pages/detailColis.aspx?numColis=%number%"
},
"India": {
"Delhivery": "https://www.delhivery.com/track/package/%number%"
},
"United States (US)": {
"DHL US": "https://www.logistics.dhl/us-en/home/tracking/tracking-ecommerce.html?tracking-id=%number%",
"Associated Global Systems": "https://tracking.agsystems.com/",
"DHL Parcel": "https://www.logistics.dhl/us-en/home/tracking/tracking-ecommerce.html?tracking-id=%number%",
"TNT": "https://www.tnt.com/express/en_us/site/tracking.html?searchType=con&cons=%number%",
"Speedex Courier": "http://www.speedexcourier.com/",
"UPS": "http://wwwapps.ups.com/WebTracking/track?track=yes&trackNums=%number%",
"USPS": "https://tools.usps.com/go/TrackConfirmAction_input?qtc_tLabels1=%number%"
}
}
API Request Errors
In the events of API request errors, AST uses conventional HTTP response codes in the 4XX and 5XX range to indicate the reason behind the error.
Error Code | Error type | Sample Error Message |
---|---|---|
400 | BadRequest | Missing parameter(s): tracking_number |
400 | BadRequest | Missing parameter(s): tracking_provider |
404 | Not Found | Invalid order ID |
404 | Not Found | Requests to resources that don’t exist or are missing |
401 | Unauthorized | Authentication or permission error, e.g. incorrect API keys |
500 | Internal Server Error | Server error |
Postman example
Please check screenshot for setup in postman.
Create new request and set method Post. Insert URL and in the Body section insert all the tracking information.

Than go to the Authorization section and select Type Basic Auth. Use REST API Consumer key and consumer secret in the username and password field and click on Send.
