Past Changelog
This page contains the past changelog. For the changelog of the current version, please refer to this page.
2025-01 (2025-01-09)
Change | Before | After |
---|---|---|
Base URL | https://api.aftership.com/tracking/2024-10 | https://api.aftership.com/tracking/2025-01 |
as-api-version header’s value | 2024-10 | 2025-01 |
Change | Affected Endpoints |
---|---|
New fields in Tracking model:first_mile.tracking_number first_mile.slug first_mile.transit_time first_mile.courier_tracking_link first_mile.courier_redirect_link last_mile.transit_time customers[x].role customers[x].language checkpoints[x].source | API endpoint: - GET /trackings - GET /trackings/:id - DELETE /trackings/:id - POST /trackings - PUT /trackings/:id - POST /trackings/:id/mark-as-completed - POST /trackings/:id/retrack Tracking Webhook |
- The existing fields tracking.next_couriers will be replaced with tracking.last_mile - The existing field tracking.customer_name will be replaced with tracking.customers[x].name - The existing field tracking.smses will be replaced with tracking.customers[x].phone_number - The existing field tracking.emails will be replaced with tracking.customers[x].email | API endpoint: - GET /trackings - GET /trackings/:id - DELETE /trackings/:id - POST /trackings - PUT /trackings/:id - POST /trackings/:id/mark-as-completed - POST /trackings/:id/retrack Tracking Webhook |
The existing field tracking.last_updated_at will be deprecated. | API endpoint: - GET /trackings - GET /trackings/:id - DELETE /trackings/:id - POST /trackings - PUT /trackings/:id - POST /trackings/:id/mark-as-completed - POST /trackings/:id/retrack Tracking Webhook |
tracking.tracking_ship_date supports new value formats:- YYYY-MM-DD - YYYY-MM-DDTHH:mm:ss - YYYY-MM-DDTHH:mm:ssZ | API endpoint: - GET /trackings - GET /trackings/:id - DELETE /trackings/:id - POST /trackings - PUT /trackings/:id - POST /trackings/:id/mark-as-completed - POST /trackings/:id/retrack Tracking Webhook |
A new checkpoint will be created when the user marks a tracking as completed. | API endpoint: - GET /trackings - GET /trackings/:id - DELETE /trackings/:id - POST /trackings - PUT /trackings/:id - POST /trackings/:id/mark-as-completed - POST /trackings/:id/retrack Tracking Webhook |
- Rename tracking.courier_destination_country_iso3 to tracking.courier_destination_country_region - Rename tracking.origin_country_iso3 to tracking.origin_country_region - Rename tracking.destination_country_iso3 to tracking.destination_country_region - Rename tracking.checkpoints[x].country_iso3 to tracking.checkpoints[x].country_region - Rename tracking.checkpoints[x].country_name to tracking.checkpoints[x].country_region_name - Rename tracking.tracking_origin_country to tracking.tracking_origin_country_region - Rename tracking.tracking_destination_country to tracking.tracking_destination_country_region - Rename courier.service_from_country_iso3 to courier.service_from_country_regions - Rename estimated_delivery_date.origin_address.country to estimated_delivery_date.origin_address.country_region - Rename estimated_delivery_date.destination_address.country to estimated_delivery_date.destination_address.country_region | API endpoint: - GET /trackings - GET /trackings/:id - DELETE /trackings/:id - POST /trackings - PUT /trackings/:id - POST /trackings/:id/mark-as-completed - POST /trackings/:id/retrack - GET /couriers - GET /couriers/all - POST /couriers/detect - POST /estimated-delivery-date/predict-batch - POST /estimated-delivery-date/predict Tracking Webhook |
Tracking marked as completed endpoint supportsevent_datetime field | API endpoint: - POST /trackings/:id/mark-as-completed |
2024-10 (2024-10-10)
Change | Before | After |
---|---|---|
Base URL | https://api.aftership.com/tracking/2024-07 | https://api.aftership.com/tracking |
as-api-version header’s value | 2024-07 | 2024-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 Cursor | Using 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 verification | The 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_date | expected_delivery | courier_estimated_delivery_date |
2024-07 (2024-07-11)
Change | Before | After |
---|---|---|
Base URL | https://api.aftership.com/tracking/2024-04 | https://api.aftership.com/tracking/2024-07 |
as-api-version header’s value | 2024-04 | 2024-07 |
Deprecating notifications endpoints | POST /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 endpoints | GET /last_checkpoint/{tracking_id} GET /last_checkpoint/{slug}/{tracking_number} | Endpoints are removed |
API Rate limit changes | All endpoints from sharing one rate limit | Each 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"} |
2024-04 (2024-04-11)
Change | Before | After |
---|---|---|
Base URL | https://api.aftership.com/tracking/2024-01 | https://api.aftership.com/tracking/2024-04 |
as-api-version header’s value | 2024-01 | 2024-04 |
New tracking model's field | - | failed_delivery_attempts signature_requirement |
Tracking model's field renamed | checkpoints[x].coordinates | checkpoints[x].coordinate |
New event code and reason code are added | - | Event codepicked_up signed_by_customer Reason code outside_delivery_limits not_what_customer_ordered package_oversized_overweight |
2024-01 (2024-01-11)
Change | Before | After |
---|---|---|
Base URL | https://api.aftership.com/tracking/2023-10 | https://api.aftership.com/tracking/2024-01 |
as-api-version header’s value | 2023-10 | 2024-01 |
New tracking model's field | - | shipping_method location_id carbon_emissions checkpoints[x].events |
Tracking model's field renamed | aftership_estimated_delivery_date.confidence_score | aftership_estimated_delivery_date.confidence_code |
New field in the response body when predicting the estimated delivery date | - | confidence_code |
2023-10 (2023-10-12)
Change | Before | After |
---|---|---|
Base URL | https://api.aftership.com/v4 | https://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 value | The 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 renamed | delivery_time | transit_time |
GET /trackings endpoint's query parameter renamed | delivery_time | transit_time |
Transit time formula updated | Pick 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" |
v4.1.16 (2023-04-20)
Update | Resources |
---|---|
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 |
v4.1.15 (2023-03-30)
Tracking Model Fields Changes
Field name | Old Behavior | New Behavior |
---|---|---|
expected_delivery | expected_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_date | The 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_date | 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" . | 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_delivery | The 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
Update | Resources |
---|---|
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 |
v4.1.14 (2022-09-22)
Update | Resources |
---|---|
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 |
v4.1.13 (2022-09-02)
Update | Resources |
---|---|
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 |
v4.1.12 (2022-07-14)
Update | Resources |
---|---|
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 |
v4.1.11 (2022-06-08)
Update | Resources |
---|---|
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 |
v4.1.10 (2022-04-01)
Update | Resources |
---|---|
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 |
v4.1.9 (2022-01-26)
Update | Resources |
---|---|
New field order_number in the tracking object. To indicate the unique numeric identifier for the order for use by shop owner and customerPlease 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 accountsPlease be noted that the subtag will come into action from est. 17 Feb | GET /trackings GET /trackings/:slug/:tracking_number |
v4.1.8 (2022-01-14)
Update | Resources |
---|---|
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 |
v4.1.7 (2021-12-07)
Update | Resources |
---|---|
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 |
v4.1.6 (2021-11-29)
Update | Resources |
---|---|
Detect Courier API endpoint now supports origin_country_iso3 and destination_country_iso3 . | POST /couriers/detect |
v4.1.4 (2021-11-03)
Update | Resources |
---|---|
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 |
v4.1.3 (2021-07-27)
Update | Resources |
---|---|
Create trackings API endpoint now supports updating order_date . | POST /trackings |
v4.1.2 (2021-06-16)
Update | Resources |
---|---|
Added slug_group for create tracking and detect courier endpoints. | POST /trackings POST /couriers/detect |
v4.1.1 (2021-06-15)
Update | Resources |
---|---|
Update trackings API endpoint now supports updating slug . | PUT /trackings/:slug/:tracking_number |
Latest API updates
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
v4.1.0 (2020-05-26)
Update | Resources |
---|---|
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 |
v4.0.4 (2020-04-30)
Update | Resources |
---|---|
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 |
v4.0.3 (2020-03-23)
Update | Resources |
---|---|
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 |
v4.0.2 (2014-07-19)
Update | Resources |
---|---|
New resources to get, add or remove emails and smses | POST /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 once | POST /trackings/:slug/:tracking_number/retrack |
v4.0.1 (2014-07-09)
Update | Resources |
---|---|
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 |
v4.0.0 (2014-06-24)
Update | Resources |
---|---|
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 detection | POST /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 carriers | GET /couriers/all GET /couriers |
New resource to get list of activated couriers | GET /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 |