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

# Partially updates an item. Send only the fields you want to change.

> <b>All fields are optional</b> — a field left out keeps its current value, so a body of
            `{}` is accepted and is a no-op. The response is just the item's `Id`, the same
            shape as `POST /v1/items` and `DELETE /v1/items/{itemId}` - fetch
            `GET /v1/items/{itemId}` separately to see the updated item.
            
`TypeId` can never be changed — present in the body at all, including as
            `null`, is a 400. Which fields are accepted depends on the item's current type, the
            same Product/Bundle split as on create (see `POST /v1/items`).
            

            Clearing conventions, per field: `Name`, `Number`, `UnitPrice`,
            `UnitCost` and `StatusId` are not clearable — a supplied blank/invalid value is
            a 400, and `null` or omitting the field leaves it unchanged.
            `Description`, `Sku`, `PartNumber`, `Manufacturer`, `Vendor` and
            `ExternalProductId` are free text — an empty string clears the field, `null` or
            omitting it leaves it unchanged. `CategoryId`, `SubcategoryId`, `ClientId`,
            `LocationId` and `TaxId` clear via `0`; `null` or omitting the field
            leaves it unchanged. `SubItems` is bundle-only: an empty array clears the bundle down
            to no sub-items, `null` or omitting it leaves the current sub-items unchanged, and a
            non-empty array fully replaces them and recomputes `UnitCost`.
            
Re-supplying a value the item already holds is a no-op.



## OpenAPI

````yaml /api-reference/openapi.json patch /v1/items/{itemId}
openapi: 3.0.4
info:
  title: Public API
  description: Gorelo Public API documentation.
  version: 1.0.0
servers:
  - url: https://api.usw.gorelo.io
    description: US
  - url: https://api.aue.gorelo.io
    description: Australia
security:
  - ApiKeyAuth: []
tags:
  - name: Attachments
    description: "Uploading a file, for anything that can carry one. One endpoint rather than one per record\r\ntype, because the upload itself is identical - only the record it is checked against differs."
  - name: Alerts
    description: Alerts management operations
  - name: Assets
    description: Assets management operations
  - name: Billing
    description: Billing management operations
  - name: Tickets
    description: Tickets management operations
  - name: Clients
    description: Clients management operations
  - name: Contacts
    description: Contacts management operations
  - name: Deletions
    description: Deletions management operations
  - name: Documents
    description: Documents management operations
  - name: Forms
    description: Forms management operations
  - name: Organization
    description: Organization management operations
  - name: Projects
    description: Projects management operations
