# Get Tracking by Shipment IDs


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

Retrieves tracking information for one or more shipments by their ShipBob shipment IDs. Returns the current status, carrier details, estimated delivery time, and full tracking history for each shipment. Accepts between 1 and 25 shipment IDs per request.


Reference: https://developer-stage.shipbob.dev/api/tracking/get-tracking-by-shipment-i-ds

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: api-2026-01
  version: 1.0.0
paths:
  /2026-01/shipments-tracking:
    get:
      operationId: get-tracking-by-shipment-i-ds
      summary: |
        Get Tracking by Shipment IDs
      description: >
        Retrieves tracking information for one or more shipments by their
        ShipBob shipment IDs. Returns the current status, carrier details,
        estimated delivery time, and full tracking history for each shipment.
        Accepts between 1 and 25 shipment IDs per request.
      tags:
        - subpackage_tracking
      parameters:
        - name: ShipmentIds
          in: query
          description: A list of ShipBob shipment IDs to retrieve tracking information for
          required: false
          schema:
            type: string
        - 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.ShipmentTrackingResponseArray'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Tracking.Get.Api.V1.Publictracking.Shipments.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.Shipments.Internal.Server.Error.String
servers:
  - url: https://sandbox-api.shipbob.com
components:
  schemas:
    TrackingTrackingHistoryItemStatus:
      type: string
      enum:
        - Available for Pickup
        - Cancelled
        - Delivered
        - Delivery attempt Failed
        - DeliveryException
        - Exception
        - Failed
        - InTransit
        - PreTransit
        - Return to sender
      description: The high-level status at the time of this tracking event
      title: TrackingTrackingHistoryItemStatus
    Tracking.TrackingHistoryItem:
      type: object
      properties:
        carrier_message:
          type:
            - string
            - 'null'
          description: The raw message provided by the carrier for this tracking event
        location:
          type:
            - string
            - 'null'
          description: The geographic location where this tracking event occurred
        message:
          type:
            - string
            - 'null'
          description: A human-readable message describing this tracking event
        status:
          oneOf:
            - $ref: '#/components/schemas/TrackingTrackingHistoryItemStatus'
            - type: 'null'
          description: The high-level status at the time of this tracking event
        substatus:
          type:
            - string
            - 'null'
          description: >-
            A more granular status code at the time of this tracking event.
            Possible values include: 'Delivered', 'Failed Attempt', 'In
            Transit', 'Delayed', 'Label created', etc.
        timestamp:
          type: string
          format: date-time
          description: The date and time when this tracking event occurred
      title: Tracking.TrackingHistoryItem
    TrackingShipmentTrackingResponseStatus:
      type: string
      enum:
        - Available for Pickup
        - Cancelled
        - Delivered
        - Delivery attempt Failed
        - DeliveryException
        - Exception
        - Failed
        - InTransit
        - PreTransit
        - Return to sender
      description: The current high-level status of the shipment
      title: TrackingShipmentTrackingResponseStatus
    Tracking.ShipmentTrackingResponse:
      type: object
      properties:
        carrier:
          type:
            - string
            - 'null'
          description: >-
            The name of the carrier handling the shipment (e.g., UPS, FedEx,
            USPS)
        carrier_message:
          type:
            - string
            - 'null'
          description: The raw status message provided by the carrier
        carrier_tracking_number:
          type:
            - string
            - 'null'
          description: The tracking number assigned by the carrier
        eta:
          type:
            - string
            - 'null'
          format: date-time
          description: The estimated date and time of delivery
        history:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Tracking.TrackingHistoryItem'
          description: A list of historical tracking events for the shipment
        last_updated:
          type: string
          format: date-time
          description: The date and time when the tracking information was last updated
        location:
          type:
            - string
            - 'null'
          description: The current geographic location of the shipment
        message:
          type:
            - string
            - 'null'
          description: A human-readable message describing the current shipment status
        public_tracking_url:
          type:
            - string
            - 'null'
          description: >-
            A publicly accessible URL for tracking the shipment on the carrier's
            website
        service:
          type:
            - string
            - 'null'
          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
        status:
          oneOf:
            - $ref: '#/components/schemas/TrackingShipmentTrackingResponseStatus'
            - type: 'null'
          description: The current high-level status of the shipment
        substatus:
          type:
            - string
            - 'null'
          description: >-
            A more granular status code describing the current state of the
            shipment. Possible values include: 'Delivered', 'Failed Attempt',
            'In Transit', 'Delayed', 'Label created', etc.
        tracking_id:
          type:
            - string
            - 'null'
          description: The unique tracking identifier assigned to the shipment
      title: Tracking.ShipmentTrackingResponse
    Tracking.ShipmentTrackingResponseArray:
      type: array
      items:
        $ref: '#/components/schemas/Tracking.ShipmentTrackingResponse'
      title: Tracking.ShipmentTrackingResponseArray
    Tracking.Get.Api.V1.Publictracking.Shipments.Bad.Request.String:
      type: string
      title: Tracking.Get.Api.V1.Publictracking.Shipments.Bad.Request.String
    Tracking.Get.Api.V1.Publictracking.Shipments.Internal.Server.Error.String:
      type: string
      title: >-
        Tracking.Get.Api.V1.Publictracking.Shipments.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 Tracking_getTrackingByShipmentIDs_example
import requests

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

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

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

print(response.json())
```

```javascript Tracking_getTrackingByShipmentIDs_example
const url = 'https://sandbox-api.shipbob.com/2026-01/shipments-tracking';
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 Tracking_getTrackingByShipmentIDs_example
package main

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

func main() {

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

	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 Tracking_getTrackingByShipmentIDs_example
require 'uri'
require 'net/http'

url = URI("https://sandbox-api.shipbob.com/2026-01/shipments-tracking")

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 Tracking_getTrackingByShipmentIDs_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://sandbox-api.shipbob.com/2026-01/shipments-tracking")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://sandbox-api.shipbob.com/2026-01/shipments-tracking', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp Tracking_getTrackingByShipmentIDs_example
using RestSharp;

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

```swift Tracking_getTrackingByShipmentIDs_example
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-api.shipbob.com/2026-01/shipments-tracking")! 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()
```