Inventory
List inventory levels
Lists the company’s inventory levels (stock per variant per warehouse), filtered by variant, warehouse, sales channel, product tags, quantity ranges or search text. Pass at least one of variant_ids or warehouse_ids, otherwise the request returns 400. Results are sorted by product title, then variant title, and are page-number paginated with page and page_size (default 10). Requires a company admin token with the inventory.view permission.
GET
/
api
/
inventory_levels
List inventory levels
curl --request GET \
--url https://api.fluid.app/api/inventory_levels \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/inventory_levels"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/inventory_levels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/inventory_levels",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/inventory_levels"
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(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/inventory_levels")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/inventory_levels")
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{
"inventory_levels": [
{
"id": 48213,
"committed": 12,
"available": 240,
"on_hand": 256,
"unavailable": 4,
"adjustments": null,
"unavailable_item_counts_by_category": null,
"variant": {
"id": 70421,
"product_id": 31877,
"sku": "DM-20LB-CASE",
"title": "Case (10 reams)",
"track_quantity": true,
"keep_selling": false
},
"product": {
"image": "https://cdn.fluid.app/dunder-mifflin/products/20lb-copy-paper.jpg",
"title": "Dunder Mifflin 20lb Copy Paper"
}
},
{
"id": 48214,
"committed": 3,
"available": 58,
"on_hand": 61,
"unavailable": 0,
"adjustments": null,
"unavailable_item_counts_by_category": null,
"variant": {
"id": 70455,
"product_id": 31902,
"sku": "DM-MUG-SCR",
"title": "Default",
"track_quantity": true,
"keep_selling": true
},
"product": {
"image": "https://cdn.fluid.app/dunder-mifflin/products/scranton-branch-mug.jpg",
"title": "Scranton Branch Mug"
}
}
],
"meta": {
"request_id": "5f0c2d9e-8b1a-4c3e-9d7f-2a6b8e4c1f03",
"timestamp": "2026-09-14T15:32:08Z",
"total_count": 2,
"total_pages": 1,
"current_page": 1,
"page_size": 10
}
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"blocked_date": "2026-11-30",
"blocked_day": 30,
"allowed_date": "2026-11-28",
"scheduled_date": "2026-12-10",
"last_bill_date": "2026-11-10",
"requested_date": "2026-11-30",
"payment_uuid": "<string>",
"error_details": [
{
"code": "<string>",
"field": "<string>",
"payment": "not_attempted",
"message": "<string>"
}
],
"coded_recovery": true
}
}Query Parameters
⌘I
List inventory levels
curl --request GET \
--url https://api.fluid.app/api/inventory_levels \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/inventory_levels"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/inventory_levels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/inventory_levels",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/inventory_levels"
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(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/inventory_levels")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/inventory_levels")
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{
"inventory_levels": [
{
"id": 48213,
"committed": 12,
"available": 240,
"on_hand": 256,
"unavailable": 4,
"adjustments": null,
"unavailable_item_counts_by_category": null,
"variant": {
"id": 70421,
"product_id": 31877,
"sku": "DM-20LB-CASE",
"title": "Case (10 reams)",
"track_quantity": true,
"keep_selling": false
},
"product": {
"image": "https://cdn.fluid.app/dunder-mifflin/products/20lb-copy-paper.jpg",
"title": "Dunder Mifflin 20lb Copy Paper"
}
},
{
"id": 48214,
"committed": 3,
"available": 58,
"on_hand": 61,
"unavailable": 0,
"adjustments": null,
"unavailable_item_counts_by_category": null,
"variant": {
"id": 70455,
"product_id": 31902,
"sku": "DM-MUG-SCR",
"title": "Default",
"track_quantity": true,
"keep_selling": true
},
"product": {
"image": "https://cdn.fluid.app/dunder-mifflin/products/scranton-branch-mug.jpg",
"title": "Scranton Branch Mug"
}
}
],
"meta": {
"request_id": "5f0c2d9e-8b1a-4c3e-9d7f-2a6b8e4c1f03",
"timestamp": "2026-09-14T15:32:08Z",
"total_count": 2,
"total_pages": 1,
"current_page": 1,
"page_size": 10
}
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"blocked_date": "2026-11-30",
"blocked_day": 30,
"allowed_date": "2026-11-28",
"scheduled_date": "2026-12-10",
"last_bill_date": "2026-11-10",
"requested_date": "2026-11-30",
"payment_uuid": "<string>",
"error_details": [
{
"code": "<string>",
"field": "<string>",
"payment": "not_attempted",
"message": "<string>"
}
],
"coded_recovery": true
}
}