> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer-stage.shipbob.dev/llms.txt.
> For full documentation content, see https://developer-stage.shipbob.dev/llms-full.txt.

# Get Tracking by Tracking Ids


GET https://sandbox-api.shipbob.com/2026-01/tracking

Retrieves tracking information for one or more shipments by their carrier tracking IDs. Returns the current status, carrier details, estimated delivery time, and full tracking history for each tracking ID. Intended for platform-level consumers that reference shipments by carrier tracking number rather than ShipBob shipment ID.


Reference: https://developer-stage.shipbob.dev/api/tracking/get-tracking-by-tracking-ids

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: api-2026-01
  version: 1.0.0
paths:
  /2026-01/tracking:
    get:
      operationId: get-tracking-by-tracking-ids
      summary: |
        Get Tracking by Tracking Ids
      description: >
        Retrieves tracking information for one or more shipments by their
        carrier tracking IDs. Returns the current status, carrier details,
        estimated delivery time, and full tracking history for each tracking ID.
        Intended for platform-level consumers that reference shipments by
        carrier tracking number rather than ShipBob shipment ID.
      tags:
        - subpackage_tracking
      parameters:
        - name: TrackingIds
          in: query
          description: A list of carrier tracking Ids to retrieve tracking information for
          required: false
          schema:
            $ref: >-
              #/components/schemas/Tracking.Get.Api.V1.Publictracking.Tracking.Ids.TrackingIds.StringArray
        - name: Authorization
          in: header
          description: Authentication using Personal Access Token (PAT) token
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Tracking.PlatformShipmentTrackingResponseArray
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Tracking.Get.Api.V1.Publictracking.Tracking.Ids.Bad.Request.String
        '401':
          description: Authorization missing or invalid
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: The provided credentials are not authorized to access this resource
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Tracking.Get.Api.V1.Publictracking.Tracking.Ids.Internal.Server.Error.String
servers:
  - url: https://sandbox-api.shipbob.com
