> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.shipbob.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.shipbob.com/_mcp/server.

# Get Tracking by Shipment Ids


GET https://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.shipbob.com/2026-01/api/tracking/get-tracking-by-shipment-ids

## Authentication

- `Authorization` header (bearer token, required) — Authentication using Personal Access Token (PAT) token
- `Authorization` header (bearer token, required) — OAuth2 authentication using JWT tokens

## Servers

- `https://api.shipbob.com` (https://api.shipbob.com, default)
- `https://sandbox-api.shipbob.com` (https://sandbox-api.shipbob.com)

## Request

### Query parameters

- `ShipmentIds` (list of long, optional) — A list of ShipBob shipment IDs to retrieve tracking information for

## Response

### 200

OK

- `list of object`
  - `current_status` (string, required) — The current high-level status of the shipment.
  - `current_timestamp` (datetime, required) — The date and time of the most recent tracking event.
  - `tracking_number` (string, required) — 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.
  - `carrier` (string, optional, nullable) — The name of the carrier handling the shipment (e.g., UPS, FedEx, USPS, ShipBob).
  - `current_substatus` (string, optional, nullable) — A human-readable label for the current granular status (e.g., 'In Transit').
  - `current_substatus_code` (string, optional, nullable) — A machine-readable code for the current granular status (e.g., 'InTransit_001').
  - `delivery_signed_by` (string, optional, nullable) — The name of the person who signed for the delivery, if applicable.
  - `edd` (datetime, optional, nullable) — The estimated delivery date and time.
  - `edd_source` (string, optional, nullable) — The source of the estimated delivery date. Either 'carrier' (from carrier data) or 'shipbob' (ShipBob estimate).
  - `history` (list of object, optional, nullable) — A list of historical tracking events for the shipment, ordered newest-first.
    - `address` (object, optional, nullable) — The geographic location where this tracking event occurred.
      - `city` (string, optional, nullable)
      - `country` (string, optional, nullable)
      - `latitude` (double, optional, nullable)
      - `location` (string, optional, nullable) — A human-readable location string (e.g., 'Los Angeles, CA').
      - `longitude` (double, optional, nullable)
      - `postal_code` (string, optional, nullable)
      - `state` (string, optional, nullable)
    - `status` (string, optional, nullable) — The high-level status at the time of this tracking event.
    - `substatus` (string, optional, nullable) — A human-readable label for the granular status at the time of this event.
    - `substatus_code` (string, optional, nullable) — A machine-readable code for the granular status at the time of this event (e.g., 'InTransit_001').
    - `substatus_message` (string, optional, nullable) — An optional message providing additional detail about the substatus.
    - `timestamp` (datetime, optional) — The date and time when this tracking event occurred.
  - `last_mile_carrier` (object, optional) — Last-mile carrier details. Fields are null when no last-mile carrier is present.
    - `carrier` (string, optional, nullable) — The name of the last-mile carrier.
    - `service` (string, optional, nullable) — The service level used by the last-mile carrier.
    - `tracking_number` (string, optional, nullable) — The tracking number assigned by the last-mile carrier.
    - `tracking_url` (string, optional, nullable) — A URL to track the shipment on the last-mile carrier's website.
  - `proof_of_delivery_urls` (list of string, optional, nullable) — URLs to proof-of-delivery images, if available.
  - `reference_id` (string, optional, nullable) — Client-defined external unique id of the order from your upstream system.
  - `service` (string, optional, nullable) — The carrier service level used for the shipment (e.g., Ground, Express).
  - `shipment_id` (long, optional, nullable) — The unique identifier of the shipment in ShipBob's system.
  - `tracking_url` (string, optional, nullable) — A publicly accessible URL for tracking the shipment.

## Errors

### 400 Bad Request Error

Bad Request

- `string`

### 401 Unauthorized Error

Authorization missing or invalid

- `any`

### 403 Forbidden Error

The provided credentials are not authorized to access this resource

- `any`

### 500 Internal Server Error

Internal Server Error

- `string`

## Examples

**Response**

```json
[
  {
    "current_status": "InTransit",
    "current_timestamp": "2025-09-24T09:45:00+00:00",
    "tracking_number": "SBAAAA01234567890",
    "carrier": "ShipBob",
    "current_substatus": "In Transit",
    "current_substatus_code": "InTransit_001",
    "delivery_signed_by": null,
    "edd": "2025-09-28T15:00:00+00:00",
    "edd_source": "carrier",
    "history": [
      {
        "address": {
          "city": "Los Angeles",
          "country": "US",
          "latitude": 34.0522,
          "location": "Los Angeles, CA",
          "longitude": -118.2437,
          "postal_code": "90001",
          "state": "CA"
        },
        "status": "InTransit",
        "substatus": "In Transit",
        "substatus_code": "InTransit_001",
        "substatus_message": null,
        "timestamp": "2025-09-24T09:45:00+00:00"
      }
    ],
    "last_mile_carrier": {
      "carrier": "UPS",
      "service": "UPS Ground",
      "tracking_number": "1Z999AA10123456784",
      "tracking_url": "https://www.ups.com/track?tracknum=1Z999AA10123456784"
    },
    "proof_of_delivery_urls": null,
    "reference_id": "8WPpjzGzUq",
    "service": "Standard",
    "shipment_id": 10234510234,
    "tracking_url": "https://www.track.shipbob.com/SBAAAA01234567890"
  }
]
```

**SDK Code**

```python default
import requests

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

querystring = {"ShipmentIds":"[0]"}

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

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

print(response.json())
```

```javascript default
const url = 'https://api.shipbob.com/2026-01/shipments-tracking?ShipmentIds=%5B0%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://api.shipbob.com/2026-01/shipments-tracking?ShipmentIds=%5B0%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://api.shipbob.com/2026-01/shipments-tracking?ShipmentIds=%5B0%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://api.shipbob.com/2026-01/shipments-tracking?ShipmentIds=%5B0%5D")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

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

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

```csharp default
using RestSharp;

var client = new RestClient("https://api.shipbob.com/2026-01/shipments-tracking?ShipmentIds=%5B0%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://api.shipbob.com/2026-01/shipments-tracking?ShipmentIds=%5B0%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()
```