> 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 All Inventory Levels Grouped By Fulfillment Center

GET https://api.shipbob.com/2026-01/inventory-level/locations

Retrieves inventory levels for all inventory items grouped by fulfillment center location. Supports filtering by location type, location ID, and various product attributes. Returns inventory quantities broken down by fulfillment center location; it does not return the list of fulfillment centers. For the physical location list use the Locations API, and for receiving-eligible fulfillment centers use the Receiving API's fulfillment centers endpoint.

Reference: https://developer.shipbob.com/2026-01/api/inventory/get-all-inventory-levels-grouped-by-fulfillment-center

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

- `LocationType` (string, optional)
- `LocationId` (integer, optional)
- `SearchBy` (string, optional)
- `InventoryIds` (list of integer, optional)
- `IsActive` (boolean, optional)
- `IsDigital` (boolean, optional)
- `PageSize` (integer, optional)
- `SortBy` (string, optional)

## Response

### 200

OK

- `first` (string, optional, nullable) — URL to retrieve the first page of results. Null if already on the first page.
- `items` (list of object, optional, nullable) — Array of location-grouped inventory quantity items in the current page of results.
  - `inventory_id` (integer, optional) — Unique identifier for the inventory item
  - `locations` (list of object, optional, nullable) — List of fulfillment centers and their respective inventory quantities
    - `awaiting_quantity` (integer, optional) — Quantity expected to arrive at this location
    - `committed_quantity` (integer, optional) — Quantity reserved for existing orders at this location
    - `fulfillable_quantity` (integer, optional) — Quantity available to fulfill new orders at this location
    - `internal_transfer_quantity` (integer, optional) — Quantity in transit to or from this location
    - `location_id` (integer, optional) — Unique identifier for the fulfillment center location
    - `name` (string, optional, nullable) — Name of the fulfillment center
    - `on_hand_quantity` (integer, optional) — Total quantity physically present at this location
  - `name` (string, optional, nullable) — Name of the inventory item
  - `sku` (string, optional, nullable) — Stock keeping unit identifier
- `last` (string, optional, nullable) — URL to retrieve the last page of results. Null if already on the last page.
- `next` (string, optional, nullable) — URL to retrieve the next page of results. Null if on the last page.
- `prev` (string, optional, nullable) — URL to retrieve the previous page of results. Null if on the first page.

## Errors

### 400 Bad Request Error

Bad Request

- `detail` (string, optional, nullable) — A human-readable explanation specific to this occurrence of the problem.
- `instance` (string, optional, nullable) — A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.
- `status` (integer, optional, nullable) — The HTTP status code for this occurrence of the problem.
- `title` (string, optional, nullable) — A short, human-readable summary of the problem type.
- `type` (string, optional, nullable) — A URI reference that identifies the problem type. This URI should provide human-readable documentation for the problem.

### 401 Unauthorized Error

Unauthorized

- `detail` (string, optional, nullable) — A human-readable explanation specific to this occurrence of the problem.
- `instance` (string, optional, nullable) — A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.
- `status` (integer, optional, nullable) — The HTTP status code for this occurrence of the problem.
- `title` (string, optional, nullable) — A short, human-readable summary of the problem type.
- `type` (string, optional, nullable) — A URI reference that identifies the problem type. This URI should provide human-readable documentation for the problem.

### 403 Forbidden Error

Forbidden

- `detail` (string, optional, nullable) — A human-readable explanation specific to this occurrence of the problem.
- `instance` (string, optional, nullable) — A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.
- `status` (integer, optional, nullable) — The HTTP status code for this occurrence of the problem.
- `title` (string, optional, nullable) — A short, human-readable summary of the problem type.
- `type` (string, optional, nullable) — A URI reference that identifies the problem type. This URI should provide human-readable documentation for the problem.

### 500 Internal Server Error

Internal Server Error

- `any`

### 503 Service Unavailable Error

Service Unavailable

- `any`

## Examples

**Response**

```json
{
  "first": "string",
  "items": [
    {
      "inventory_id": 0,
      "locations": [
        {
          "awaiting_quantity": 0,
          "committed_quantity": 0,
          "fulfillable_quantity": 0,
          "internal_transfer_quantity": 0,
          "location_id": 0,
          "name": "string",
          "on_hand_quantity": 0
        }
      ],
      "name": "string",
      "sku": "string"
    }
  ],
  "last": "string",
  "next": "string",
  "prev": "string"
}
```

**SDK Code**

```python default
import requests

url = "https://api.shipbob.com/2026-01/inventory-level/locations"

querystring = {"LocationType":"string","SearchBy":"string","InventoryIds":"[0]","IsActive":"true","IsDigital":"true","SortBy":"string"}

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/inventory-level/locations?LocationType=string&SearchBy=string&InventoryIds=%5B0%5D&IsActive=true&IsDigital=true&SortBy=string';
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/inventory-level/locations?LocationType=string&SearchBy=string&InventoryIds=%5B0%5D&IsActive=true&IsDigital=true&SortBy=string"

	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/inventory-level/locations?LocationType=string&SearchBy=string&InventoryIds=%5B0%5D&IsActive=true&IsDigital=true&SortBy=string")

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/inventory-level/locations?LocationType=string&SearchBy=string&InventoryIds=%5B0%5D&IsActive=true&IsDigital=true&SortBy=string")
  .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/inventory-level/locations?LocationType=string&SearchBy=string&InventoryIds=%5B0%5D&IsActive=true&IsDigital=true&SortBy=string', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp default
using RestSharp;

var client = new RestClient("https://api.shipbob.com/2026-01/inventory-level/locations?LocationType=string&SearchBy=string&InventoryIds=%5B0%5D&IsActive=true&IsDigital=true&SortBy=string");
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/inventory-level/locations?LocationType=string&SearchBy=string&InventoryIds=%5B0%5D&IsActive=true&IsDigital=true&SortBy=string")! 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()
```