> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://developer-stage.shipbob.dev/2026-07/api/orders/get-shipment-line-items/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer-stage.shipbob.dev/_mcp/server. # Get Shipment Line Items GET https://sandbox-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-stage.shipbob.dev/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 ## Request ### Path parameters - `shipmentId` (integer, required) — Unique identifier of the shipment ## Response ### 200 OK - `list of Orders.ShipmentLineItemDetail` ## Errors ### 404 Not Found Error Not Found - `code` (enum, optional) — Error code identifying the type of error - Allowed values: `INVALID_PARAMETER`, `VALIDATION_ERROR`, `DATABASE_UPDATE_ERROR`, `REPROCESSING_ERROR`, `DEALLOCATE_ERROR`, `NOT_FOUND`, `CONFLICT` - `message` (string, optional, nullable) — Human-readable description of the error ## Types ### Orders.ShipmentLineItemDetail - `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` (Orders.LotInfo, optional) — Lot information for the inventory item, if lot-tracked - `product_variant` (Orders.ProductVariantDetail, optional) — Product variant details associated with this line item - `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 ### Orders.LotInfo - `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` ### Orders.ProductVariantDetail - `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 ## 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://sandbox-api.shipbob.com/2026-07/shipment/1:getLineItems" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript default const url = 'https://sandbox-api.shipbob.com/2026-07/shipment/1:getLineItems'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; 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-07/shipment/1:getLineItems" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") 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-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 ' response = http.request(request) puts response.read_body ``` ```java default import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://sandbox-api.shipbob.com/2026-07/shipment/1:getLineItems") .header("Authorization", "Bearer ") .asString(); ``` ```php default request('GET', 'https://sandbox-api.shipbob.com/2026-07/shipment/1:getLineItems', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp default using RestSharp; var client = new RestClient("https://sandbox-api.shipbob.com/2026-07/shipment/1:getLineItems"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift default import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-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() ```