curl --request GET \
--url https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"tracking_uuid": "66666666-6666-4666-8666-666666666666",
"shipment_uuid": "22222222-2222-4222-8222-222222222222",
"parcel_uuid": "33333333-3333-4333-8333-333333333333",
"tracking_number": "00340434161094015749",
"service": {
"carrier": {
"code": "postnord",
"name": "PostNord",
"logo_url": "https://assets.example.com/postnord-logo.svg",
"icon_url": "https://assets.example.com/postnord-icon.svg"
},
"service_code": "postnord_agent",
"service_name": "Service point",
"is_pickup": true,
"is_return": false
},
"event": {
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"category": "Change",
"status_code": "Change_EstimatedDeliveryUpdated",
"description": "Expected delivery updated.",
"happened_at": null,
"recorded_at": "2026-09-16T10:00:12Z",
"location": null,
"coordinates": null,
"note": null,
"event_type": "estimated_delivery_updated",
"estimated_delivery": {
"start": "2026-09-17T08:00:00Z",
"end": "2026-09-17T16:00:00Z"
}
},
"tracking": {
"uuid": "66666666-6666-4666-8666-666666666666",
"tracking_number": "00340434161094015749",
"tracking_url": "https://track.smartsend.io/example",
"state": "InfoReceived",
"description": "Shipment information received.",
"estimated_delivery": {
"start": "2026-09-17T08:00:00Z",
"end": "2026-09-17T16:00:00Z"
},
"delivered_at": null,
"returned_at": null,
"last_updated_at": "2026-09-16T10:00:12Z"
},
"published_at": "2026-09-16T10:00:12Z"
}
],
"links": {
"first": null,
"last": null,
"prev": null,
"next": null
},
"meta": {
"path": "https://api.smartsend.io/v2/teams/00000000-0000-4000-8000-000000000001/tracking/events",
"per_page": 100,
"next_cursor": null,
"prev_cursor": null,
"resume_cursor": "eyJzZXF1ZW5jZSI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"
}
}Read the tracking event feed
Append-only team feed ordered by committed publication sequence. Includes carrier events and ETA-only changes. Late physical events still appear after the last cursor. Without cursor, start at the oldest retained entry. Follow links.next while present; once caught up save meta.resume_cursor and use it as cursor on the next poll, including after empty responses. Do not use the null next_cursor as the saved feed position. Preserve filters. Entries/cursors are supported for at least 90 days; expired positions return 410, never silently restart. Retrieve older per-shipment history with getTracking. Duplicate deliveries may be deduplicated by entry UUID. This endpoint does not trigger a live carrier call.
curl --request GET \
--url https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smartsend.io/v2/teams/{teamUuid}/tracking/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"tracking_uuid": "66666666-6666-4666-8666-666666666666",
"shipment_uuid": "22222222-2222-4222-8222-222222222222",
"parcel_uuid": "33333333-3333-4333-8333-333333333333",
"tracking_number": "00340434161094015749",
"service": {
"carrier": {
"code": "postnord",
"name": "PostNord",
"logo_url": "https://assets.example.com/postnord-logo.svg",
"icon_url": "https://assets.example.com/postnord-icon.svg"
},
"service_code": "postnord_agent",
"service_name": "Service point",
"is_pickup": true,
"is_return": false
},
"event": {
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"category": "Change",
"status_code": "Change_EstimatedDeliveryUpdated",
"description": "Expected delivery updated.",
"happened_at": null,
"recorded_at": "2026-09-16T10:00:12Z",
"location": null,
"coordinates": null,
"note": null,
"event_type": "estimated_delivery_updated",
"estimated_delivery": {
"start": "2026-09-17T08:00:00Z",
"end": "2026-09-17T16:00:00Z"
}
},
"tracking": {
"uuid": "66666666-6666-4666-8666-666666666666",
"tracking_number": "00340434161094015749",
"tracking_url": "https://track.smartsend.io/example",
"state": "InfoReceived",
"description": "Shipment information received.",
"estimated_delivery": {
"start": "2026-09-17T08:00:00Z",
"end": "2026-09-17T16:00:00Z"
},
"delivered_at": null,
"returned_at": null,
"last_updated_at": "2026-09-16T10:00:12Z"
},
"published_at": "2026-09-16T10:00:12Z"
}
],
"links": {
"first": null,
"last": null,
"prev": null,
"next": null
},
"meta": {
"path": "https://api.smartsend.io/v2/teams/00000000-0000-4000-8000-000000000001/tracking/events",
"per_page": 100,
"next_cursor": null,
"prev_cursor": null,
"resume_cursor": "eyJzZXF1ZW5jZSI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Preferred language(s) for translatable content using BCP 47 language tags. Supports quality values (q-factors) for priority ordering. The API negotiates the best available language based on this header, the team's configured language, and available translations. If omitted, the team's default language is used.
"da-DK, da;q=0.9, en;q=0.8"
Optional client-supplied request identifier. When provided and matching the validation pattern, the value is echoed back in the Request-ID response header. Otherwise the server generates one. Use this to correlate requests between client and server when reporting issues.
1 - 64^[A-Za-z0-9._-]{1,64}$Path Parameters
Team uuid. All resources are scoped to this team.
Query Parameters
Restrict the feed to one shipment.
Restrict to one tracking record.
Opaque cursor returned by this endpoint. Omit it for the first page. Keep all filters, sort order and per_page unchanged within a page sequence. For tracking polls, use the documented resume_cursor once next is null.
1Maximum number of resources per page.
1 <= x <= 1000Response
Newly published tracking entries; an empty data array still has a resume_cursor.
Show child attributes
Show child attributes
Navigation links for a cursor-paginated collection. Follow next or prev with GET; returned URLs preserve the selected filters, sort order, page size and sync boundary where applicable.
Show child attributes
Show child attributes
Cursor pagination metadata with an additional durable resume_cursor for polling the append-only feed.
Show child attributes
Show child attributes
Was this page helpful?