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

# Update Location Profile

> Updates the Location Profile identified by the `id` and `profile_id` path parameters. Only
the properties present in the body are applied.

Omitting `match` keeps the saved definition; send `match: []` to mean "every non-temporary
location in the warehouse" explicitly.

Returns `202 Accepted` when the request started a new materialization, and `200 OK` when
the definition was unchanged and a published revision is already serving the profile. An
unchanged definition submitted while a build is still in flight also returns `202`, because
the submitted definition has not published yet. During a replacement, `status` may remain
`ready` because the previous revision still serves consumers. Poll `pending_revision` instead:
successful publication is complete when it becomes `null`, while a failed replacement remains
present with a `failed` status.



## OpenAPI

````yaml PUT /v1/inventory/warehouses/{id}/location-profiles/{profile_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/warehouses/{id}/location-profiles/{profile_id}:
    put:
      tags:
        - LocationProfiles
      summary: Update Location Profile
      description: >-
        Updates the Location Profile identified by the `id` and `profile_id`
        path parameters. Only

        the properties present in the body are applied.


        Omitting `match` keeps the saved definition; send `match: []` to mean
        "every non-temporary

        location in the warehouse" explicitly.


        Returns `202 Accepted` when the request started a new materialization,
        and `200 OK` when

        the definition was unchanged and a published revision is already serving
        the profile. An

        unchanged definition submitted while a build is still in flight also
        returns `202`, because

        the submitted definition has not published yet. During a replacement,
        `status` may remain

        `ready` because the previous revision still serves consumers. Poll
        `pending_revision` instead:

        successful publication is complete when it becomes `null`, while a
        failed replacement remains

        present with a `failed` status.
      operationId: updateLocationProfile
      parameters:
        - name: id
          in: path
          schema:
            type: integer
            format: int32
          required: true
          description: The `id` of the referenced `Warehouse`.
        - name: profile_id
          in: path
          schema:
            type: integer
            format: int32
          required: true
          description: The `id` of the referenced `LocationProfile`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Inventory_API_v1_LocationProfileUpdate'
      responses:
        '200':
          $ref: '#/components/responses/Inventory_API_v1_200-ok-no-body'
        '202':
          $ref: '#/components/responses/Inventory_API_v1_202-accepted-no-body'
        '400':
          $ref: '#/components/responses/Inventory_API_v1_400-bad-request'
        '404':
          $ref: '#/components/responses/Inventory_API_v1_404-not-found'
        '422':
          $ref: '#/components/responses/Inventory_API_v1_422-unprocessable'
        '500':
          $ref: '#/components/responses/Inventory_API_v1_500-internal-server-error'
components:
  schemas:
    Inventory_API_v1_LocationProfileUpdate:
      title: LocationProfileUpdate
      type: object
      description: >-
        The body of a Location Profile update request. Every property is
        optional and only the ones

        present are applied.


        Omitting `match` keeps the saved definition — it never clears it to the
        all-locations one.

        Send `match: []` to mean "every non-temporary location in the warehouse"
        explicitly. A

        profile that has no saved definition at all (a legacy record) must be
        sent a `match`.
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 255
          example: Rack Pick Face
          description: The profile name, which must be unique within the warehouse.
        description:
          type: string
          nullable: true
          maxLength: 16000
          example: >-
            Pickable shelf locations on rack aisles, excluding ground-level
            overflow.
          description: >-
            An optional explanation of the locations represented by this
            profile. Send `null` to clear it.
        match:
          type: array
          maxItems: 64
          description: >-
            Replaces the ordered clauses defining membership. Sending a
            definition that differs from

            the saved one starts a new materialization. A definition accepts at
            most 64 clauses,

            250 values per clause, 1,000 values across all clauses, and 512 KiB
            of JSON.
          items:
            $ref: >-
              #/components/schemas/Inventory_API_v1_LocationProfileMatchClauseInput
          example:
            - field: location_label
              operator: starts_with
              values:
                - RK
            - field: slot_type
              operator: is_one_of
              values:
                - 4
            - cel: is_pickable
      additionalProperties: false
    Inventory_API_v1_LocationProfileMatchClauseInput:
      title: LocationProfileMatchClauseInput
      type: object
      description: >-
        One clause of a Location Profile definition, as submitted. Clauses are
        ANDed and evaluated

        in the order given, so a location joins the profile only when every
        clause matches it.


        A clause carries its operands in exactly one channel: `values` for the
        typed operators and

        `cel` for `script`. The unused channel may be omitted or sent as `null`,
        so a clause read

        back from this API can be submitted again unchanged.


        **Shorthand:** a clause that supplies only `cel` is taken as a script
        clause — `field` and

        `operator` default to `script` and `returns_true`, their only possible
        values there. The

        response always spells them out, so what you read back is always
        writable.
      properties:
        field:
          type: string
          enum:
            - zone
            - rack
            - rack_type
            - location_label
            - slot_type
            - location_tag
            - script
          example: location_label
          description: >-
            The location property the clause tests. May be omitted only when the
            clause supplies

            `cel` alone, in which case it defaults to `script`.
        operator:
          type: string
          enum:
            - is_one_of
            - is_not_one_of
            - starts_with
            - not_starts_with
            - contains
            - not_contains
            - ends_with
            - not_ends_with
            - matches
            - not_matches
            - returns_true
          example: starts_with
          description: >-
            The comparison applied to the field. Only the operators the field
            actually offers are

            accepted:
              - entity fields (`zone`, `rack`, `rack_type`, `slot_type`, `location_tag`) take
                `is_one_of` and `is_not_one_of`.
              - `location_label` takes `starts_with`, `contains`, `ends_with`, `matches` and their
                `not_` counterparts. It does **not** accept `is_one_of`.
              - `script` takes `returns_true`.
        values:
          type: array
          nullable: true
          maxItems: 250
          description: >-
            The operands, omitted or `null` for a `script` clause. Entity fields
            accept either a

            bare integer id or the `{type, id}` reference the response returns;
            a reference whose

            `type` does not match the field is rejected. `location_label` takes
            a single string

            needle, or a regular expression for the `matches` operators. A
            clause accepts at most

            250 values, and a text or regular-expression operand cannot exceed 4
            KiB of UTF-8 data.
          example:
            - RK
          items:
            oneOf:
              - type: integer
                description: The `id` of the referenced entity.
              - type: string
                description: A `location_label` needle or regular expression.
              - $ref: '#/components/schemas/Inventory_API_v1_RackRef'
              - $ref: '#/components/schemas/Inventory_API_v1_RackTypeRef'
              - $ref: '#/components/schemas/Inventory_API_v1_SlotTypeRef'
              - $ref: '#/components/schemas/Inventory_API_v1_LocationTagRef'
        cel:
          type: string
          nullable: true
          example: is_pickable
          description: >-
            The CEL expression evaluated for a `script` clause; omitted or
            `null` for every other

            clause. The expression must return a boolean and is validated
            against the location

            context before the profile is saved. Its UTF-8 representation cannot
            exceed 4 KiB.
      additionalProperties: false
    Inventory_API_v1_RackRef:
      title: RackRef
      type: object
      description: >-
        A `Rack` is a grouping of locations in a warehouse implying a very close
        proximity.
      properties:
        type:
          type: string
          enum:
            - Rack
          description: This property describes the type of object in the response body.
        id:
          type: integer
          description: >-
            The internal `id` property used as a path parameter in a resource
            lookup.
      required:
        - type
        - id
      nullable: true
      additionalProperties: false
    Inventory_API_v1_RackTypeRef:
      title: RackTypeRef
      type: object
      description: >-
        A `RackType` classifies racks by their physical characteristics (e.g.
        "Wide Aisle", "Narrow Aisle").
      properties:
        type:
          type: string
          enum:
            - RackType
          description: This property describes the type of object in the response body.
        id:
          type: integer
          description: >-
            The internal `id` property used as a path parameter in a resource
            lookup.
      required:
        - type
        - id
      nullable: true
      additionalProperties: false
    Inventory_API_v1_SlotTypeRef:
      title: SlotTypeRef
      type: object
      description: A reference to a `SlotType` object.
      properties:
        type:
          type: string
          enum:
            - SlotType
          description: This property describes the type of object in the response body.
        id:
          type: integer
          example: 54
          description: >-
            The internal `id` property used as a path parameter in a resource
            lookup.
      required:
        - type
        - id
      nullable: true
      additionalProperties: false
    Inventory_API_v1_LocationTagRef:
      title: LocationTagRef
      type: object
      description: A reference to a `LocationTag` object.
      properties:
        type:
          type: string
          enum:
            - LocationTag
          description: This property describes the type of object in the response body.
        id:
          type: integer
          description: >-
            The internal `id` property used as a path parameter in a resource
            lookup.
          example: 4
      required:
        - type
        - id
      additionalProperties: false
  responses:
    Inventory_API_v1_200-ok-no-body:
      description: OK - The operation completed successfully and there is no response body.
    Inventory_API_v1_202-accepted-no-body:
      description: >-
        Accepted - The request was accepted and membership is being
        materialized. There is no

        response body. For a new profile, poll until `status` is `ready`. For an
        update or rebuild,

        successful publication is complete when `pending_revision` becomes
        `null`; a failed

        replacement remains present there with a `failed` status.
    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_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_422-unprocessable:
      description: >-
        There was an error processing 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:
                        - application
                        - unable_to_process
                    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: unable_to_process
                message: There was an error processing the request.
    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.

````