> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shipstream.io/llms.txt
> Use this file to discover all available pages before exploring further.

# List Handling Classes

> Returns Handling Classes and their current asynchronous classification state. Request
`fields=conditions,conditions_readable` when a client needs the canonical condition
definition for editing.



## OpenAPI

````yaml GET /v1/inventory/handling-classes
openapi: 3.0.3
info:
  title: ShipStream
  version: '1.0'
  license:
    name: Commercial (Copyright 2025 - All Rights Reserved)
    url: https://shipstream.io
  contact:
    name: ShipStream Support
    email: help@shipstream.io
  termsOfService: https://shipstream.io/legal/api-terms/
servers:
  - url: https://{base_url_domain}/api/global
    description: Direct API Url
    variables:
      base_url_domain:
        default: example.shipstream.app
        description: >-
          The fully qualified domain name for your ShipStream WMS instance. This
          is either a custom domain, or a subdomain of shipstream.app,

          and will be the same as the domain name for the page which you use to
          login to ShipStream WMS.
security:
  - ShipStream_bearerAuth: []
tags:
  - name: Warehouses
    x-displayName: Warehouses
  - name: Products
    x-displayName: Products
  - name: ProductProfiles
    x-displayName: ProductProfiles
  - name: HandlingClasses
    x-displayName: HandlingClasses
  - name: Locations
    x-displayName: Locations
  - name: LocationTags
    x-displayName: LocationTags
  - name: SlotTypes
    x-displayName: SlotTypes
  - name: Levels
    x-displayName: Levels
  - name: HoldReasons
    x-displayName: HoldReasons
  - name: Holds
    x-displayName: Holds
  - name: Replenishment
    x-displayName: Replenishment
  - name: LocationProfiles
    x-displayName: LocationProfiles
  - name: SlottingRules
    x-displayName: SlottingRules
  - name: Deliveries
    description: Every thing about a Delivery Receiving
    x-displayName: Deliveries
  - name: Shipments
    x-displayName: Shipments
  - name: Orders
    x-displayName: Orders
  - name: Retailers
    x-displayName: Retailers
  - name: Users
    x-displayName: Users
  - name: User Roles
    x-displayName: User Roles
  - name: Merchants
    x-displayName: Merchants
  - name: Healthcheck
    x-displayName: Healthcheck
