> 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 Shipment Line Items


GET https://api.shipbob.com/2026-07/shipment/{shipmentId}:getLineItems

Retrieves the current line items for a specific shipment, including product variant details, lot information, committed quantities, and serial numbers. Use this endpoint to get the current state before calling updateLineItems, which requires the full item list.


Reference: https://developer.shipbob.com/api/orders/get-shipment-line-items

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

### Path parameters

- `shipmentId` (integer, required) — Unique identifier of the shipment

## Response

### 200

OK

- `list of object`
  - `committed_quantity` (integer, optional) — Quantity of the inventory item committed for fulfillment
  - `inventory_id` (integer, optional) — Unique identifier of the inventory item
  - `is_hazmat` (boolean, optional, nullable) — Indicates whether the inventory item is classified as hazardous material
  - `is_lot` (boolean, optional, nullable) — Indicates whether the inventory item is lot-tracked
  - `lot` (object, optional) — Lot information for the inventory item, if lot-tracked
    - `lot_date` (datetime, optional, nullable) — Expiration or manufacturing date of the lot
    - `lot_number` (string, optional, nullable) — Lot number identifying a specific batch of inventory
    - `selection_method` (enum, optional) — Method used to select the lot for fulfillment
      - Allowed values: `ShipbobChooses`, `Specific`
  - `product_variant` (object, optional) — Product variant details associated with this line item
    - `id` (integer, optional) — Unique identifier of the product variant
    - `name` (string, optional, nullable) — Display name of the product variant
    - `sku` (string, optional, nullable) — Stock keeping unit identifier for the product variant
  - `quantity` (integer, optional) — Total quantity of the inventory item in the shipment
  - `serial_numbers` (list of string, optional, nullable) — List of serial numbers assigned to this line item

## Examples

**Response**

```json
[
  {
    "committed_quantity": 5,
    "inventory_id": 789012,
    "is_hazmat": false,
    "is_lot": true,
    "lot": {
      "lot_date": "2024-06-01T00:00:00+00:00",
      "lot_number": "LOT-2024-001",
      "selection_method": "Specific"
    },
    "product_variant": {
      "id": 456,
      "name": "Vitamin D Supplement",
      "sku": "VIT-D-60CT"
    },
    "quantity": 5,
    "serial_numbers": null
  },
  {
    "committed_quantity": 3,
    "inventory_id": 789012,
    "is_hazmat": false,
    "is_lot": true,
    "lot": {
      "lot_date": "2024-09-15T00:00:00+00:00",
      "lot_number": "LOT-2024-002",
      "selection_method": "Specific"
    },
    "product_variant": {
      "id": 456,
      "name": "Vitamin D Supplement",
      "sku": "VIT-D-60CT"
    },
    "quantity": 3,
    "serial_numbers": null
  },
  {
    "committed_quantity": 2,
    "inventory_id": 345678,
    "is_hazmat": false,
    "is_lot": false,
    "lot": {
      "lot_date": null,
      "lot_number": null,
      "selection_method": "Specific"
    },
    "product_variant": {
      "id": 789,
      "name": "Bluetooth Speaker",
      "sku": "BT-SPKR-BLK"
    },
    "quantity": 2,
    "serial_numbers": null
  }
]
```

**SDK Code**

```python default
import requests

url = "https://api.shipbob.com/2026-07/shipment/1:getLineItems"

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

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

print(response.json())
```

```javascript default
const url = 'https://api.shipbob.com/2026-07/shipment/1:getLineItems';
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-07/shipment/1:getLineItems"

	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-07/shipment/1:getLineItems")

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-07/shipment/1:getLineItems")
  .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-07/shipment/1:getLineItems', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp default
using RestSharp;

var client = new RestClient("https://api.shipbob.com/2026-07/shipment/1:getLineItems");
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-07/shipment/1:getLineItems")! 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()
```