Welcome to xsendungsverfolgung API
To provide you with better integration support, after completing registration and login, the system will automatically enable API interface access for you, and you can receive 5 free trial credits!
Development Documentation
Below is the full API documentation for /client/trackinfo
Track Detail Query (Single Number) API Official External Documentation
Basic Information
- Name: Track Detail Query (Single Number)
- Method: POST
- Route: /client/trackinfo
- Content-Type: application/json
- Authentication:
- Request header X-Api-Key is required, or pass apiKey in the request body (choose one of the two)
Function Description
- Use the assigned
apiKeyto query the tracking details of a single logistics number - Deduct points according to the number of
acceptedentries in the result, and record a usage log
Request Parameters
apiKey(string) Required (or via request headerX-Api-Key): API credentialnumber(string) Required: logistics tracking number, only a single one is supported
Response Parameters
- Success:
{ code:int, data:{ accepted:array, rejected:array? }, usage:{ deducted:int, remaining:int } } - Error:
{ code:int, msg:string }
Business Rules
- Tracking number support: only a single
numberis supported, arrays are not supported - Daily limit: if the
apiKeyhasdaily_limit ≥ 0configured, exceeding the limit returns 429 - Account quota: if the user’s remaining quota is not enough to cover the current deduction, returns 402
- Usage log: each successful deduction is recorded in the usage log (including
client_userid, masked key, tracking number, IP, deducted points) - Package creation: when the tracking number in
accepteddoes not exist in the package table, insert a minimal record automatically (tracking_number,register_time,created_at,updated_at,data_origin='Api',param_type='json')
Request Examples
- Using request header to pass the key (recommended)
curl -X POST 'https://your-domain.com/client/trackinfo' \
-H 'Content-Type: application/json' \
-H 'X-Api-Key: sk_live_xxx' \
-d '{
"timestamp": 1739300000,
"number": "RR123456789CN",
}'
- Passing the key in the request body (without header)
curl -X POST 'https://your-domain.com/client/trackinfo' \
-H 'Content-Type: application/json' \
-d '{
"timestamp": 1739300000,
"apiKey": "sk_live_xxx",
"number": "RR123456789CN"
}'
Successful Response Example
{
"code": 0,
"data": {
"accepted": [
{
"number": "RR123456789CN",
"carrier": 3011,
"package_status": "InTransit",
"latest_event_time": "2026-02-10 12:34:56",
"latest_event_info": "{\"status\":\"Arrived at sorting center\"}"
}
],
"rejected": []
},
"usage": {
"deducted": 1,
"remaining": 998
}
}
Logistics Tracking Result Field Description
Field Structure Overview
accepted
Type: Array Description: Collection of results that have been successfully processed. If there is no data that meets the conditions, this array is empty.
Contains the following fields:
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| number | String | Tracking number |
| carrier | Number | Carrier code |
| param | String | Additional tracking parameters; this field exists for backward compatibility and can be ignored |
| origin_country | String | Origin country, passed via the /register API |
| ship_date | String | Shipping date in YYYY/MM/DD format |
| destination_postal_code | String | Destination postal code |
| destination_country | String | Destination country |
| destination_city | String | Destination city |
| shipper | String | Shipper |
| consignee | String | Consignee |
| phone_number_last_4 | String | Last 4 digits of phone number |
| phone_number | String | Phone number |
| cpf_or_cnpj | String | Personal or company tax ID |
| special_tracking_info | Object | Special tracking information. This field is an object where each item contains two parts: number_type and parameter |
| tag | String | Custom tag, up to 100 characters; e.g. association ID, grouping remarks, etc. |
| lang | String | Specified language for logistics events, i.e. translation language code |
| track_info | Object | Main structure node for tracking information |
---
track_info Detailed Structure
shipping_info
Type: Object Description: Region-related information node
Contains the following fields:
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| shipper_address | Object | Shipper address node |
| recipient_address | Object | Recipient address node |
shipper_address
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| country | String | Country or region (uppercase) |
| state | String | State / Province |
| postal_code | String | Postal code |
| city | String | City |
| street | String | Street |
| coordinates | Object | Location coordinates (e.g. longitude and latitude) |
coordinates
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| longitude | String | Longitude |
| latitude | String | Latitude |
recipient_address
(Same structure as shipper_address)
---
latest_status
Type: Object Description: Latest status node
Contains the following fields:
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| status | String | Main logistics status |
| sub_status | String | Sub-status of the package |
| sub_status_descr | String | Status description |
---
latest_event
Type: Object Description: Latest event. The structure and description are consistent with the items in the events array.
---
time_metrics
Type: Object Description: Time-related metrics node. estimated_delivery_date is a time range.
Contains the following fields:
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| days_after_order | Number | Days since order (shipment transit days) |
| days_after_last_update | Number | Days since last update |
| days_of_transit | Number | Transit days |
| days_of_transit_done | Number | Completed transit days (after delivery) |
| estimated_delivery_date | Object | Expected delivery time range node |
days_after_order Calculation Rules
- When status is Delivered, days = delivery time − time of the first event
- When status is not Delivered and there is tracking result, days = current time − time of the first event
- When there is no tracking result, days =
--
days_after_last_update Calculation Rules
- When status is Delivered, Returned & Delivered, or No Result, days = 0
- In other cases, days = current time − time of the last event
days_of_transit Calculation Rules
When status is Delivered: 1. If there is InTransit_PickedUp, days = delivery time − pickup time 2. If there is no InTransit_PickedUp but there is InfoReceived, days = delivery time − time of the first event after InfoReceived 3. If neither InTransit_PickedUp nor InfoReceived exists, days = delivery time − time of the first event
When status is not Delivered but there is tracking result: 1. If there is InTransit_PickedUp, days = current time − pickup time 2. If there is no InTransit_PickedUp but there is InfoReceived, days = current time − time of the first event after InfoReceived 3. If there is no InTransit_PickedUp, there is InfoReceived, but only 1 tracking event, days = 0 4. If neither InTransit_PickedUp nor InfoReceived exists, days = current time − time of the first event
When there is no tracking result: days = 0
days_of_transit_done Calculation Rules
When status is Delivered: 1. If there is InTransit_PickedUp, days = delivery time − pickup time 2. If there is no InTransit_PickedUp but there is InfoReceived, days = delivery time − time of the first event after InfoReceived 3. If neither InTransit_PickedUp nor InfoReceived exists, days = delivery time − time of the first event
When status is not Delivered: days = 0
estimated_delivery_date
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| source | String | Indicates the provider of from and to. 17TRACK means provided by 17TRACK, Official means provided by carrier, null means no provider |
| from | String | Earliest estimated delivery time (ISO format), e.g. 2021-09-01T08:00:54-05:00 |
| to | String | Latest estimated delivery time (ISO format), e.g. 2021-09-01T08:00:54-05:00 |
---
milestone
Type: Array Description: Milestones
Purpose: Display the major steps during transportation and their order and time.
Usage: Iterate over milestone items. Recommended order: InfoReceived >> PickedUp >> Departure >> Arrival >> OutForDelivery >> Delivered. (AvailableForPickup, Returned, Returning should be used as appropriate.)
Note: If time_iso or time_utc is null, it means the carrier did not provide time information. You can use milestone[].key_stage to look up more detailed event information in tracking.providers[].events[].stage.
Meaning of milestone.key_stage:
| key_stage | Meaning |
|---|---|
| ----------- | --------- |
| InfoReceived | Information received – carrier has received shipment order information from the merchant and is waiting for pickup |
| PickedUp | Picked up – carrier has collected the parcel from the merchant |
| Departure | Departure – departed from the origin country’s port (theoretically after customs clearance) |
| Arrival | Arrival – arrived at the destination country’s port (customs clearance is not guaranteed) |
| AvailableForPickup | Available for pickup – parcel has arrived at the destination pickup point and needs to be collected by recipient |
| OutForDelivery | Out for delivery – parcel is being delivered |
| Delivered | Delivered successfully – parcel has been delivered |
| Returned | Returned – parcel has been returned |
| Returning | Returning – parcel is in return process, but not guaranteed to end in “Returned” status |
Contains the following fields:
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| key_stage | String | Milestone, corresponding to tracking.providers[].provider[].events[].stage |
| time_iso | String | Time when the status occurred (ISO format) |
| time_utc | String | Time when the status occurred (UTC format) |
| time_raw | Object | Raw time information provided by the carrier |
time_iso Description
1. Time when the status occurred (ISO format). Converted from the carrier’s local time with time zone; if time format is invalid, the raw time is returned. 2. If the upstream carrier provides time zone information, it is used first; otherwise, the time zone of the carrier’s head office is used. 3. Example: 2022-03-02T20:43:24-06:00 means UTC−06:00. 4. Removing the time zone part (-06:00) gives the carrier’s local time. 5. This corresponds to time_iso in the events collection, i.e. tracking.providers[].provider[].events[].time_iso.
time_utc Description
1. Time when the status occurred (UTC format), converted from time_iso. If time_iso is invalid, this is null. 2. Example: 2022-03-03T02:43:24Z. 3. This corresponds to time_utc in the events collection, i.e. tracking.providers[].provider[].events[].time_utc.
time_raw
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| date | String | Date information (year-month-day) |
| time | String | Time information (hour-minute-second) |
| timezone | String | Time zone information. If timezone is null but time_iso is valid, it means the time zone was filled by 17TRACK. |
---
misc_info
Type: Object Description: Additional package information node
Contains the following fields:
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| risk_factor | Number | Package risk factor |
| service_type | String | Service type |
| weight_raw | String | Original weight information; unit depends on the carrier (grams, kilograms, pounds, etc.) |
| weight_kg | String | Converted weight in kilograms based on weight_raw |
| pieces | String | Number of pieces |
| dimensions | String | Original dimension info (L×W×H). Units may differ by carrier; most use centimeters. |
| customer_number | String | Customer number of the receiver |
| reference_number | String | Reference number |
| local_number | String | Last-mile tracking number |
| local_provider | String | Last-mile carrier |
| local_key | Number | Last-mile carrier code |
---
tracking
Type: Object Description: Tracking information node
Contains the following fields:
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| providers_hash | Number | Hash value calculated based on event contents, used to determine whether there are changes |
| providers | Array | Carrier collection node |
Special Notes
When the package is handled by a postal carrier, providers[0] represents the destination carrier information, and providers[1] represents the origin carrier information. It is possible that events in providers[0] and providers[1] have duplicated descriptions and timestamps.
Structure of providers Array
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| provider | Object | Carrier information node |
| service_type | String | Service type |
| latest_sync_status | String | Latest synchronization status |
| latest_sync_time | String | Latest synchronization time |
| events_hash | Number | Event hash value |
| provider_tips | String | Query tips |
| provider_lang | String | Current language of the carrier; null if unknown |
| events | Array | Event collection node |
provider
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| key | Number | Carrier code |
| name | String | Carrier name |
| alias | String | Carrier alias |
| tel | String | Carrier phone |
| homepage | String | Carrier official website |
| country | String | Country where the carrier is located |
Values of latest_sync_status
- Failure: Synchronization failed
- Success: Synchronization succeeded
events
Description: Each item is a logistics event object. The array is sorted in reverse chronological order: more recent events come first.
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| time_iso | String | Time when the event occurred (ISO format) |
| time_utc | String | Time when the event occurred (UTC time) |
| time_raw | Object | Raw time information provided by the carrier |
| description | String | Event description, including location, in-transit actions, and key status notes |
| description_translation | Object | Translation node for the description |
| location | String | Location |
| stage | String | Milestone status; may be missing depending on the carrier’s data |
| sub_status | String | Sub-status of the package |
| address | Object | Address information node |
time_iso Description
1. Time when the event occurred (ISO format). Converted from the carrier’s local time with time zone; if format is invalid, the raw time is shown. 2. If the upstream carrier provides time zone information, it is used first; otherwise, the time zone of the carrier’s head office is used. 3. Example: 2022-03-02T20:43:24-06:00, which represents UTC−06:00. 4. Removing the time zone (-06:00) yields the carrier’s local time.
time_utc Description
1. Time when the event occurred (UTC), converted from time_iso. If time_iso is invalid, this is null. 2. Example: 2022-03-03T02:43:24Z.
time_raw
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| date | String | Date (year-month-day) |
| time | String | Time (hour-minute-second) |
| timezone | String | Time zone. If timezone is null and time_iso is valid, it means the time zone information was filled by 17TRACK. |
description_translation
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| description | String | Translated event description |
| lang | String | Translation language code |
address
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| country | String | Country / Region |
| state | String | State / Province |
| city | String | City |
| street | String | Street |
| postal_code | String | Postal code |
| coordinates | Object | Location coordinates node |
coordinates
| Field | Type | Description |
|---|---|---|
| ------ | ------ | ------------- |
| longitude | String | Longitude |
| latitude | String | Latitude |
---
Error Response Examples
apiKeyinvalid / disabled
{ "code": 401, "msg": "apiKey invalid / disabled", "data": [] }
- Insufficient remaining quota
{ "code": 402, "msg": "Insufficient remaining quota", "data": [] }
- Daily limit exceeded
{ "code": 429, "msg": "Daily call limit reached", "data": [] }
- Missing parameter
{ "code": 400, "msg": "number is required", "data": [] }