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

# Get Product Profile

> Returns one `ProductProfile` by its numeric ID. Add
`fields=conditions,conditions_readable` when loading the Profile for editing.



## OpenAPI

````yaml GET /v1/inventory/product-profiles/{id}
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/product-profiles/{id}:
    get:
      tags:
        - ProductProfiles
      summary: Get Product Profile
      description: >-
        Returns one `ProductProfile` by its numeric ID. Add

        `fields=conditions,conditions_readable` when loading the Profile for
        editing.
      operationId: getProductProfile
      parameters:
        - name: id
          in: path
          required: true
          description: Product Profile ID.
          schema:
            type: integer
            format: int32
            minimum: 1
            example: 26
        - $ref: '#/components/parameters/Inventory_API_v1_product-profile-fields'
      responses:
        '200':
          description: The requested Product Profile.
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/Inventory_API_v1_ProductProfile'
        '400':
          $ref: >-
            #/components/responses/Inventory_API_v1_400-product-profile-bad-request
        '404':
          $ref: '#/components/responses/Inventory_API_v1_404-not-found'
        '500':
          $ref: '#/components/responses/Inventory_API_v1_500-internal-server-error'
components:
  parameters:
    Inventory_API_v1_product-profile-fields:
      name: fields
      in: query
      required: false
      description: >-
        Select fields of the `ProductProfile` object. See the

        [selecting fields](/global-api/selecting-fields) page for more
        information.
      explode: false
      schema:
        $ref: '#/components/schemas/Inventory_API_v1_product-profile-fields-enum'
  schemas:
    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_product-profile-fields-enum:
      title: ProductProfile
      description: >-
        Specify fields of the `ProductProfile` object to include in the
        response.
      type: array
      items:
        type: string
        enum:
          - all
          - name
          - code
          - conditions
          - conditions_readable
          - matched_count
          - classification
          - created_at
          - updated_at
    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_BadRequest:
      type: object
      properties:
        errors:
          type: array
          minItems: 1
          items:
            type: object
            properties:
              type:
                type: string
                description: Machine-readable request error category.
                enum:
                  - parser
                  - parameters
                  - openapi
              message:
                type: string
                description: Human-readable request error summary.
              details:
                type: array
                items:
                  $ref: '#/components/schemas/Inventory_API_v1_Detail'
            additionalProperties: false
      additionalProperties: false
    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_Detail:
      type: object
      properties:
        key:
          type: string
          description: Request field or dependency represented by the detail.
        message:
          type: string
          description: Human-readable detail value.
      required:
        - key
        - message
      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-product-profile-bad-request:
      description: The Product Profile request was invalid and must be corrected.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Inventory_API_v1_BadRequest'
          example:
            errors:
              - type: parameters
                message: The supplied parameters are invalid.
    Inventory_API_v1_404-not-found:
      description: >-
        The requested resource was not found. It may have been deleted, it may
        have never existed, or you may not have permission to view it.
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  type: object
                  properties:
                    type:
                      type: string
                      description: The error type code.
                      enum:
                        - not_found
                    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: not_found
                message: The server could not find the requested resource.
    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.

````