openapi: 3.1.0
info:
title: API Reference subpackage_billing subpackage_inventory API
version: 1.0.0
servers:
- url: https://api.shipbob.com
- url: https://sandbox-api.shipbob.com
tags:
- name: subpackage_inventory
paths:
/2026-01/inventory-level:
get:
operationId: get-all-inventory-levels
summary: Get All Inventory Levels
description: Retrieves current inventory levels across all locations. Returns available, on-hand, committed, and other quantity types. Supports filtering by inventory IDs and product attributes.
tags:
- subpackage_inventory
parameters:
- 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 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 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., '-total_on_hand_quantity' sorts by quantity 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.InventoryQuantityResponsePagedResponse'
'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
/2026-01/inventory-level/{inventoryId}:
get:
operationId: get-inventory-levels
summary: Get Inventory Levels
description: Retrieves the aggregated inventory levels for a specific inventory item across all locations, including available, on-hand, committed, and other quantity types.
tags:
- subpackage_inventory
parameters:
- name: inventoryId
in: path
description: ''
required: true
schema:
type: string
format: int32
- 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.InventoryQuantityResponse'
'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'
'404':
description: Not Found
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
/2026-01/inventory/{inventoryId}:
get:
operationId: get-inventory
summary: Get Inventory
description: Retrieves detailed information about a specific inventory item by its ID, including product details, variant information, and associated metadata.
tags:
- subpackage_inventory
parameters:
- name: inventoryId
in: path
description: ''
required: true
schema:
type: string
format: int32
- 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.InventoryResponse'
'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'
'404':
description: Not Found
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
/2026-01/inventory:
get:
operationId: get-all-inventories
summary: Get All Inventories
description: Retrieves a paginated list of all inventory items. Supports filtering by active status, tags, and various product attributes. Use query parameters to search and filter results.
tags:
- subpackage_inventory
parameters:
- 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: FilterOperations
in: query
description: Advanced filtering operations. Apply multiple key-value filters to refine inventory results. Each filter operation contains a 'key' (field name) and 'rawValue' (filter value) to match.
required: false
schema:
type: string
- name: InventoryIds
in: query
description: Comma-separated list of inventory IDs to filter results. Use this to retrieve information for specific inventory items only.
required: false
schema:
type: string
- name: IsActive
in: query
description: Filter by active status. True returns only active inventory items, False returns only inactive items. Omit to return both.
required: false
schema:
type: boolean
- name: IsDigital
in: query
description: Filter by digital product status. True returns only digital products (no physical fulfillment), False returns only physical products. Omit to return both.
required: false
schema:
type: boolean
- name: PageSize
in: query
description: Number of 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., '-name' sorts by name 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.InventoryResponsePagedResponse'
'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
/2026-01/inventory/history:query:
post:
operationId: query-inventory-history-events
summary: Query Inventory History Events
description: Fetches inventory movement events that change on-hand quantities within the ShipBob network. Returns events such as receiving/stow, order picks, adjustments, restocks, and attribute updates. Filter by inventory IDs, event category, date range, and facility. Supports cursor-based pagination for large result sets.
tags:
- subpackage_inventory
parameters:
- name: cursor
in: query
description: ''
required: false
schema:
type: string
format: int32
- 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/FulfillmentCenterInventoryService.InventoryHistoryResponse'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FulfillmentCenterInventoryService.MerchantHistoryRequest'
/2026-01/inventory-level/locations:
get:
operationId: get-all-inventory-levels-grouped-by-fulfillment-center
summary: Get All Inventory Levels Grouped By Fulfillment Center
description: Retrieves inventory levels for all inventory items grouped by fulfillment center location. Supports filtering by location type, location ID, and various product attributes.
tags:
- subpackage_inventory
parameters:
- name: LocationType
in: query
description: 'Filter by location type. Valid values: ''hub'', ''spoke'', or ''lts''. Defaults to all locations if not specified.'
required: false
schema:
type: string
- name: LocationId
in: query
description: Filter by specific fulfillment center location ID. Use this to retrieve inventory levels for a particular fulfillment 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 location-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 location-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., '-name' sorts by name 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.InventoryQuantityFcResponsePagedResponse'
'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
/2026-01/inventory-level/{inventoryId}/locations:
get:
operationId: get-inventory-levels-grouped-by-fulfillment-center
summary: Get Inventory Levels Grouped By Fulfillment Center
description: Retrieves inventory levels for a specific inventory item broken down by fulfillment center location. Shows quantity breakdowns for each location where the inventory is stored.
tags:
- subpackage_inventory
parameters:
- name: inventoryId
in: path
description: ''
required: true
schema:
type: string
format: int32
- 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.InventoryQuantityFcResponse'
'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'
'404':
description: Not Found
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
/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
/2026-01/inventory-level/{inventoryId}/lots:
get:
operationId: get-inventory-levels-grouped-by-lot
summary: Get Inventory Levels Grouped By Lot
description: Retrieves inventory levels for a specific inventory item broken down by lot number. Useful for tracking inventory by manufacturing lot, expiration date, or batch information.
tags:
- subpackage_inventory
parameters:
- name: inventoryId
in: path
description: ''
required: true
schema:
type: string
format: int32
- 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.InventoryQuantityLotResponse'
'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'
'404':
description: Not Found
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
components:
schemas:
Inventory.InventoryQuantityResponsePagedResponse:
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.InventoryQuantityResponse'
description: Array of 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.InventoryQuantityResponsePagedResponse
Inventory.WeightResponse:
type: object
properties:
unit:
type:
- string
- 'null'
description: Unit of measurement for weight (e.g., pounds, kilograms)
value:
type: number
format: double
description: Weight value of the inventory item
title: Inventory.WeightResponse
Inventory.HazmatResponse:
type: object
properties:
is_hazmat:
type: boolean
description: Indicates if the inventory item is classified as hazardous material
validated:
type: boolean
description: Indicates whether hazmat status has been validated and confirmed
title: Inventory.HazmatResponse
Inventory.InventoryResponsePagedResponse:
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.InventoryResponse'
description: Array of inventory 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.InventoryResponsePagedResponse
Inventory.InventoryQuantityFcResponse:
type: object
properties:
inventory_id:
type: integer
description: Unique identifier for the inventory item
locations:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/Inventory.FulfillmentCenterResponse'
description: List of fulfillment centers 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.InventoryQuantityFcResponse
Inventory.InventoryQuantityFcResponsePagedResponse:
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.InventoryQuantityFcResponse'
description: Array of location-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.InventoryQuantityFcResponsePagedResponse
FulfillmentCenterInventoryService.InventoryHistoryDetails:
type: object
properties:
committed_quantity_change:
type: integer
description: The change in committed (allocated) quantity.
expiration_date:
type:
- string
- 'null'
format: date-time
description: The expiration date for this inventory lot, if applicable.
facility_id:
type: integer
description: The fulfillment center ID where this quantity change occurred.
inventory_status:
type:
- string
- 'null'
description: The current status of the inventory.
location_id:
type: integer
description: The physical shelf/bin location ID within the fulfillment center.
lot_number:
type:
- string
- 'null'
description: The lot number associated with this inventory, if applicable.
operational_stage:
$ref: '#/components/schemas/FulfillmentCenterInventoryService.YukiOperationalStageEnumTypeResponse'
description: The operational stage of the inventory (e.g., available, reserved, in-transit).
pack_description_id:
$ref: '#/components/schemas/FulfillmentCenterInventoryService.Ulid'
description: Identifier for the packaging configuration of this inventory.
quantity_change:
type: integer
description: The change in on-hand quantity. Positive for increments, negative for decrements.
sku:
type:
- string
- 'null'
description: The merchant SKU for this inventory item.
yuki_id:
$ref: '#/components/schemas/FulfillmentCenterInventoryService.Ulid'
description: Unique identifier for the physical inventory unit (Yuki) in ShipBob's system.
title: FulfillmentCenterInventoryService.InventoryHistoryDetails
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
Inventory.InventoryQuantityLotResponse:
type: object
properties:
inventory_id:
type: integer
description: Unique identifier for the inventory item
lots:
type:
- array
- 'nu
# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/shipbob/refs/heads/main/openapi/shipbob-subpackage-inventory-api-openapi.yml