Get Shipment Status
This REST API is used by Uniware to get the recent shipment status (after dispatch) from the shipping provider/aggregator. The list of AWB (waybill) Nos. whose tracking status needs to be determined is sent in request. The shipping provider in response shares the current status (with date) against each AWB No.
Tip
- It is recommended to check out Notes for the reader. You might find this helpful as it contains Guidelines for using API references and Terminologies used here.
- The shipping provider is required to share details of their supported shipment statuses with Unicommerce. These details shall mention the status definitions and forward/reverse flags.
Flow
Tip
Complete integration flow is available on Basic Overview page.
Basic Information
NAME | DETAILS |
---|---|
Usage: | Mandatory |
Endpoint: | /waybillDetails |
Request Type: | GET |
Scheme: | HTTPS |
Header (Content-Type): | application/json |
Header (Authorization): | token (got from SP Authentication) |
Query Parameters
NOTE:
It is a mandate to send AWB No. inside quotes. Eg.: “3113210963421,5213410156781,…N”.
PARAMETERS | TYPE | DESCRIPTION | MANDATORY | NOTES |
---|---|---|---|---|
waybills | string | List of way bill numbers (inside quotes) | Yes | Max. 50 AWBs per request, Eg.: 3113210963421 |
Response Payload
{
"Status": "SUCCESS",
"waybillDetails": [
{
"waybill": "80224636450",
"currentStatus": "PICKUP_PENDING",
"current_sub_status": "out for pickup",
"current_status_remark": "pickup is yet to be done",
"statusDate": "05-Aug-2023 03:52:09",
"shipping_provider": "LSP Name"
"current_location": "Mumbai_Turbhe_C (Maharashtra)",
"current_pincode": "400703",
"current_city": "Navi Mumbai",
"current_state": "Maharashtra",
"current_country": "India",
"latitude": "",
"longitude": "",
"expected_date_of_delivery": "07-Aug-2023 03:52:09",
"promised_date_of_delivery": "08-Aug-2023 03:52:09",
"payment_type": "COD",
"weight": "500",
"dimensions": {
"l": "100",
"b": "120",
"h": "150"
},
"delivery_agent_name": "",
"delivery_agent_number": "",
"attempt_count": "1",
"ndr_code": "",
"ndr_reason": "REFUSAL CONFIRMATION CODE VERIFIED",
"next_delivery_date": "09-Aug-2023 03:52:09",
"cir_pickup_datetime": "",
"tracking_history": [
{
"date_time": "Mumbai_Turbhe_C (Maharashtra)",
"status": "InfoReceived",
"sub_status": "OutForPickup",
"remark": " shipment has been picked",
"location": "Mumbai_Turbhe_C (Maharashtra)",
"pincode": "400703",
"city": "Navi Mumbai",
"state": "Maharashtra",
"country": "India"
},
{
"date_time": "Mumbai_Turbhe_C (Maharashtra)",
"status": "InfoReceived",
"sub_status": "OutForPickup",
"remark": " shipment has been picked",
"location": "Mumbai_Turbhe_C (Maharashtra)",
"pincode": "400703",
"city": "Navi Mumbai",
"state": "Maharashtra",
"country": "India"
}
],
"parent_awb": "",
"rto_awb": "",
"rto_reason": "",
}
],
"message": "String"
}
Response Payload (Error)
{
"status":"FAILED",
"message":"failure reason",
"waybillDetails":[]
}
Response Payload Details
PARAMETER | TYPE | DESCRIPTION | NOTES | MANDATORY |
---|---|---|---|---|
status | string | Status of the API request | Allowable: SUCCESS, FAILED | Yes |
waybillDetails | string | Details of waybill(AWB) | - | Yes |
waybill | string | Shipment tracking number | Max. 50 AWBs per response, Eg.: “3113210963421” | Yes |
shipping_provider | string | Name of actual courier allocated (LSP Name) | - | Opt. |
statusDate | string | Last status date | Eg: 21-Feb-2023 19:23:00 | Yes |
currentStatus | string | Most recent tracking status | Most recent courier status of AWB, statuscode or status | Yes |
current_sub_status | string | status title or substatus(child) asscociated with parent status | Keep it as blank "" until you have discussed this with the UC team. Else, current integration will be broken. | Opt, If you opt to transmit both the statues current_sub_status and currentStatus to Uniware, it’s essential to update the status mapping. We will concatenate both the values received in these two fields with a hyphen (-). Otherwise, the current tracking mechanism will break down. |
current_status_remark | string | Definition of the current status or Remark or description of the current activity | if data not available keep it as blank "" | Opt. |
current_location | string | Current location of the shipment | if data not available keep it as blank "" | Opt. |
current_pincode | string | Current location | if data not available keep it as blank "" | Opt. |
current_city | string | Current city | if data not available keep it as blank "" | Opt. |
current_state | string | Current state | if data not available keep it as blank "" | Opt. |
current_country | string | Current countyy | if data not available keep it as blank "" | Opt. |
latitude | string | Current latitude | if data not available keep it as blank "" | Opt. |
longitude | string | Current longitude | if data not available keep it as blank "" | Opt. |
expected_date_of_delivery | string | Expected date of shipment delivery | Eg: 21-Feb-2024 19:23:00, if data not available keep it as blank "" | Opt. |
promised_date_of_delivery | string | Promised date of shipment delivery | Eg: 21-Feb-2023 19:23:00, if data not available keep it as blank "" | Opt. |
payment_type | string | Mode of payment | E.g. COD, PREPAID, if data not available keep it as blank "" | Opt. |
weight | string | Shipment weight (in gms) | if data not available keep it as blank "" | Opt. |
dimensions | Object | Shipment dimenison details | - | Opt. |
l | string | Shipment length (in mm) | if data not available keep it as blank "" | Opt. |
b | string | Shipment width (in mm) | if data not available keep it as blank "" | Opt. |
h | string | Shipment hight (in mm) | if data not available keep it as blank "" | Opt. |
delivery_agent_name | string | delivery agent name | if data not available keep it as blank "" | Opt. |
delivery_agent_number | string | delivery agent number | if data not available keep it as blank "" | Opt. |
attempt_count | string | delivery attempt count | if data not available keep it as blank "" | Opt. |
ndr_code | string | NDR reason code | if data not available keep it as blank "" | Opt. |
ndr_reason | string | NDR reason details | if data not available keep it as blank "" | Opt. |
next_delivery_date | string | Next date of delivery | Eg: 21-Feb-2023 19:23:00, if data not available keep it as blank "" | Opt. |
cir_pickup_datetime | string | Return Pickup datetime | Eg: 21-Feb-2023 19:23:00, When the customer initiated return(CIR/RVP) is picked up by the courier | Opt. |
tracking_history | Object | Tracking history of awb | Latest history should be on the top | Opt. |
date_time | string | Tracking date time | Eg: 21-Feb-2023 19:23:00, if data not available keep it as blank "" | Opt. |
status | string | Parent tracking status code | if data not available keep it as blank "" | Opt. |
sub_status | string | Sub-status code in ref to parent status code | if data not available keep it as blank "" | Opt. |
remark | string | Remark or description of the activity | if data not available keep it as blank "" | Opt. |
location | string | Location for ref tracking status | if data not available keep it as blank "" | Opt. |
pincode | string | Pincode for ref tracking status | if data not available keep it as blank "" | Opt. |
city | string | City for ref tracking status | if data not available keep it as blank "" | Opt. |
state | string | State for ref tracking status | if data not available keep it as blank "" | Opt. |
country | string | Country for ref tracking status | if data not available keep it as blank "" | Opt. |
parent_awb | string | It will hold parent awb with which RTO shipment is associated. | In case tracking request is for forward awb then parent_awb will remain blanka but in case tracking request is for RTO awb then parent_awb will hold its associated parent awb , if data not available keep it as blank "" | Opt. |
rto_awb | string | It will hold RTO awb associated with parent (Forward) awb. | In case tracking request is for parent(forward) awb then rto_awb will have new RTO awb, when separate tracking request for RTO shipment need to be sent. In case tracking request is for parent(forward) awb and RTO is NOT created or new RTO awb is NOT assigned then rtoawb will remain blank. In case tracking request is for RTO awb then rto\awb will remain blank, if data not available keep it as blank "" | Opt. |
rto_reason | string | RTO reason for reference shipper | if data not available keep it as blank "" | Opt. |
message | string | error message | Failure reason if Status (Failed) Eg: Connect to Shipping Provider | Yes |
NOTE:
The charges and price details can be provided either at order level or order item level (charges which are common), but not in both. However, it is recommended to send price at order item level for better handling.
Error Codes
Refer Response Codes section to know about specific errors codes.
FAQs/Notes
Q1. What is call frequency for tracking status API? Is it possible to call it every 60 minutes?
Ans. Tracking status API is called 4 times a day. No, it cannot be called every 60 mins.
Q2. How does UC manage tracking statuses, or what method should we (the shipping provider) use to transmit status milestones?
Ans. Initially, we require a comprehensive list of tracking statuses (milestones) from the shipper partner’s side. Within UC, we’ll conduct mapping against all tracking statuses using the provided list.. If a shipping provider has only parent status construct then we need all such status codes only against the field “currentStatus” on the other hand if shipping has Parent-Child construct then we need both statuses in the respective field currentStatus and current_sub_status and we will concatenate both the values received in these two fields with a hyphen (-).
Note: current_sub_status : Keep it as blank "" until you have discussed this with the UC team. Else, current integration will be broken.
For example:
“currentStatus”:“Delivered”,
“current_sub_status”:“Delivered to CX”
And in mapping sheet we received both the statuses. In UC, we handle this Courier Status as DELIVERED-Delivered to CX and for this proper status mapping must be done with UC.
Q3. If the shipping partner doesn’t have any specific parameter handling on their end, what do they need to pass the value?
Ans. At shipping partner end any specific parameter handling or data is not available then they need to pass blank "" or skip such parameters in the response payload. Avoid to pass Null.
Example:
Sample 1:
“currentcountry”: “India”,
“latitude”: "",
“longitude”: "",
Sample 2:
or just skip last two params:
“currentcountry”: “India”,