paths:
  /v1/items/{itemId}:
    patch:
      tags:
        - Billing
      summary: Partially updates an item. Send only the fields you want to change.
      description: "<b>All fields are optional</b> — a field left out keeps its current value, so a body of\r\n            `{}` is accepted and is a no-op. The response is just the item's `Id`, the same\r\n            shape as `POST /v1/items` and `DELETE /v1/items/{itemId}` - fetch\r\n            `GET /v1/items/{itemId}` separately to see the updated item.\r\n            \n`TypeId` can never be changed — present in the body at all, including as\r\n            `null`, is a 400. Which fields are accepted depends on the item's current type, the\r\n            same Product/Bundle split as on create (see `POST /v1/items`).\r\n            \n\r\n            Clearing conventions, per field: `Name`, `Number`, `UnitPrice`,\r\n            `UnitCost` and `StatusId` are not clearable — a supplied blank/invalid value is\r\n            a 400, and `null` or omitting the field leaves it unchanged.\r\n            `Description`, `Sku`, `PartNumber`, `Manufacturer`, `Vendor` and\r\n            `ExternalProductId` are free text — an empty string clears the field, `null` or\r\n            omitting it leaves it unchanged. `CategoryId`, `SubcategoryId`, `ClientId`,\r\n            `LocationId` and `TaxId` clear via `0`; `null` or omitting the field\r\n            leaves it unchanged. `SubItems` is bundle-only: an empty array clears the bundle down\r\n            to no sub-items, `null` or omitting it leaves the current sub-items unchanged, and a\r\n            non-empty array fully replaces them and recomputes `UnitCost`.\r\n            \nRe-supplying a value the item already holds is a no-op."
      operationId: patch_v1_items_itemId
      parameters:
        - name: itemId
          in: path
          description: Item to update.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Fields to change.
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/UpdateItemCommand'
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateItemCommand'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdateItemCommand'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdateItemCommand'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/UpdateItemResultBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateItemResultBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/UpdateItemResultBaseResponse'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
        '401':
          description: Unauthorized
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
components:
  schemas:
    UpdateItemCommand:
      type: object
      properties:
        TypeId:
          type: integer
          description: >-
            Rejected (400) if present at all - TypeId cannot be changed once an
            item is created.
          format: int32
          nullable: true
        Name:
          type: string
          description: >-
            Not clearable. Omit or send null to leave unchanged; a supplied
            blank is a 400.
          nullable: true
        Number:
          type: string
          description: >-
            Not clearable. Omit or send null to leave unchanged; a supplied
            blank is a 400.
          nullable: true
        Description:
          type: string
          description: Free text. Empty string clears it; null/omitted leaves it unchanged.
          nullable: true
        CategoryId:
          type: integer
          description: 0 clears it; null/omitted leaves it unchanged.
          format: int64
          nullable: true
        SubcategoryId:
          type: integer
          description: >-
            0 clears it; null/omitted leaves it unchanged. Must belong to the
            item's (new or existing) CategoryId when non-zero.
          format: int64
          nullable: true
        ClientId:
          type: integer
          description: 0 clears it; null/omitted leaves it unchanged.
          format: int64
          nullable: true
        LocationId:
          type: integer
          description: >-
            0 clears it; null/omitted leaves it unchanged. Must belong to the
            item's (new or existing) ClientId when non-zero.
          format: int64
          nullable: true
        Sku:
          type: string
          description: >-
            Product-only. Free text. Empty string clears it; null/omitted leaves
            it unchanged.
          nullable: true
        PartNumber:
          type: string
          description: >-
            Product-only. Free text. Empty string clears it; null/omitted leaves
            it unchanged.
          nullable: true
        Manufacturer:
          type: string
          description: >-
            Product-only. Free text. Empty string clears it; null/omitted leaves
            it unchanged.
          nullable: true
        Vendor:
          type: string
          description: Free text. Empty string clears it; null/omitted leaves it unchanged.
          nullable: true
        UnitCost:
          type: number
          description: "Product-only. Rejected (400) if sent while the item is a bundle. Not clearable - omit or\r\nsend null to leave unchanged; a supplied negative value is a 400."
          format: double
          nullable: true
        UnitPrice:
          type: number
          description: >-
            Not clearable. Omit or send null to leave unchanged. May be
            negative, for a discount or credit line.
          format: double
          nullable: true
        TaxId:
          type: integer
          description: 0 clears it; null/omitted leaves it unchanged.
          format: int64
          nullable: true
        ExternalProductId:
          type: string
          description: Free text. Empty string clears it; null/omitted leaves it unchanged.
          nullable: true
        StatusId:
          type: integer
          description: >-
            Not clearable. 1 (Active) or 2 (Archived); omit or send null to
            leave unchanged.
          format: int32
          nullable: true
        SubItems:
          type: array
          items:
            $ref: '#/components/schemas/UpdateItemSubItemModel'
          description: "Bundle-only. Rejected (400) if sent while the item is a product. An empty array clears the\r\nbundle down to no sub-items; null/omitted leaves the current sub-items unchanged; a\r\nnon-empty array fully replaces them (and recomputes UnitCost - the whole bundle's cost\r\ndepends on the whole list, so a partial patch of the list is not offered)."
          nullable: true
        ShowSubItemsOnInvoice:
          type: boolean
          description: Bundle-only. Rejected (400) if sent while the item is a product.
          nullable: true
        ShowSubItemDescriptionsOnInvoice:
          type: boolean
          description: Bundle-only. Rejected (400) if sent while the item is a product.
          nullable: true
      additionalProperties: false
      description: "Partial update of an item. Every field is optional and only the fields present in the body are\r\napplied. Per-field clearing conventions:\r\n<list type=\"bullet\"><item>Name, Number, UnitPrice, UnitCost, StatusId — not clearable: a supplied blank/invalid\r\nvalue is a 400, omit or send null to leave unchanged.</item><item>Description, Sku, PartNumber, Manufacturer, Vendor, ExternalProductId — free text: an\r\nempty string clears it, null/omitted leaves it unchanged.</item><item>CategoryId, SubcategoryId, ClientId, LocationId, TaxId — id fields: 0 clears it,\r\nnull/omitted leaves it unchanged.</item><item>SubItems — an empty array clears the bundle's sub-items, null/omitted leaves them\r\nunchanged, a non-empty array fully replaces them.</item></list>\r\nTypeId is not accepted at all - present in the body (any value, including null) is a 400."
    UpdateItemResultBaseResponse:
      type: object
      properties:
        StatusCode:
          $ref: '#/components/schemas/HttpStatusCode'
        IsSuccess:
          type: boolean
        Data:
          $ref: '#/components/schemas/UpdateItemResult'
        DataContext:
          type: object
          additionalProperties: false
          nullable: true
          example: null
        Notifications:
          type: array
          items:
            $ref: '#/components/schemas/Error'
      additionalProperties: false
    ObjectBaseResponse:
      type: object
      properties:
        StatusCode:
          $ref: '#/components/schemas/HttpStatusCode'
        IsSuccess:
          type: boolean
        Data:
          nullable: true
        DataContext:
          $ref: '#/components/schemas/ErrorDataContext'
        Notifications:
          type: array
          items:
            $ref: '#/components/schemas/Error'
      additionalProperties: false
    UpdateItemSubItemModel:
      type: object
      properties:
        ItemId:
          type: string
          format: uuid
        Quantity:
          type: number
          format: double
      additionalProperties: false
    HttpStatusCode:
      enum:
        - 100
        - 101
        - 102
        - 103
        - 200
        - 201
        - 202
        - 203
        - 204
        - 205
        - 206
        - 207
        - 208
        - 226
        - 300
        - 301
        - 302
        - 303
        - 304
        - 305
        - 306
        - 307
        - 308
        - 400
        - 401
        - 402
        - 403
        - 404
        - 405
        - 406
        - 407
        - 408
        - 409
        - 410
        - 411
        - 412
        - 413
        - 414
        - 415
        - 416
        - 417
        - 421
        - 422
        - 423
        - 424
        - 426
        - 428
        - 429
        - 431
        - 451
        - 500
        - 501
        - 502
        - 503
        - 504
        - 505
        - 506
        - 507
        - 508
        - 510
        - 511
      type: integer
      format: int32
    UpdateItemResult:
      type: object
      properties:
        Id:
          type: string
          description: Identifier of the updated item.
          format: uuid
      additionalProperties: false
    Error:
      type: object
      properties:
        Code:
          pattern: ^[0-9]{6}$
          type: string
          description: 6-digit MMTTNN error code. See the Public API error-code registry.
          example: '070101'
        Message:
          type: string
        PropertyName:
          type: string
          nullable: true
        ActionHint:
          type: string
          nullable: true
        DocUrl:
          type: string
          nullable: true
      additionalProperties: false
    ErrorDataContext:
      type: object
      properties:
        TraceId:
          type: string
          description: Request correlation id. Quote this when reporting a problem.
          nullable: true
      additionalProperties: false
      description: "The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest."
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      description: >-
        Your Gorelo API key. See [Generate API key](/generate-api-key). If your
        data is hosted in Australia, click the base URL at the top of this page
        and select `https://api.aue.gorelo.io`.
      name: X-API-Key
      in: header

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.