Past Changelog

This page contains the past changelog. For the changelog of the current version, please refer to this page.

ChangeBeforeAfter
Base URLhttps://api.aftership.com/tracking/2024-07https://api.aftership.com/tracking
as-api-version header’s value2024-072024-10
Deprecating legacy tracking endpoints- GET /trackings/{slug}/{tracking_number}
- PUT /trackings/{slug}/{tracking_number}
- DELETE /trackings/{slug}/{tracking_number}
- POST /trackings/{slug}/{tracking_number}/retrack
- POST /trackings/{slug}/{tracking_number}/mark-as-completed
Endpoints are removed
Searching for Trackings Using CursorUsing page parameters to traverse search results.
Returns all query parameters.
Use the cursor to get data for the next page.
Removed query parameters.
Added pagination object with cursor.
Enhanced field type verificationThe field will be ignored.A bad request error will be returned.
Tracking modal new fields:
aftership_tracking_url
aftership_tracking_order_url
next_couriers[x].courier_tracking_link
next_couriers[x].courier_redirect_link
-aftership_tracking_url
aftership_tracking_order_url
next_couriers[x].courier_tracking_link
next_couriers[x].courier_redirect_link
The existing field expected_delivery will be deprecated and replaced with courier_estimated_delivery_dateexpected_deliverycourier_estimated_delivery_date
ChangeBeforeAfter
Base URLhttps://api.aftership.com/tracking/2024-04https://api.aftership.com/tracking/2024-07
as-api-version header’s value2024-042024-07
Deprecating notifications endpointsPOST /notifications/{tracking_id}/add
POST notifications/{tracking_id}/remove
POST /notifications/{slug}/{tracking_number}/add
POST /notifications/{slug}/{tracking_number}/remove
GET /notifications/{tracking_id}
GET /notifications/{slug}/{tracking_number}
Endpoints are removed
Deprecating last checkpoint endpointsGET /last_checkpoint/{tracking_id}
GET /last_checkpoint/{slug}/{tracking_number}
Endpoints are removed
API Rate limit changesAll endpoints from sharing one rate limitEach of the endpoints now having its dedicated rate limit
Tracking response new fields:
delivery_location_type
legacy_id
-delivery_location_type
legacy_id
Estimated delivery date response new fields:
id
-id
Create/update tracking request body new fields:
shipment_weight
-shipment_weight
Merge shipment_weight and shipment_weight_unit into shipment_weight object.{"shipment_weight": 10.2, "shipment_weight_unit": "kg"}{"shipment_weight":{"value": 10.2, "unit": "kg"}}
tracking.checkpoints[x].events.code supports new enum values:
carrier_pickup_failed
dropped_off_for_carrier_pickup
delayed
handed_over_to_last_mile_carrier
received_by_last_mile_carrier
returning_to_sender
address_corrected
customer_enquiry_raised
address_verified
-carrier_pickup_failed
dropped_off_for_carrier_pickup
delayed
handed_over_to_last_mile_carrier
received_by_last_mile_carrier
returning_to_sender
address_corrected
customer_enquiry_raised
address_verified
tracking.order_promised_delivery_date supports new value formats:
- YYYY-MM-DDTHH:mm:ss
- YYYY-MM-DDTHH:mm:ssZ
YYYY-MM-DD- YYYY-MM-DD
- YYYY-MM-DDTHH:mm:ss
- YYYY-MM-DDTHH:mm:ssZ
Allow to update tracking_ship_date for non-pending tracking-tracking_ship_date
The length of the tracking ID has changed from 24 characters to 32 characters.id: "q12m966070t6vlvwnspqn02o"id: "8243e0c68fe64c7a871ef868cdb7899d"
smses no longer support comma-separated string format when PUT or POST a tracking.["+5321288112","+893636771"]
or
"+5321288112, +893636771"
["+5321288112","+893636771"]
emails no longer support comma-separated string format when PUT or POST a tracking.["test1@aftership.com","test2@aftership.com"]
or
"test1@aftership.com,test2@aftership.com"
["test1@aftership.com","test2@aftership.com"]
slug no longer supports comma-separated string format when detecting couriers.["ups","fedex"]
or
"ups, fedex"
["ups","fedex"]
Removed the tracking object wrapper from the response body.{"meta": {"code": 201},"data": {"tracking": {"id": "nke21z8sryxsqlyh2o45d02f"…}}}{"meta": {"code": 201},"data": {{"id": "nke21z8sryxsqlyh2o45d02f"…}}
Removed the tracking object wrapper from the request body.{"tracking": {"slug":fedex","tracking_number":"999737828883221"}}{"slug": fedex","tracking_number": "999737828883221"}
ChangeBeforeAfter
Base URLhttps://api.aftership.com/tracking/2024-01https://api.aftership.com/tracking/2024-04
as-api-version header’s value2024-012024-04
New tracking model's field-failed_delivery_attempts
signature_requirement
Tracking model's field renamedcheckpoints[x].coordinatescheckpoints[x].coordinate
New event code and reason code are added
-Event code
picked_up
signed_by_customer
Reason code
outside_delivery_limits
not_what_customer_ordered
package_oversized_overweight
ChangeBeforeAfter
Base URLhttps://api.aftership.com/tracking/2023-10https://api.aftership.com/tracking/2024-01
as-api-version header’s value2023-102024-01
New tracking model's field-shipping_method
location_id
carbon_emissions
checkpoints[x].events
Tracking model's field renamedaftership_estimated_delivery_date.confidence_scoreaftership_estimated_delivery_date.confidence_code
New field in the response body when predicting the estimated delivery date-confidence_code
ChangeBeforeAfter
Base URLhttps://api.aftership.com/v4https://api.aftership.com/tracking/2023-10
New response header-There is a new response header as-api-version e.g. "2023-10" added in the versioned API.
API Key header's key- as-api-key
- aftership-api-key
- as-api-key
- aftership-api-key
API Key header's valueThe API keys which marked as Legacy Tracking API access only are supported in the legacy API.The API keys which marked as Legacy Tracking API access only are no longer supported in the versioned API.
Tracking model's field renameddelivery_timetransit_time
GET /trackings endpoint's query parameter renameddelivery_timetransit_time
Transit time formula updatedPick up date is considered as 1 transit day

When the shipment is delivered:
Transit time (in day) = Delivered date - picked up date + 1

When the shipment is not delivered:
Transit time (in day) = Current date - picked up date + 1
Pick up date is not considered as 1 day in transit

When the shipment is delivered:
Transit time (in day) = Delivered date - picked up date

When the shipment is not delivered:
Transit time (in day) = Current date - picked up date
The allowed values of first_estimated_delivery.source has been changed"Carrier EDD", "AI Predictive EDD", "Custom EDD", "Order EDD""Carrier EDD", "AfterShip EDD", "Custom EDD", "Order EDD"
The allowed values of latest_estimated_delivery.source has been changed"Carrier EDD", "AI Predictive EDD", "Custom EDD", "Order EDD""Carrier EDD", "AfterShip EDD", "Custom EDD", "Order EDD"
UpdateResources
A new carrier slug unrecognized and a new substatus code Pending_006 was added. If you import a shipment without a slug and AfterShip Tracking's auto-detection fails to identify the corresponding carrier, instead of assigning an incorrect carrier name, the aforementioned slug and substatus code will be assigned for ease of reference.POST /trackings
GET /trackings
GET /trackings/:id
GET /trackings/:slug/:tracking_number

Tracking Model Fields Changes

Field nameOld BehaviorNew Behavior
expected_deliveryexpected_delivery combines the carrier EDD and AfterShip API EDD. Also, the time is filled in "00:00:00" format. For example, if the carrier provides the date only, the value is "2022-01-20T00:00:00".expected_delivery will consider the estimated delivery date provided by the carrier only. You can use the AfterShip API EDD field (aftership_estimated_delivery_date) if needed. And, the default time fill-in logic will be removed. For example, if the carrier provides the date only, the value will be "2022-01-20".
order_dateThe current format for the order date is YYYY-MM-DDTHH:mm:ss[Z], e.g. "2022-01-20T14:43:20Z".The new format for the order date will be YYYY-MM-DDTHH:mm:ssZ, e.g. "2022-01-20T14:43:20+08:00".
shipment_pickup_date, shipment_delivery_dateThe time is filled in "00:00:00" format. For example, if the carrier provides the date only, the value is "2022-01-20T00:00:00".The default time fill-in logic will be removed. For example, if the carrier provides the date only, the value will be "2022-01-20".
latest_estimated_deliveryThe source of latest_estimated_delivery supports Carrier EDD, AI Predictive EDD and Custom EDD.The source of latest_estimated_delivery supports Carrier EDD, AI Predictive EDD, Custom EDD and Order EDD.

Resourses Changes

UpdateResources
You can now include the origin_state, origin_city, origin_postal_code, origin_raw_location, destination_state, destination_city and destination_postal_code fields when importing and retrieving trackings.GET /trackings
GET /trackings/:id
POST /trackings
PUT /trackings/:id
You can now include the first_estimated_delivery and custom_estimated_delivery_date fields when retrieving trackings.GET /trackings
GET /trackings/:id
The existing fields, including tracking_origin_country, tracking_destination_country, tracking_postal_code, and tracking_state, will be marked as legacy fields and will be replaced by the new fields. However, the legacy fields will still be available.GET /trackings
GET /trackings/:id
POST /trackings
PUT /trackings/:id
DELETE /trackings/:id
UpdateResources
Remove useless fields estimated_pickup.pickup_time, estimated_delivery_date, estimated_delivery_date_min and estimated_delivery_date_max in request body.POST /estimated-delivery-date/predict-batch
UpdateResources
You can now include the shipment_tags field when importing and retrieving trackings via API. These custom tags can be used to help you categorize and filter trackings.GET /trackings
GET /trackings/:id
POST /trackings
PUT /trackings/:id
UpdateResources
New subtags added to cover more pending shipment cases: Pending_003, Pending_004, Pending_005.

New object added: latest_estimated_delivery. Provides the latest estimated delivery date which may come from the carrier, AfterShip AI, or based on your custom settings.
GET /trackings
GET /trackings/:id
GET /trackings/:slug/:tracking_number
The shipment_type field can now be included when importing shipments via API. Indicates the carrier’s shipment type. If you provide this information, we will not collect it from the carrier or overwrite the shipment type you provide.POST /trackings
PUT /trackings/:id
PUT /trackings/:slug/:tracking_number
UpdateResources
Use AfterShip Predict API to provide estimated delivery dates (EDD) to customers for online orders on the product page, cart, and order checkout page. You can get the earliest date, the latest date, and the most-likely-arrival date through the AI-predictive EDD API without adding the tracking number.POST /estimated-delivery-date/predict-batch
UpdateResources
New query param tracking_numbers. Can search the tracking by specific tracking numbers. Use comma to separate multiple values. (Example: 101,102,103)GET /trackings
UpdateResources
New field order_number in the tracking object. To indicate the unique numeric identifier for the order for use by shop owner and customer
Please be noted that the field will come into action from est. 24 Feb
POST /trackings
PUT /trackings/:slug/:tracking_number
PUT /trackings/:id
GET /trackings/:slug/:tracking_number
GET /trackings/:id
Add new subtag Pending_002. It represents the shipments are pending due to no connection with carrier accounts
Please be noted that the subtag will come into action from est. 17 Feb
GET /trackings
GET /trackings/:slug/:tracking_number
UpdateResources
New field aftership_estimated_delivery_date in the tracking object. To indicate when the shipment should arrive.
Please be noted that the whole aftership_estimated_delivery_date object will be released in February 2022.
POST /trackings
PUT /trackings/:slug/:tracking_number
PUT /trackings/:id
GET /trackings/:slug/:tracking_number
GET /trackings/:id
UpdateResources
New field order_tags in the tracking object.
The tags of the order.
POST /trackings
PUT /trackings/:slug/:tracking_number
PUT /trackings/:id
GET /trackings/:slug/:tracking_number
GET /trackings/:id
UpdateResources
Detect Courier API endpoint now supports origin_country_iso3 and destination_country_iso3 .POST /couriers/detect
UpdateResources
New field on_time_status in the tracking object.
To indicate if the tracking is delivered on time.
POST /trackings
PUT /trackings/:slug/:tracking_number
PUT /trackings/:id
GET /trackings/:slug/:tracking_number
GET /trackings/:id
New field on_time_difference in the tracking object.
To indicate the difference (in day) to the on time date.
POST /trackings
PUT /trackings/:slug/:tracking_number
PUT /trackings/:id
GET /trackings/:slug/:tracking_number
GET /trackings/:id
UpdateResources
Create trackings API endpoint now supports updating order_date.POST /trackings
UpdateResources
Added slug_group for create tracking and detect courier endpoints.POST /trackings
POST /couriers/detect
UpdateResources
Update trackings API endpoint now supports updating slug.PUT /trackings/:slug/:tracking_number

Please pay attention to the fields expected_delivery in the Tracking object and checkpoint_time in the Checkpoint object that it is a string with the following possible values:

  • Empty String
  • YYYY-MM-DD
  • YYYY-MM-DDTHH:MM:SS
  • YYYY-MM-DDTHH:MM:SS+TIMEZONE

Please also handle the updates of HTTP Status Code

UpdateResources
New subtag Exception_013 added to cover lost shipment cases.
New field courier_redirect_link added in tracking object. Delivery instructions (delivery date or address) can be modified by visiting the link if supported by a carrier.
GET /trackings
GET /trackings/:slug/:tracking_number
New function to mark a tracking as completed.POST /trackings/:slug/:tracking_number/mark-as-completed
UpdateResources
A new tag AvailableForPickup is added.
The existing subtag OutForDelivery_002 is replaced with the new subtag AvailableForPickup_001.
GET /trackings
GET /trackings/:slug/:tracking_number
UpdateResources
New field first_attempted_at added in tracking object.
Time of the first delivery attempt made by the carrier.
GET /trackings/:id
New field courier_tracking_link added in tracking object.
Courier website direct tracking URL
GET /trackings/:id
New field raw_tag added in checkpoint object.
Status code returned by carriers
GET /trackings/:id
UpdateResources
New resources to get, add or remove emails and smsesPOST /notifications/:slug/:tracking_number/add
POST /notifications/:slug/:tracking_number/add
PUT /notifications/:slug/:tracking_number/remove
New function to reactivate and retrack expired tracking oncePOST /trackings/:slug/:tracking_number/retrack
UpdateResources
New field id added in tracking object.
You can use /:i to replace /:slug/:tracking_number.
GET /trackings/:id
PUT /trackings/:id
POST /trackings/:id
DELETE /trackings/:id
UpdateResources
Update HTTP Status Code, do take note of the update of meta.code - Check meta codes here
You can specify multiple slug in array for carrier detectionPOST /couriers/detect
POST /trackings
New required_fields added for some carriers:
tracking_ship_date
tracking_account_number
tracking_postal_code
POST /trackings
GET /trackings/:slug/:tracking_number
Return required_fields for carriersGET /couriers/all
GET /couriers
New resource to get list of activated couriersGET /couriers
Update method to get full list of all couriers
v3 method is GET /couriers
GET /couriers/all
Update method to get matched courier of tracking number
v3 method as GET /couriers/detect/:tracking_number
POST /couriers/detect