components:
  schemas:
    Tracking.Get.Api.V1.Publictracking.Tracking.Ids.TrackingIds.StringArray:
      type: array
      items:
        type: string
      title: Tracking.Get.Api.V1.Publictracking.Tracking.Ids.TrackingIds.StringArray
    TrackingTrackingHistoryItemAddress:
      type: object
      properties:
        city:
          type: string
        country:
          type: string
        latitude:
          type: number
          format: double
        location:
          type: string
          description: A human-readable location string (e.g., 'Los Angeles, CA').
        longitude:
          type: number
          format: double
        postal_code:
          type: string
        state:
          type: string
      description: The geographic location where this tracking event occurred.
      title: TrackingTrackingHistoryItemAddress
    Tracking.TrackingHistoryItem:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/TrackingTrackingHistoryItemAddress'
          description: The geographic location where this tracking event occurred.
        status:
          type: string
          description: The high-level status at the time of this tracking event.
        substatus:
          type: string
          description: >-
            A human-readable label for the granular status at the time of this
            event.
        substatus_code:
          type: string
          description: >-
            A machine-readable code for the granular status at the time of this
            event (e.g., 'InTransit_001').
        substatus_message:
          type: string
          description: An optional message providing additional detail about the substatus.
        timestamp:
          type: string
          format: date-time
          description: The date and time when this tracking event occurred.
      title: Tracking.TrackingHistoryItem
    TrackingPlatformShipmentTrackingResponseLastMileCarrier:
      type: object
      properties:
        carrier:
          type: string
          description: The name of the last-mile carrier.
        service:
          type: string
          description: The service level used by the last-mile carrier.
        tracking_number:
          type: string
          description: The tracking number assigned by the last-mile carrier.
        tracking_url:
          type: string
          description: A URL to track the shipment on the last-mile carrier's website.
      description: >-
        Last-mile carrier details. Fields are null when no last-mile carrier is
        present.
      title: TrackingPlatformShipmentTrackingResponseLastMileCarrier
    Tracking.PlatformShipmentTrackingResponse:
      type: object
      properties:
        carrier:
          type: string
          description: >-
            The name of the carrier handling the shipment (e.g., UPS, FedEx,
            USPS, ShipBob).
        current_status:
          type: string
          description: The current high-level status of the shipment.
        current_substatus:
          type: string
          description: >-
            A human-readable label for the current granular status (e.g., 'In
            Transit').
        current_substatus_code:
          type: string
          description: >-
            A machine-readable code for the current granular status (e.g.,
            'InTransit_001').
        current_timestamp:
          type: string
          format: date-time
          description: The date and time of the most recent tracking event.
        delivery_signed_by:
          type: string
          description: The name of the person who signed for the delivery, if applicable.
        edd:
          type: string
          format: date-time
          description: The estimated delivery date and time.
        edd_source:
          type: string
          description: >-
            The source of the estimated delivery date. Either 'carrier' (from
            carrier data) or 'shipbob' (ShipBob estimate).
        history:
          type: array
          items:
            $ref: '#/components/schemas/Tracking.TrackingHistoryItem'
          description: >-
            A list of historical tracking events for the shipment, ordered
            oldest-first.
        last_mile_carrier:
          $ref: >-
            #/components/schemas/TrackingPlatformShipmentTrackingResponseLastMileCarrier
          description: >-
            Last-mile carrier details. Fields are null when no last-mile carrier
            is present.
        proof_of_delivery_urls:
          type: array
          items:
            type: string
          description: URLs to proof-of-delivery images, if available.
        service:
          type: string
          description: >-
            The carrier service level used for the shipment (e.g., Ground,
            Express).
        shipment_id:
          type: integer
          format: int64
          description: The unique identifier of the shipment in ShipBob's system.
        tracking_number:
          type: string
          description: >-
            The tracking number for the shipment. For ShipBob-carried shipments
            this is the ShipBob tracking number; for last-mile carrier shipments
            it is the carrier tracking number.
        tracking_url:
          type: string
          description: A publicly accessible URL for tracking the shipment.
        user_id:
          type: integer
          format: int64
          description: The ShipBob merchant user ID associated with the shipment.
      required:
        - current_status
        - current_timestamp
        - tracking_number
      title: Tracking.PlatformShipmentTrackingResponse
    Tracking.PlatformShipmentTrackingResponseArray:
      type: array
      items:
        $ref: '#/components/schemas/Tracking.PlatformShipmentTrackingResponse'
      title: Tracking.PlatformShipmentTrackingResponseArray
    Tracking.Get.Api.V1.Publictracking.Tracking.Ids.Bad.Request.String:
      type: string
      title: Tracking.Get.Api.V1.Publictracking.Tracking.Ids.Bad.Request.String
    Tracking.Get.Api.V1.Publictracking.Tracking.Ids.Internal.Server.Error.String:
      type: string
      title: >-
        Tracking.Get.Api.V1.Publictracking.Tracking.Ids.Internal.Server.Error.String
  securitySchemes:
    PAT:
      type: http
      scheme: bearer
      description: Authentication using Personal Access Token (PAT) token
    OAuth2:
      type: http
      scheme: bearer
      description: OAuth2 authentication using JWT tokens

```

## SDK Code Examples

```python default
import requests

url = "https://sandbox-api.shipbob.com/2026-01/tracking"

querystring = {"TrackingIds":"[\"string\"]"}

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript default
const url = 'https://sandbox-api.shipbob.com/2026-01/tracking?TrackingIds=%5B%22string%22%5D';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go default
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://sandbox-api.shipbob.com/2026-01/tracking?TrackingIds=%5B%22string%22%5D"

	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(res)
	fmt.Println(string(body))

}
```

```ruby default
require 'uri'
require 'net/http'

url = URI("https://sandbox-api.shipbob.com/2026-01/tracking?TrackingIds=%5B%22string%22%5D")

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
```

```java default
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://sandbox-api.shipbob.com/2026-01/tracking?TrackingIds=%5B%22string%22%5D")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php default
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://sandbox-api.shipbob.com/2026-01/tracking?TrackingIds=%5B%22string%22%5D', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp default
using RestSharp;

var client = new RestClient("https://sandbox-api.shipbob.com/2026-01/tracking?TrackingIds=%5B%22string%22%5D");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift default
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-api.shipbob.com/2026-01/tracking?TrackingIds=%5B%22string%22%5D")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```