QUICKSTART
API Quick Start
Authentication
SignString
OAuth
Overview
Getting Started
Scope List
Versioning
Rate Limit
Body Envelope
Request Errors
Try API Endpoints
CHANGELOG
Changelog
Migration Guide
REFERENCE
API Overview
Trackings
Get trackings
get
Create a tracking
post
Get a tracking by ID
get
Update a tracking by ID
put
Delete a tracking by ID
delete
Retrack an expired tracking by ID
post
Mark tracking as completed by ID
post
Get a tracking (Legacy)
get
Update a tracking (Legacy)
put
Delete a tracking (Legacy)
delete
Retrack an expired tracking (Legacy)
post
Mark tracking as completed (Legacy)
post
Couriers
Get user activated couriers
get
Detect courier
post
Get all couriers
get
Last Checkpoints
Get last checkpoint by tracking ID
get
Get last checkpoint (Legacy)
get
Notifications
Get tracking notification by tracking ID
get
Add a notification by tracking ID
post
Remove a notification by tracking ID
post
Get tracking notification (Legacy)
get
Add a notification (Legacy)
post
Remove a notification (Legacy)
post
Estimated delivery date
Batch prediction for the Estimated Delivery Date
post
MODEL
Tracking
Courier
Checkpoint
Notification
ENUM
Additional Tracking Fields
Delivery Statuses
Delivery Sub-statuses
Slug Groups
Events
Confidence Codes
Webhook
Webhook Overview
Webhook Versioning
Webhook Specifications
Webhook Signature
Webhook OAuth 2.0
Webhook Outgoing IPs
Webhook Changelog
OTHERS
Supported Couriers
CSV Upload & CSV Auto-Fetch
Shipment CSV Export
Order CSV Export
SDK
Android SDK
iOS SDK
Java SDK
Node.js SDK
.NET SDK
Python SDK
Ruby Gem
PHP SDK
Golang SDK
Open Source
phone
email-verifier
Support
Contact Support

SignString

The SignString is generated by Method, Uri, Headers, Body from a HTTP(s) request.


KeyDescriptionExample
methodHTTP methodPUT GET POST
content_md5Computed MD5 hash of the request body in uppercase hex format.

If the request body is empty, set content_md5 to an empty string.
875264590688CA6171F6228AF5BBB3D2
content_typeContent type string.

If the request body is empty, set content_type to an empty string.
application/json
dateUTC time in RFC 1123 format.

Kindly note that the calculated signature is only valid for 3 minutes before or after the datetime indicated in this key.
Sun, 06 Nov 1994 08:49:37 GMT
canonicalized_headersSee below for the specification.

If no customized header is provided, set canonicalized_headers to an empty string
as-api-key:c25b1e6fee2348b3a8bd21599b6ac2de
canonicalized_resourceResource Uri, See below for the specification./tracking/2024-04/trackings

To generate the canonicalized_headers:

  1. Extract all request headers with the as- prefix key. Kindly note that the headers with the as- prefix are not limited to as-api-key, but also include other as- prefixed key such as as-store-id.

  2. Convert all the request header key to lowercase (except the header values case), and sort the headers in ASCII code order.

  3. Remove leading spaces and trailing spaces from the header key and value.

  4. Concatenate each of the header key and value with :, to form a header pair

    preparing...
  5. Concatenate all header pairs with the new line character (ASCII code 10).

Original Headercanonicalized_headers
AS-header2: ThisIsHeader2\nAS-Header1: this-is-header-1as-header1:this-is-header-1\nas-header2:ThisIsHeader2

canonicalized_resource is the path of the URL, including the query parameters.

Example
https://api.aftership.com/tracking/2024-04/trackings

canonicalized_resource
/tracking/2024-04/trackings

If there is any parameter, it should be appended to the path.

The parameters should be sorted by the ASCII code of the key in ascending order, and parameters with duplicate names should be sorted by the value.

Example
https://api.aftership.com/tracking/2024-04/trackings?key2=value2&key1=value1

canonicalized_resource
/tracking/2024-04/trackings?key1=value1&key2=value2

The SignString is constructed by concatenating all the required keys with the new line character (ASCII code 10).

preparing...

Make sure the string encoding is in UTF-8.