# Get All Inventory Levels Grouped By Lot GET https://api.shipbob.com/2026-01/inventory-level/lots Retrieves inventory levels for all inventory items grouped by lot number. Enables tracking of inventory across multiple lots, including expiration dates and manufacturing batch information. Reference: https://developer-stage.shipbob.dev/api/inventory/get-all-inventory-levels-grouped-by-lot ## OpenAPI Specification ```yaml openapi: 3.1.0 info: title: api-2026-01 version: 1.0.0 paths: /2026-01/inventory-level/lots: get: operationId: get-all-inventory-levels-grouped-by-lot summary: Get All Inventory Levels Grouped By Lot description: >- Retrieves inventory levels for all inventory items grouped by lot number. Enables tracking of inventory across multiple lots, including expiration dates and manufacturing batch information. tags: - subpackage_inventory parameters: - name: LocationId in: query description: >- Filter by specific fulfillment center location ID. Use this to retrieve lot-based inventory levels for a particular warehouse or distribution center. required: false schema: type: string format: int32 - name: SearchBy in: query description: >- Search is available for 3 fields: Inventory ID, Name, and SKU. Expected behavior for search by Inventory ID is exact match. Expected behavior for search by Inventory Name or SKU is partial match (consecutive characters, case insensitive). required: false schema: type: string - name: InventoryIds in: query description: >- Comma-separated list of inventory IDs to filter results. Use this to retrieve lot-grouped inventory levels for specific inventory items only. required: false schema: type: string - name: IsActive in: query description: >- Filter inventory levels by active status. Set to true to return only active inventory items, false for inactive items. Omit to return all items regardless of status. required: false schema: type: boolean - name: IsDigital in: query description: >- Filter inventory levels by digital product status. Set to true to return only digital products, false for physical products. Digital products are items that don't require physical fulfillment. required: false schema: type: boolean - name: PageSize in: query description: >- Number of lot-grouped inventory level items to return per page. Controls pagination size for the response. required: false schema: type: string format: int32 - name: SortBy in: query description: >- Sort results by field name. Default is ascending order. Prefix with '-' for descending order (e.g., '-lot_date' sorts by lot date descending). Multiple fields can be comma-separated. required: false schema: type: string - name: Authorization in: header description: Authentication using Personal Access Token (PAT) token or OAuth2 required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: >- #/components/schemas/Inventory.InventoryQuantityLotResponsePagedResponse '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Inventory.ProblemDetails' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Inventory.ProblemDetails' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Inventory.ProblemDetails' '500': description: Internal Server Error content: application/json: schema: description: Any type '503': description: Service Unavailable content: application/json: schema: description: Any type servers: - url: https://api.shipbob.com - url: https://sandbox-api.shipbob.com components: schemas: Inventory.FulfillableQuantityByFulfillmentCenter: type: object properties: awaiting_quantity: type: integer description: Quantity expected to arrive at this location committed_quantity: type: integer description: Quantity reserved for existing orders at this location fulfillable_quantity: type: integer description: Quantity available to fulfill new orders at this location internal_transfer_quantity: type: integer description: Quantity in transit to or from this location location_id: type: integer description: Unique identifier for the fulfillment center location name: type: - string - 'null' description: Name of the fulfillment center on_hand_quantity: type: integer description: Total quantity physically present at this location title: Inventory.FulfillableQuantityByFulfillmentCenter Inventory.Lots: type: object properties: awaiting_quantity: type: integer description: Quantity expected to arrive for this lot committed_quantity: type: integer description: Quantity reserved for existing orders from this lot fulfillable_quantity: type: integer description: Quantity available to fulfill new orders for this lot internal_transfer_quantity: type: integer description: Quantity in transit between locations for this lot locations: type: - array - 'null' items: $ref: >- #/components/schemas/Inventory.FulfillableQuantityByFulfillmentCenter description: Breakdown of lot quantities by fulfillment center location lot_date: type: - string - 'null' format: date-time description: Expiration or manufacturing date associated with this lot lot_number: type: - string - 'null' description: Unique lot or batch number for this inventory grouping on_hand_quantity: type: integer description: Total quantity physically present for this lot title: Inventory.Lots Inventory.InventoryQuantityLotResponse: type: object properties: inventory_id: type: integer description: Unique identifier for the inventory item lots: type: - array - 'null' items: $ref: '#/components/schemas/Inventory.Lots' description: List of lot numbers and their respective inventory quantities name: type: - string - 'null' description: Name of the inventory item sku: type: - string - 'null' description: Stock keeping unit identifier title: Inventory.InventoryQuantityLotResponse Inventory.InventoryQuantityLotResponsePagedResponse: type: object properties: first: type: - string - 'null' description: >- URL to retrieve the first page of results. Null if already on the first page. items: type: - array - 'null' items: $ref: '#/components/schemas/Inventory.InventoryQuantityLotResponse' description: >- Array of lot-grouped inventory quantity items in the current page of results. last: type: - string - 'null' description: >- URL to retrieve the last page of results. Null if already on the last page. next: type: - string - 'null' description: URL to retrieve the next page of results. Null if on the last page. prev: type: - string - 'null' description: >- URL to retrieve the previous page of results. Null if on the first page. title: Inventory.InventoryQuantityLotResponsePagedResponse Inventory.ProblemDetails: type: object properties: detail: type: - string - 'null' description: >- A human-readable explanation specific to this occurrence of the problem. instance: type: - string - 'null' description: >- A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. status: type: - integer - 'null' description: The HTTP status code for this occurrence of the problem. title: type: - string - 'null' description: A short, human-readable summary of the problem type. type: type: - string - 'null' description: >- A URI reference that identifies the problem type. This URI should provide human-readable documentation for the problem. title: Inventory.ProblemDetails securitySchemes: PAT: type: http scheme: bearer description: Authentication using Personal Access Token (PAT) token or OAuth2 ``` ## SDK Code Examples ```python Inventory_getAllInventoryLevelsGroupedByLot_example import requests url = "https://api.shipbob.com/2026-01/inventory-level/lots" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript Inventory_getAllInventoryLevelsGroupedByLot_example const url = 'https://api.shipbob.com/2026-01/inventory-level/lots'; 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 Inventory_getAllInventoryLevelsGroupedByLot_example package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.shipbob.com/2026-01/inventory-level/lots" 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 Inventory_getAllInventoryLevelsGroupedByLot_example require 'uri' require 'net/http' url = URI("https://api.shipbob.com/2026-01/inventory-level/lots") 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 Inventory_getAllInventoryLevelsGroupedByLot_example import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.shipbob.com/2026-01/inventory-level/lots") .header("Authorization", "Bearer ") .asString(); ``` ```php Inventory_getAllInventoryLevelsGroupedByLot_example request('GET', 'https://api.shipbob.com/2026-01/inventory-level/lots', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp Inventory_getAllInventoryLevelsGroupedByLot_example using RestSharp; var client = new RestClient("https://api.shipbob.com/2026-01/inventory-level/lots"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift Inventory_getAllInventoryLevelsGroupedByLot_example import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.shipbob.com/2026-01/inventory-level/lots")! 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() ```