The purpose of the API is to return last or all events registered for a parcel, in additional to basic information about the shipment
Content
Setup
Access to API | Example |
---|---|
Username (see Authentication section) | wsfoobar |
Password (see Authentication section) | a-very-very-long-password |
The user is a web service user
The user has access to the web service for event log
Environments / endpoints
TEST GET | https://staging-ws.di.no/ws/json/parcel/tracking/v-2/fetch/{identifier}/{locale}/{onlyLastEvent} |
---|---|
PRODUCTION GET | https://ws.di.no/ws/json/parcel/tracking/v-2/fetch/{identifier}/{locale}/{onlyLastEvent} |
Making a request
Clients using this API should not fail if new fields are added to the response. If a new field is added to the response on a later stage, existing clients should handle this in a way such as they just ignore the field.
Fields not set in the response are not left out, that is fields in the response may have null values. E.g. "shipmentNumber": null. The client using the endpoint should handle this.
For shipments older than 6 months no events will be available, only latest status
Request header
key | value example | comment |
---|---|---|
Authorization | Bearer $SECRET_WS_TOKEN | see Setup |
Content-Type | application/json |
Path parameters
parameter | example | description |
---|---|---|
identifier | 370724760010119754 | Shipment number, tracking number or return code. |
locale | NO | Language code. Event description will be translated to locale. Supported language codes are currently:
|
onlyLastEvent | false | If set to true only the last registered event is returned. Last registered is decided based on eventTime. If false, all available events are returned |
Curl request example
curl -X GET \ https://ws.di.no/ws/json/parcel/tracking/v-2/fetch/370724760120000898/NO/false \ -H 'Authorization: Bearer $SECRET_WS_TOKEN' \ -H 'Content-Type: application/json' \
Response
List of shipments relevant for the request. The majority of cases only have one shipment, but in cases where the way of delivery have been changed for one or more items, it may have been put on a different shipment.
In those cases the "linkedParcelNumber" under shipment items will link to the parcelnumber in the "new" shipment.
Name | Type | Example | Description | |
shipmentNumber | whole number | 70724760120000880 | 35 | Globally unique identifier for the shipment, typically a GINC code. Typically named MessageNumber, DocumentNumber or ConsignorsReference in EDI. |
shopName | string | Testbutikken | 50 | Name of the shop/owner party of the shipment |
shopId | whole number | 1 | 5 | ID of the of the shop/owner party of the shipment |
consigneeReference | string | o123 | 35 | Usually an orderId or some other reference chosen by the shop/owner party. |
consignorReference | string | o123 | 35 | Usually an orderId or some other reference chosen by the shop/owner party. |
properties | properties object | - | n/a | Not in use |
items | list of items | n/a |
Items
Name | Type | Example | Max length | Description |
---|---|---|---|---|
trackingNumber | whole number | 370724760120000898 | 35 | Unique identifier for an item/kolli in the shipment. This can be a SSCC code according to gs1, or a UPU S10 identifier. Typically named TransporterInstructionMark in EDI. |
returnCode | string | R-1234 | 10 | Optional additional unique identifier, used for pick up parcels |
freightProductId | whole number | 1 | 10 | The freight product describes a way of delivery, and is defined by a delivery method and the coverage of the given method. |
freightProductName | string | ekspress levering hjem | 50 | The freight product describes a way of delivery, and is defined by a delivery method and the coverage of the given method. |
parcelStatus | string | Levert | 25 | Tracking status for the item/kolli |
linkedParcelNumbers | list of linkedParcelNumbers | n/a | List of trackingNumber(s) for the same physical object, used when several different ways of delivery have been used. | |
events | list of events | n/a |
Events
Name | Type | Example | Max Length | Description |
---|---|---|---|---|
eventTime | string | 2017-08-22 13:55:13 | 19 | Time of the event registered in originating system. Datetime format yyyy-MM-dd HH:mm:ss |
lat | double | 59.911096 | 9 | Latitude for the location of the event |
lon | double | 10.752457 | 9 | Longitude for the location of the event |
locationContext | string | Osloveien 14, 0288 Oslo | 255 | Address or description of the location/ context of the event |
locationContextId | string | 34567 | 10 | Unique identification of the locationContext |
eventType | eventType object | n/a | Description of the event, will be translated to defined locale | |
additionalInfo | additionalInfo object | n/a | Additional description of the event, will be translated to defined locale | |
eventGroup | eventGroup object | n/a | Groupage of event, e.g. transportation events, communication events etc. | |
communicationChannel | string | SMS | n/a | Communication channel only used for event types within event group "communication". ComChannelTypes in use:
|
changeUserId | whole number | 112233 | n/a | Internal user identification responsible for the event taking place. Only returned for callees having the highest access level |
regSystem | regSystem object | n/a | System that registered the event | |
message | string | 255 | Optional message from the system registering the event |
eventType
Name | Type | Example | Max length | Description |
---|---|---|---|---|
apiKey | string | 001 | n/a | Identifier for the event group |
description | string | Package received | n/a | Static description of the event, will be translated to defined locale |
i18nKey | string | event.type.pub.shipment.received | n/a | Key which can be used to add your own translations |
additionalInfo
Name | Type | Example | Max length | Description |
---|---|---|---|---|
apiKey | string | 001 | n/a | Identifier for the additional info group |
description | string | Package received | n/a | Static description of the event, will be translated to defined locale. Can be concatenated with the Parcel Event Log v1#eventType description for a more detailed description. The formatting is already taken care of |
i18nKey | string | event.type.pub.shipment.received | n/a | Key which can be used to add your own translations |
eventGroup
Name | Type | Example | Max length | Description |
---|---|---|---|---|
id | whole number | 1 | n/a | identifier for the event group |
name | string | communcation | n/a | named classification of the group |
Group id | Description |
---|---|
1 | Information on shipments received/imported in DI |
2 | Information on transportation |
3 | Information on communication |
4 | Information on status updates |
5 | Information on scanning of shipments |
6 | Information for shipments transported by others |
7 | Information from/relating to external systems |
8 | Information on internal processing |
regSystem
Name | Type | Example | Max length | Description |
---|---|---|---|---|
id | whole number | 1 | n/a | identifier for the originating system |
name | string | Postnord | n/a | named classification of the originating system |
List of possible events
Response from Pacel Event Log API (no/en).pdf
Examples
Error handling
API requests that result in errors will return an appropriate HTTP status code to help you identify the type of error. You can use the table below to understand what each code means.
HTTP Status code | Text | Description |
---|
HTTP Status code | Text | Description |
---|---|---|
400 | Client or Validation Error | The request body/query string is not in the correct format. |
401 | Authentication Failure | Indicates that the Authorization header is either missing or incorrect. You can learn more about the Authorization header here. |
403 | Access denied | This indicates that the agent whose credentials were used in making this request was not authorized to perform this API call. It could be that you do not have access to the shop or transportsolution you provided in your request. If you believe this is a mistake, please reach out to your contact so it can be rectified. |
405 | Method not allowed | This API request used the wrong HTTP verb/method. For example a PUT request will result in this error. |
500 | Unexpected Server Error | Oops! This indicates an error on our side, and there is nothing more you can do. Please [email|mailto:support@di.no] us a description of your problem and we will see what we can do. |
Error response
In addition to the HTTP status code, most errors will also return a response body that contains more information to help you debug the error. A sample error response is shown below. The format of the error response body is explained after the example.
Sample error
{ "statusCode": 401, "errorKey": "authentication.missing", "errorMap": {} }
Field | Description |
---|---|
statusCode | The HTTP code associated with this error. |
errorKey | A machine parseable error code. |
errorMap | Additional details pertaining to the error. |