paths:
  /v1/inventory/handling-classes:
    get:
      tags:
        - HandlingClasses
      summary: List Handling Classes
      description: >-
        Returns Handling Classes and their current asynchronous classification
        state. Request

        `fields=conditions,conditions_readable` when a client needs the
        canonical condition

        definition for editing.
      operationId: listHandlingClasses
      parameters:
        - $ref: '#/components/parameters/Inventory_API_v1_handling-class-fields'
        - $ref: >-
            #/components/parameters/Inventory_API_v1_fields-handling-class-warehouses
        - $ref: >-
            #/components/parameters/Inventory_API_v1_fields-handling-class-referenced-product-profiles
        - $ref: '#/components/parameters/Inventory_API_v1_handling-class-filter'
        - name: sort
          in: query
          required: false
          schema:
            type: string
          description: |-
            The default sort is ascending by `id`. Available fields are:
              - `id`

            Cursor paging supports only `id` or `-id` sorting.
        - $ref: '#/components/parameters/Inventory_API_v1_count'
        - $ref: '#/components/parameters/Inventory_API_v1_cursor_end'
        - $ref: '#/components/parameters/Inventory_API_v1_cursor_start'
        - name: limit
          in: query
          required: false
          description: Maximum number of Handling Classes to return.
          schema:
            type: integer
            minimum: 1
            maximum: 250
            default: 100
      responses:
        '200':
          description: A cursor-paginated collection of Handling Classes.
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/Inventory_API_v1_HandlingClass'
                  included:
                    $ref: '#/components/schemas/Inventory_API_v1_handling-classes'
                  has_more:
                    $ref: '#/components/schemas/Inventory_API_v1_has_more'
                  next:
                    $ref: '#/components/schemas/Inventory_API_v1_next'
                  previous:
                    $ref: '#/components/schemas/Inventory_API_v1_previous'
                  meta:
                    $ref: '#/components/schemas/Inventory_API_v1_meta'
              example:
                collection:
                  - type: HandlingClass
                    id: 14
                    name: Heavy Bulky
                    code: heavy_bulky
                    sort_order: 20
                    warehouses:
                      - type: Warehouse
                        id: 1
                    referenced_product_profiles:
                      - type: ProductProfile
                        id: 31
                    matched_count: 318
                    classification:
                      status: up_to_date
                      indexed_at: '2026-08-04T09:15:00Z'
                    created_at: '2026-07-15T14:30:00Z'
                    updated_at: '2026-08-04T09:15:00Z'
                included:
                  Warehouse:
                    - type: Warehouse
                      id: 1
                      name: Newark NJ
                  ProductProfile:
                    - type: ProductProfile
                      id: 31
                      name: Oversized Products
                      code: oversized_products
                has_more: false
                next: null
                previous: null
                meta:
                  processing_time: 0.0068
                  cursor_start: null
                  cursor_end: null
        '400':
          $ref: '#/components/responses/Inventory_API_v1_400-bad-request'
        '500':
          $ref: '#/components/responses/Inventory_API_v1_500-internal-server-error'
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request GET \
              --url 'https://example.shipstream.app/api/global/v1/inventory/handling-classes?fields:warehouses=name&fields:referenced_product_profiles=name,code&limit=100' \
              --header 'Authorization: Bearer <token>'
        - lang: python
          label: Python
          source: >-
            import requests


            url =
            "https://example.shipstream.app/api/global/v1/inventory/handling-classes?fields:warehouses=name&fields:referenced_product_profiles=name,code&limit=100"

            headers = {"Authorization": "Bearer <token>"}


            response = requests.get(url, headers=headers)

            print(response.text)
        - lang: javascript
          label: JavaScript
          source: >-
            const options = {method: 'GET', headers: {Authorization: 'Bearer
            <token>'}};


            fetch('https://example.shipstream.app/api/global/v1/inventory/handling-classes?fields:warehouses=name&fields:referenced_product_profiles=name,code&limit=100',
            options)
              .then(response => response.json())
              .then(response => console.log(response));
        - lang: php
          label: PHP
          source: >-
            <?php


            $curl = curl_init();

            curl_setopt($curl, CURLOPT_URL,
            'https://example.shipstream.app/api/global/v1/inventory/handling-classes?fields:warehouses=name&fields:referenced_product_profiles=name,code&limit=100');

            curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

            curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: Bearer
            <token>']);


            $response = curl_exec($curl);

            curl_close($curl);

            echo $response;
        - lang: go
          label: Go
          source: |-
            package main

            import (
                "fmt"
                "io"
                "net/http"
            )

            func main() {
                req, _ := http.NewRequest("GET", "https://example.shipstream.app/api/global/v1/inventory/handling-classes?fields:warehouses=name&fields:referenced_product_profiles=name,code&limit=100", nil)
                req.Header.Add("Authorization", "Bearer <token>")
                response, _ := http.DefaultClient.Do(req)
                defer response.Body.Close()
                body, _ := io.ReadAll(response.Body)
                fmt.Println(string(body))
            }
        - lang: java
          label: Java
          source: >-
            HttpResponse<String> response =
            Unirest.get("https://example.shipstream.app/api/global/v1/inventory/handling-classes?fields:warehouses=name&fields:referenced_product_profiles=name,code&limit=100")
              .header("Authorization", "Bearer <token>")
              .asString();
        - lang: ruby
          label: Ruby
          source: >-
            require 'uri'

            require 'net/http'


            url =
            URI('https://example.shipstream.app/api/global/v1/inventory/handling-classes?fields:warehouses=name&fields:referenced_product_profiles=name,code&limit=100')

            request = Net::HTTP::Get.new(url)

            request['Authorization'] = 'Bearer <token>'


            response = Net::HTTP.start(url.hostname, url.port, use_ssl: true) do
            |http|
              http.request(request)
            end

            puts response.read_body
components:
  parameters:
    Inventory_API_v1_handling-class-fields:
      name: fields
      in: query
      required: false
      description: >-
        Select fields of the `HandlingClass` object. See the

        [selecting fields](/global-api/selecting-fields) page for more
        information.
      explode: false
      schema:
        $ref: '#/components/schemas/Inventory_API_v1_handling-class-fields-enum'
    Inventory_API_v1_fields-handling-class-warehouses:
      name: fields:warehouses
      in: query
      required: false
      description: >-
        Specify fields of the referenced `Warehouse` objects to include under
        `included.Warehouse`. `type` and `id` are always returned. See the
        [selecting fields](/global-api/selecting-fields) page for more
        information.
      explode: false
      schema:
        $ref: '#/components/schemas/Inventory_API_v1_warehouse-fields-enum'
    Inventory_API_v1_fields-handling-class-referenced-product-profiles:
      name: fields:referenced_product_profiles
      in: query
      required: false
      description: >-
        Specify fields of the referenced `ProductProfile` objects to include
        under `included.ProductProfile`. `type` and `id` are always returned.
        See the [selecting fields](/global-api/selecting-fields) page for more
        information.
      explode: false
      schema:
        $ref: >-
          #/components/schemas/Inventory_API_v1_product-profile-relationship-fields-enum
    Inventory_API_v1_handling-class-filter:
      name: filter
      in: query
      description: >-
        Using the [filtering syntax](/global-api/filtering-syntax), you may
        filter the results using:
          - `id`
          - `code`
          - `name`
          - `warehouse_id`
          - `sort_order`

        `warehouse_id` supports `eq`, `in`, `neq`, and `nin`. Negative filters
        exclude a Handling

        Class if it is assigned to any of the specified Warehouses.
      style: form
      explode: true
      allowReserved: true
      required: false
      schema:
        type: array
        items:
          type: string
      examples:
        By code:
          summary: Find the Handling Class with a stable code.
          value:
            - code:heavy_bulky
        By Warehouse:
          summary: Find Handling Classes assigned to Warehouse 1.
          value:
            - warehouse_id:1
        Exclude Warehouses:
          summary: Exclude classes assigned to Warehouses 2 or 3.
          value:
            - warehouse_id{nin:[2,3]}
    Inventory_API_v1_count:
      name: count
      in: query
      description: >-
        If specified as `1`, the `meta.count` property of the response will be
        present and populated with the total count of items

        matching the query before any paging is applied. This is not included by
        default to improve performance in some edge

        cases and is not required to perform paging using the `next` property of
        the response.

        See [paging parameters](/global-api/paging-parameters) for more
        information.
      style: form
      schema:
        type: integer
        minimum: 0
        maximum: 1
    Inventory_API_v1_cursor_end:
      name: cursor_end
      in: query
      description: >-
        A cursor for use in pagination which defines the last `id` of the next
        page of results, non-inclusive.

        See [paging parameters](/global-api/paging-parameters) for more
        information on paging.
      schema:
        type: integer
      style: form
    Inventory_API_v1_cursor_start:
      name: cursor_start
      in: query
      description: >-
        A cursor for use in pagination which defines the starting `id` of the
        next page of results.

        See [paging parameters](/global-api/paging-parameters) for more
        information on paging.
      schema:
        type: integer
      style: form
  schemas:
    Inventory_API_v1_HandlingClass:
      title: HandlingClass
      type: object
      description: >-
        A Warehouse-scoped Product classification used by Slotting and
        Replenishment. Classification

        is asynchronous: after conditions or Warehouse assignments change, poll
        the resource until

        `classification.status` is `up_to_date`. Product changes flow through a
        separate asynchronous

        changelog and may not appear immediately in materialized classification.
      properties:
        type:
          type: string
          enum:
            - HandlingClass
          readOnly: true
        id:
          type: integer
          format: int32
          minimum: 1
          readOnly: true
          description: Handling Class ID.
        name:
          type: string
          minLength: 1
          maxLength: 255
          description: Human-readable Handling Class name.
          example: Heavy Bulky
        code:
          type: string
          maxLength: 64
          pattern: ^[A-Za-z0-9_]+$
          description: Stable unique code.
          example: heavy_bulky
        sort_order:
          type: integer
          minimum: 0
          maximum: 1000000
          description: Evaluation precedence; lower values are evaluated first.
          example: 20
        warehouses:
          type: array
          description: >-
            Warehouses where the Handling Class is evaluated. Deleting a
            Warehouse detaches it immediately, so a class scoped only to a
            deleted Warehouse reads `warehouses: []` and stops classifying until
            it is assigned again; updates must always supply at least one
            Warehouse.
          items:
            $ref: '#/components/schemas/Inventory_API_v1_WarehouseRef'
        conditions:
          allOf:
            - $ref: '#/components/schemas/Inventory_API_v1_ConditionTree'
          description: >-
            Canonical Product matching conditions. Request with
            `fields=conditions` when editing.\
              `Optional Field`\
        referenced_product_profiles:
          type: array
          readOnly: true
          description: >-
            Product Profiles referenced by the canonical conditions — the
            Profiles this rule depends on, not any Product's memberships.
          items:
            $ref: '#/components/schemas/Inventory_API_v1_ProductProfileRef'
        conditions_readable:
          type: string
          readOnly: true
          description: >-
            Compiled CEL expression corresponding to the canonical conditions.
            Request with

            `fields=conditions_readable` for diagnostics or previews.\
              `Optional Field`\
        matched_count:
          type: integer
          minimum: 0
          readOnly: true
          description: Products in the most recently completed materialized classification.
        classification:
          type: object
          readOnly: true
          properties:
            status:
              type: string
              description: Current state of asynchronous classification.
              enum:
                - up_to_date
                - processing
                - queued
                - failed
                - out_of_date
                - not_indexed
            indexed_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Completion time of the most recent successful classification, if
                any.
          required:
            - status
            - indexed_at
          additionalProperties: false
        created_at:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: Time when the Handling Class was created.
        updated_at:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: Time when the Handling Class was last updated.
      required:
        - type
        - id
      additionalProperties: false
      example:
        type: HandlingClass
        id: 14
        name: Heavy Bulky
        code: heavy_bulky
        sort_order: 20
        warehouses:
          - type: Warehouse
            id: 1
        referenced_product_profiles:
          - type: ProductProfile
            id: 31
        matched_count: 318
        classification:
          status: up_to_date
          indexed_at: '2026-08-04T09:15:00Z'
        created_at: '2026-07-15T14:30:00Z'
        updated_at: '2026-08-04T09:15:00Z'
    Inventory_API_v1_handling-classes:
      type: object
      description: >-
        Related Warehouses and Product Profiles requested through nested
        `fields:*` parameters.
      example: {}
      properties:
        Warehouse:
          type: array
          items:
            $ref: '#/components/schemas/Inventory_API_v1_Warehouse'
        ProductProfile:
          type: array
          items:
            $ref: '#/components/schemas/Inventory_API_v1_ProductProfile'
      additionalProperties: false
    Inventory_API_v1_has_more:
      type: boolean
      description: |-
        True if the collection has more items on the next page.
        Use the "next" link to retrieve the next page of results.
    Inventory_API_v1_next:
      type: string
      nullable: true
      description: The resource path for the next page of results if any are expected.
    Inventory_API_v1_previous:
      type: string
      nullable: true
      description: The resource path for the previous page of results if any are expected.
    Inventory_API_v1_meta:
      type: object
      properties:
        processing_time:
          type: number
          description: Total time in which request is processed and response is sent back.
          example: 0.2525252525
        cursor_start:
          type: integer
          description: >-
            A cursor for use in pagination which defines the starting `id` of
            the next page of results.

            See [paging parameters](/global-api/paging-parameters) for more
            information on paging.
          nullable: true
        cursor_end:
          type: integer
          description: >-
            A cursor for use in pagination which defines the last `id` of the
            next page of results, non-inclusive.

            See [paging parameters](/global-api/paging-parameters) for more
            information on paging.
          nullable: true
        count:
          type: integer
          description: >-
            The total number of items matching the query before applying paging
            parameters.

            This field is only present if the query parameter `count=1` is
            present in the request.
      description: Additional metadata pertaining to the response.
    Inventory_API_v1_handling-class-fields-enum:
      title: HandlingClass
      description: Specify fields of the `HandlingClass` object to include in the response.
      type: array
      items:
        type: string
        enum:
          - all
          - name
          - code
          - sort_order
          - warehouses
          - conditions
          - referenced_product_profiles
          - conditions_readable
          - matched_count
          - classification
          - created_at
          - updated_at
    Inventory_API_v1_warehouse-fields-enum:
      title: Warehouse
      description: >-
        Specify additional fields of the `Warehouse` object to be included in
        the response.
      type: array
      items:
        type: string
        enum:
          - basic
          - all
          - id
          - name
          - is_active
          - abbreviation
    Inventory_API_v1_product-profile-relationship-fields-enum:
      title: ProductProfile
      description: Specify fields of an included `ProductProfile` object.
      type: array
      items:
        type: string
        enum:
          - basic
          - all
          - name
          - code
          - conditions
          - conditions_readable
          - matched_count
          - classification
          - created_at
          - updated_at
    Inventory_API_v1_WarehouseRef:
      title: WarehouseRef
      type: object
      description: A reference to a `Warehouse` by `id`.
      properties:
        type:
          type: string
          enum:
            - Warehouse
          description: This property describes the type of object in the response body.
        id:
          type: integer
          format: int32
          description: >-
            The internal `id` property used as a path parameter in a resource
            lookup.
      required:
        - type
        - id
      nullable: true
      additionalProperties: false
    Inventory_API_v1_ConditionTree:
      oneOf:
        - type: object
          description: Canonical condition tree returned by the API.
          properties:
            or:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/Inventory_API_v1_ConditionGroup'
          required:
            - or
          additionalProperties: false
        - $ref: '#/components/schemas/Inventory_API_v1_ConditionGroup'
      description: >-
        A one-level OR-of-AND condition tree. The server accepts the `{"and":
        [...]}` shorthand

        for a single group and always returns the canonical `{"or": [{"and":
        [...]}]}` form.


        OpenAPI validates the structural envelope. ShipStream remains
        authoritative for available

        Product fields, field/operator compatibility, option values, measurement
        units, raw CEL

        validity, normalization, the limit of 64 condition rows across all
        groups, and the

        65,535-byte compiled-expression limit. Editor clients can

        load the applicable Product field catalogue from

        `GET /api/global/v1/inventory/product-profiles/condition-fields` or

        `GET /api/global/v1/inventory/handling-classes/condition-fields`.
      example:
        or:
          - and:
              - <=:
                  - var: weight
                  - value: 15
                    unit: lb
    Inventory_API_v1_ProductProfileRef:
      title: ProductProfileRef
      type: object
      description: A reference to a `ProductProfile` by `id`.
      properties:
        type:
          type: string
          enum:
            - ProductProfile
        id:
          type: integer
          format: int32
          minimum: 1
          description: Product Profile ID.
      required:
        - type
        - id
      additionalProperties: false
    Inventory_API_v1_Warehouse:
      title: Warehouse
      type: object
      description: >-
        A `Warehouse` represents a physical location from which you can store
        inventory and perform operations independently of other warehouses.
      properties:
        type:
          type: string
          enum:
            - Warehouse
          readOnly: true
          description: >-
            This is a read-only property that describes the type of object in
            the response body.
        id:
          type: integer
          format: int32
          example: 3
          readOnly: true
          description: >-
            The internal `id` property used as a path parameter in a resource
            lookup.
        name:
          type: string
          example: East Coast 1
          maxLength: 255
          description: The display name for the `Warehouse`.
        abbreviation:
          type: string
          maxLength: 10
          nullable: true
          example: EC1
          description: >-
            A short abbreviation for the `Warehouse`, up to 10 characters.
            Recommended to be fewer than 6 characters.\
              `Optional Field`
        is_active:
          type: boolean
          example: true
          description: >-
            This flag determines if the `Warehouse` is active and viable for
            fulfillment.
      required:
        - type
        - id
      additionalProperties: false
    Inventory_API_v1_ProductProfile:
      title: ProductProfile
      type: object
      description: >-
        A reusable Product classification whose conditions may match many
        Products. Classification is

        asynchronous: after a create or condition update, poll the resource
        until

        `classification.status` is `up_to_date`. This status confirms that the
        Profile's current

        conditions were classified. Product changes flow through a separate
        asynchronous changelog and

        may not appear immediately in materialized membership.
      properties:
        type:
          type: string
          enum:
            - ProductProfile
          readOnly: true
        id:
          type: integer
          format: int32
          minimum: 1
          readOnly: true
          description: Product Profile ID.
        name:
          type: string
          minLength: 1
          maxLength: 255
          description: Human-readable Product Profile name.
          example: Lightweight Parcel
        code:
          type: string
          maxLength: 64
          pattern: ^[A-Za-z0-9_]+$
          example: lightweight_parcel
          description: >-
            Stable unique code. It may be supplied on create and cannot be
            changed later.
        conditions:
          allOf:
            - $ref: '#/components/schemas/Inventory_API_v1_ConditionTree'
          description: >-
            Canonical Product matching conditions. Request with
            `fields=conditions` when editing.\
              `Optional Field`\
        conditions_readable:
          type: string
          readOnly: true
          description: >-
            Compiled CEL expression corresponding to the canonical conditions.
            Request with

            `fields=conditions_readable` for diagnostics or previews.\
              `Optional Field`\
        matched_count:
          type: integer
          minimum: 0
          readOnly: true
          description: >-
            Number of Products in the most recently completed materialized
            membership.
        classification:
          type: object
          readOnly: true
          properties:
            status:
              type: string
              description: Current state of the asynchronous Product classification.
              enum:
                - up_to_date
                - processing
                - queued
                - failed
                - out_of_date
                - not_indexed
            indexed_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Completion time of the most recent successful classification, if
                any.
          required:
            - status
            - indexed_at
          additionalProperties: false
        created_at:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: Time when the Product Profile was created.
        updated_at:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: Time when the Product Profile was last updated.
      required:
        - type
        - id
      additionalProperties: false
      example:
        type: ProductProfile
        id: 26
        name: Lightweight Parcel
        code: lightweight_parcel
        conditions:
          or:
            - and:
                - <=:
                    - var: weight
                    - value: 15
                      unit: lb
                      base_value: 15
        conditions_readable: ((present(weight) && weight <= 15.0))
        matched_count: 482
        classification:
          status: up_to_date
          indexed_at: '2026-08-04T09:15:00Z'
        created_at: '2026-07-15T14:30:00Z'
        updated_at: '2026-08-04T09:15:00Z'
    Inventory_API_v1_ConditionGroup:
      type: object
      properties:
        and:
          type: array
          minItems: 1
          maxItems: 64
          items:
            $ref: '#/components/schemas/Inventory_API_v1_ConditionRow'
      required:
        - and
      additionalProperties: false
    Inventory_API_v1_ConditionRow:
      type: object
      description: |-
        One predicate or raw CEL expression. Predicate operands are ordered as
        `[{"var": "field_code"}, value]`; expression operands are ordered as
        `[{"cel": "boolean expression"}, true]`.
      minProperties: 1
      maxProperties: 1
      properties:
        <:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        <=:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        '==':
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        '!=':
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        '>':
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        '>=':
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        contains:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        not_contains:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        matches:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        not_matches:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        in:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        not_in:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        contains_any:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        contains_none:
          $ref: '#/components/schemas/Inventory_API_v1_PredicateOperands'
        expr:
          $ref: '#/components/schemas/Inventory_API_v1_ExpressionOperands'
      additionalProperties: false
    Inventory_API_v1_PredicateOperands:
      type: array
      minItems: 2
      maxItems: 2
      items:
        oneOf:
          - $ref: '#/components/schemas/Inventory_API_v1_Variable'
          - $ref: '#/components/schemas/Inventory_API_v1_ConditionValue'
    Inventory_API_v1_ExpressionOperands:
      type: array
      description: >-
        The first item is a CEL expression object and the second item must be
        `true`.
      minItems: 2
      maxItems: 2
      items:
        oneOf:
          - type: object
            properties:
              cel:
                type: string
                minLength: 1
                description: >-
                  Boolean CEL expression evaluated against Product facts.
                  Selector fields that

                  exist only for the consuming resource (such as the Handling
                  Class Product

                  Profile selector, `product_profiles`) are rejected here
                  because the server

                  tracks their references; they may only be used through their
                  structured

                  operators.
                example: present(weight) && weight <= 15.0
            required:
              - cel
            additionalProperties: false
          - type: boolean
            enum:
              - true
    Inventory_API_v1_Variable:
      type: object
      properties:
        var:
          type: string
          minLength: 1
          description: Product condition field code.
          example: weight
      required:
        - var
      additionalProperties: false
    Inventory_API_v1_ConditionValue:
      oneOf:
        - type: string
          minLength: 1
          maxLength: 4096
        - type: number
        - type: boolean
        - type: array
          minItems: 1
          items:
            oneOf:
              - type: integer
              - type: string
        - $ref: '#/components/schemas/Inventory_API_v1_MeasurementValue'
    Inventory_API_v1_MeasurementValue:
      type: object
      description: >-
        Measurement input. Clients provide `value` and `unit`; canonical
        responses also contain the

        normalized `base_value` used by the evaluator.
      properties:
        value:
          type: number
          description: Measurement expressed in the submitted unit.
          example: 15
        unit:
          type: string
          minLength: 1
          description: Supported unit code for the condition field.
          example: lb
        base_value:
          type: number
          readOnly: true
          description: Server-normalized measurement in the field's base unit.
          example: 15
      required:
        - value
        - unit
      additionalProperties: false
  responses:
    Inventory_API_v1_400-bad-request:
      description: >-
        The request was invalid. The client must change the request. See the
        response body for more details.
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  type: object
                  properties:
                    type:
                      type: string
                      description: The error type code.
                      enum:
                        - parser
                        - parameters
                        - openapi
                    message:
                      type: string
                      description: An English sentence describing the error type.
                    details:
                      type: array
                      description: >-
                        An array of objects describing which keys are
                        responsible for the error and detailed messages
                        describing why they are not valid.
                      items:
                        type: object
                        properties:
                          key:
                            type: string
                            description: The path to the key which relates to the error.
                          message:
                            type: string
                            description: >-
                              An English sentence describing the details of the
                              error.
                        additionalProperties: false
                  additionalProperties: false
                minItems: 1
            additionalProperties: false
          example:
            errors:
              - type: parameters
                message: The supplied parameters are invalid.
    Inventory_API_v1_500-internal-server-error:
      description: >-
        Internal Server Error - Something wrong happened at server side. Contact
        server administrator for more details.
  securitySchemes:
    ShipStream_bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Generate a JWT access token through a Custom Global Integration and
        provide it with each request in the `Authorization` header prefixed with
        "Bearer" and then a single space.

````