openapi: 3.0.1 info: title: IO.Common Accounts Items API version: '1.0' security: - OAuth2: [] tags: - name: Items paths: /v1/Items: get: tags: - Items summary: Get all items operationId: GetItems parameters: - name: Name in: query schema: type: string - name: Code in: query schema: type: string - name: Vendor in: query schema: type: string - name: Barcode in: query schema: type: string - name: flag in: query schema: type: array items: type: integer format: int32 - name: Page in: query schema: type: integer format: int32 - name: PageSize in: query schema: type: integer format: int32 - name: SortColumn in: query schema: type: string - name: SortOrder in: query schema: type: string - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ItemResponsePagedResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common post: tags: - Items summary: Create new item operationId: CreateItem parameters: - name: serviceId in: query description: Service id of the item. schema: type: string format: uuid - name: Account in: query description: Account schema: title: Account type: int requestBody: description: Create item request data content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateItemRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateItemRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateItemRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateItemRequest' responses: '201': description: Created content: application/json: schema: type: integer format: int32 '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{serviceId}/items: get: tags: - Items summary: Get all service items operationId: GetServiceItems parameters: - name: serviceId in: path description: Service id required: true schema: type: string format: uuid - name: Name in: query schema: type: string - name: Code in: query schema: type: string - name: Vendor in: query schema: type: string - name: Barcode in: query schema: type: string - name: flag in: query schema: type: array items: type: integer format: int32 - name: Page in: query schema: type: integer format: int32 - name: PageSize in: query schema: type: integer format: int32 - name: SortColumn in: query schema: type: string - name: SortOrder in: query schema: type: string - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ItemResponsePagedResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}: get: tags: - Items summary: Get item details operationId: GetItemDetails parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ItemDetailsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common put: tags: - Items summary: Update existing item operationId: UpdateItem parameters: - name: itemId in: path description: Item to update required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: Update DTO content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateItemRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateItemRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateItemRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateItemRequest' responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common delete: tags: - Items summary: Delete item operationId: DeleteItem parameters: - name: itemId in: path description: Item id to delete required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/conversions: get: tags: - Items summary: Get item unit conversions operationId: GetItemUnitConversions parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: Filter in: query schema: type: string - name: Page in: query schema: type: integer format: int32 - name: PageSize in: query schema: type: integer format: int32 - name: SortColumn in: query schema: type: string - name: SortOrder in: query schema: type: string - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UnitConversionPagedResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/altitems: get: tags: - Items summary: Get item alternative items operationId: GetItemAltItems parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: Filter in: query schema: type: string - name: Page in: query schema: type: integer format: int32 - name: PageSize in: query schema: type: integer format: int32 - name: SortColumn in: query schema: type: string - name: SortOrder in: query schema: type: string - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AltItemResponsePagedResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common post: tags: - Items summary: Create item alternative item operationId: CreateItemAltItem parameters: - name: itemId in: path description: Item id required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: Create alternative item request content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateAltItemRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateAltItemRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateAltItemRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateAltItemRequest' responses: '201': description: Created content: application/json: schema: type: integer format: int32 '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common put: tags: - Items summary: Update item alternative item based on orig. itemId and account operationId: UpdateItemAltItemByItemId parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: Update alternative item request content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateAltItemRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateAltItemRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateAltItemRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateAltItemRequest' responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common delete: tags: - Items summary: Delete item alternative item by itemId and account Id operationId: DeleteItemAltItemByItemId parameters: - name: itemId in: path description: Item id required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/altitems/{altItemId}: put: tags: - Items summary: Update item alternative item based on alt item id operationId: UpdateItemAltItemById parameters: - name: altItemId in: path description: ID of the alt item record required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: Update alternative item request content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateAltItemRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateAltItemRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateAltItemRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateAltItemRequest' responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common delete: tags: - Items summary: Delete item alternative item by alt item id operationId: DeleteItemAltItemById parameters: - name: altItemId in: path description: Alternative item id required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/altitems/bulk: post: tags: - Items summary: Bulk upsert alternative items for multiple items operationId: BulkUpsertAltItems parameters: - name: Account in: query description: Account schema: title: Account type: int requestBody: description: List of alternative item requests content: application/json-patch+json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/BulkUpsertAltItemRequest' application/json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/BulkUpsertAltItemRequest' text/json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/BulkUpsertAltItemRequest' application/*+json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/BulkUpsertAltItemRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/BulkUpsertAltItemsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/properties: get: tags: - Items summary: Get the list of all the properties added to items operationId: GetAllUsedItemProperties parameters: - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: type: array items: type: string '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/definedProperties: get: tags: - Items summary: Get the defined properties for items operationId: Get defined properties for items parameters: - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/GetDefinedPropertyParametersResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common post: tags: - Items summary: Create new item property with parameters operationId: Create item defined property with parameters parameters: - name: Account in: query description: Account schema: title: Account type: int requestBody: description: '' content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateDefinedPropertyParametersRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateDefinedPropertyParametersRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateDefinedPropertyParametersRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/CreateDefinedPropertyParametersRequest' responses: '201': description: Created '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/definedProperties/{id}: put: tags: - Items summary: Update existing item property with parameters operationId: Update item defined property with parameters parameters: - name: id in: path description: Property parameter Id required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: '' content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateDefinedPropertyParametersRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateDefinedPropertyParametersRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateDefinedPropertyParametersRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateDefinedPropertyParametersRequest' responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common delete: tags: - Items summary: Delete existing item property with parameters operationId: Delete item defined propety with parameters parameters: - name: id in: path description: Property parameter Id required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/definedProperties/bulk: post: tags: - Items summary: Bulk upsert/delete item properties with parameters operationId: Create or update item defined propeties with parameters parameters: - name: Account in: query description: Account schema: title: Account type: int requestBody: description: '' content: application/json-patch+json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/BulkUpsertDefinedPropertyParametersRequest' application/json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/BulkUpsertDefinedPropertyParametersRequest' text/json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/BulkUpsertDefinedPropertyParametersRequest' application/*+json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/BulkUpsertDefinedPropertyParametersRequest' responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/bulk: post: tags: - Items summary: "Bulk upsert items masterdata.\r\nAccepts a JSON array of items. Items are matched by `code` — existing items are updated, new ones are created.\r\nItems missing `code` or `name` are silently skipped; validate your payload before sending.\r\nUnit identifiers (`inventUnitId`, barcode `unit`) are normalised to lowercase and auto-created if they do not exist.\r\nThe server processes large arrays in internal batches of 5 000 items. Endpoint timeout is 5 minutes." description: "NEVER call this endpoint concurrently for the same tenant.\r\nConcurrent calls will interfere with each other and produce incorrect results.\r\nAll requests must be strictly sequential — wait for a 200 OK before sending the next batch." operationId: BulkUpsertItem parameters: - name: serviceId in: query description: Optional service context. Omit if items are not scoped to a specific service. schema: type: string format: uuid - name: forceOverwriteOwner in: query schema: type: boolean - name: Account in: query description: Account schema: title: Account type: int requestBody: description: Array of items to upsert. Send at most 5 000 items per request. content: application/json-patch+json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/CreateItemBulkRequest' application/json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/CreateItemBulkRequest' text/json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/CreateItemBulkRequest' application/*+json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/CreateItemBulkRequest' responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/download/xlsx: get: tags: - Items summary: Get all items operationId: GetItemsExcel parameters: - name: serviceId in: query description: Service uuid schema: type: string format: uuid - name: Name in: query schema: type: string - name: Code in: query schema: type: string - name: Vendor in: query schema: type: string - name: Barcode in: query schema: type: string - name: flag in: query schema: type: array items: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: type: string format: binary '202': description: Accepted content: application/json: schema: $ref: '#/components/schemas/BulkJobQueuedResponse' '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/sendToTenant: post: tags: - Items summary: Send item(s) to another tenant operationId: SendToTenant parameters: - name: tenantId in: query description: Receiver tenant id schema: type: string format: uuid - name: accountId in: query description: Receiver account id in sender tenant schema: type: integer format: int32 requestBody: description: List of items content: application/json-patch+json; x-api-version=1.0: schema: type: array items: type: integer format: int32 application/json; x-api-version=1.0: schema: type: array items: type: integer format: int32 text/json; x-api-version=1.0: schema: type: array items: type: integer format: int32 application/*+json; x-api-version=1.0: schema: type: array items: type: integer format: int32 responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/barcodes: get: tags: - Items summary: Get item barcodes operationId: GetItemBarcodes parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: Filter in: query schema: type: string - name: Page in: query schema: type: integer format: int32 - name: PageSize in: query schema: type: integer format: int32 - name: SortColumn in: query schema: type: string - name: SortOrder in: query schema: type: string - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ItemBarcodeResponsePagedResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common post: tags: - Items summary: Create item barcodes operationId: CreateItemBarcodes parameters: - name: itemId in: path description: Item id required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: New barcodes content: application/json-patch+json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/CreateItemBarcodeRequest' application/json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/CreateItemBarcodeRequest' text/json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/CreateItemBarcodeRequest' application/*+json; x-api-version=1.0: schema: type: array items: $ref: '#/components/schemas/CreateItemBarcodeRequest' responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/barcodes/location: get: tags: - Items summary: Get item barcodes that are assigned to location operationId: GetItemBarcodesInUse parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/ItemBarcodeUsageResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/barcodes/{id}: get: tags: - Items summary: Get item barcode details operationId: GetItemBarcodeDetails parameters: - name: itemId in: path description: Item Id required: true schema: type: integer format: int32 - name: id in: path description: Barcode ID required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ItemBarcodeDetailsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common put: tags: - Items summary: Update item barcode operationId: UpdateItemBarcode parameters: - name: itemId in: path description: Item id required: true schema: type: integer format: int32 - name: id in: path description: Barcode ID required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: Update request content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateItemBarcodeRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateItemBarcodeRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateItemBarcodeRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/UpdateItemBarcodeRequest' responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common delete: tags: - Items summary: Delete item barcode operationId: DeleteItemBarcode parameters: - name: itemId in: path description: Item id required: true schema: type: integer format: int32 - name: id in: path description: Barcode ID to delete required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/images/upload: post: tags: - Items summary: Upload item images operationId: UploadItemImages parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: content: multipart/form-data: schema: type: object properties: images: type: array items: type: string format: binary encoding: images: style: form responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/images/link: post: tags: - Items summary: Add linked image (external) operationId: AddLinkedImages parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: List of image urls to be likned content: application/json-patch+json; x-api-version=1.0: schema: type: array items: type: string application/json; x-api-version=1.0: schema: type: array items: type: string text/json; x-api-version=1.0: schema: type: array items: type: string application/*+json; x-api-version=1.0: schema: type: array items: type: string responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/images/default/{key}: put: tags: - Items summary: Set item default image operationId: SetItemDefaultImage parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: key in: path description: Key of the image required: true schema: type: string - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/images/{key}: delete: tags: - Items summary: Delete item image operationId: DeleteItemImage parameters: - name: itemId in: path description: '' required: true schema: type: integer format: int32 - name: key in: path description: Key of the image required: true schema: type: string - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/validate: get: tags: - Items summary: Validates whether a single item code exists parameters: - name: itemCode in: query schema: type: string - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: type: boolean '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common post: tags: - Items summary: Validates multiple item codes. Returns only invalid codes. parameters: - name: Account in: query description: Account schema: title: Account type: int requestBody: content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/ValidateItemCodesRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/ValidateItemCodesRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/ValidateItemCodesRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/ValidateItemCodesRequest' responses: '200': description: Success content: application/json: schema: type: array items: type: string '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/bulk-file: post: tags: - Items summary: Queue a bulk item import from a CSV or Excel file. Returns a job ID to poll for status. operationId: BulkUpsertItemFile parameters: - name: serviceId in: query schema: type: string format: uuid - name: forceOverwriteOwner in: query schema: type: boolean - name: Account in: query description: Account schema: title: Account type: int requestBody: content: multipart/form-data: schema: type: object properties: ItemsFile: type: string format: binary encoding: ItemsFile: style: form responses: '202': description: Accepted content: application/json: schema: $ref: '#/components/schemas/BulkJobQueuedResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/flags: get: tags: - Items summary: "Get the active flags raised on an item. Cleared flags excluded.\r\nVisibility-filtered: tenant-primary callers see all rows; others see global\r\nflags plus those scoped to their own account. Returns an empty list if the\r\n`UNIQUE_ITEMS` feature is not enabled." operationId: GetItemFlags parameters: - name: itemId in: path description: Item id. required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/ItemFlagResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common post: tags: - Items summary: "Manually raise a flag on an item under the caller's account scope.\r\nIdempotent: a duplicate raise of the same active flag is a no-op." operationId: RaiseItemFlag parameters: - name: itemId in: path description: Item id. required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int requestBody: description: Body carrying the `flagTypeId` to raise. content: application/json-patch+json; x-api-version=1.0: schema: $ref: '#/components/schemas/RaiseItemFlagRequest' application/json; x-api-version=1.0: schema: $ref: '#/components/schemas/RaiseItemFlagRequest' text/json; x-api-version=1.0: schema: $ref: '#/components/schemas/RaiseItemFlagRequest' application/*+json; x-api-version=1.0: schema: $ref: '#/components/schemas/RaiseItemFlagRequest' responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common /v1/Items/{itemId}/flags/{flagTypeId}: delete: tags: - Items summary: "Manually clear a flag on an item under the caller's account scope.\r\nIdempotent: clearing a non-active flag is a no-op (returns 204)." operationId: ClearItemFlag parameters: - name: itemId in: path description: Item id. required: true schema: type: integer format: int32 - name: flagTypeId in: path description: Flag type id to clear. required: true schema: type: integer format: int32 - name: Account in: query description: Account schema: title: Account type: int responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiErrorResponse' '401': description: Unauthorized '403': description: Forbidden security: - OAuth2: - io.common components: schemas: ItemFlagInfo: type: object properties: flagTypeId: type: integer format: int32 name: type: string nullable: true color: type: string nullable: true additionalProperties: false ItemBarcodeResponse: type: object properties: id: type: integer format: int32 barcode: type: string nullable: true unit: type: string nullable: true quantity: type: number format: double netWeight: type: number format: double grossWeight: type: number format: double additionalProperties: false IDomainEvent: type: object properties: id: type: string format: uuid readOnly: true occurredOn: type: string format: date-time readOnly: true additionalProperties: false Unit: type: object properties: unitId: type: string nullable: true text: type: string nullable: true additionalProperties: false RaiseItemFlagRequest: type: object properties: flagTypeId: type: integer format: int32 additionalProperties: false CreateDefinedPropertyParametersRequest: type: object properties: key: type: string nullable: true showOnReports: type: boolean useAsFilter: type: boolean isRequired: type: boolean accountId: type: integer format: int32 nullable: true additionalProperties: false UnitConversion: type: object properties: id: type: integer format: int32 readOnly: true domainEvents: type: array items: $ref: '#/components/schemas/IDomainEvent' nullable: true readOnly: true fromUnitId: type: string nullable: true readOnly: true toUnitId: type: string nullable: true readOnly: true factor: type: number format: double readOnly: true reverseFactor: type: number format: double readOnly: true decimals: type: integer format: int32 readOnly: true roundOffType: $ref: '#/components/schemas/RoundOffType' itemId: type: integer format: int32 nullable: true readOnly: true fromUnit: $ref: '#/components/schemas/Unit' toUnit: $ref: '#/components/schemas/Unit' item: $ref: '#/components/schemas/Item' additionalProperties: false ItemImage: type: object properties: affinity: $ref: '#/components/schemas/ExtendedPropertyAffinity' ownerId: type: integer format: int32 key: type: string nullable: true value: type: string nullable: true owner: $ref: '#/components/schemas/Item' isDefault: type: boolean readOnly: true imageUri: type: string format: uri nullable: true readOnly: true additionalProperties: false AltItemResponse: type: object properties: id: type: integer format: int32 itemId: type: integer format: int32 accountId: type: integer format: int32 accountName: type: string nullable: true altCode: type: string nullable: true altName: type: string nullable: true codeSearch: type: string nullable: true nameSearch: type: string nullable: true additionalProperties: false ItemResponseBase: type: object properties: id: type: integer format: int32 code: type: string nullable: true name: type: string nullable: true additionalProperties: false UnitConversionPagedResult: type: object properties: pageSize: type: integer format: int32 readOnly: true page: type: integer format: int32 readOnly: true totalCount: type: integer format: int32 readOnly: true filteredCount: type: integer format: int32 readOnly: true data: type: array items: $ref: '#/components/schemas/UnitConversion' nullable: true readOnly: true additionalProperties: false ItemBarcodeResponsePagedResult: type: object properties: pageSize: type: integer format: int32 readOnly: true page: type: integer format: int32 readOnly: true totalCount: type: integer format: int32 readOnly: true filteredCount: type: integer format: int32 readOnly: true data: type: array items: $ref: '#/components/schemas/ItemBarcodeResponse' nullable: true readOnly: true additionalProperties: false ItemImageResponse: type: object properties: isDefault: type: boolean key: type: string nullable: true uri: type: string nullable: true additionalProperties: false CreateItemRequest: type: object properties: code: type: string nullable: true name: type: string nullable: true type: $ref: '#/components/schemas/ItemType' inventUnitId: type: string nullable: true salesUnitId: type: string nullable: true purchUnitId: type: string nullable: true purchPrice: type: number format: double salesPrice: type: number format: double vendor: type: string nullable: true ownerAccountId: type: integer format: int32 nullable: true properties: type: object additionalProperties: type: string nullable: true additionalProperties: false BulkJobQueuedResponse: type: object properties: jobId: type: string format: uuid message: type: string nullable: true additionalProperties: false Item: type: object properties: id: type: integer format: int32 readOnly: true domainEvents: type: array items: $ref: '#/components/schemas/IDomainEvent' nullable: true readOnly: true createdOn: type: string format: date-time nullable: true readOnly: true modifiedOn: type: string format: date-time nullable: true readOnly: true properties: type: array items: $ref: '#/components/schemas/ItemProperty' nullable: true publicProperties: type: array items: $ref: '#/components/schemas/ItemProperty' nullable: true readOnly: true reservedProperties: type: array items: $ref: '#/components/schemas/ItemProperty' nullable: true readOnly: true name: type: string nullable: true code: type: string nullable: true type: $ref: '#/components/schemas/ItemType' inventoryUnitId: type: string nullable: true salesUnitId: type: string nullable: true purchUnitId: type: string nullable: true purchasePrice: type: number format: double salesPrice: type: number format: double rowVersion: type: string format: byte nullable: true readOnly: true nameSearch: type: string nullable: true readOnly: true codeSearch: type: string nullable: true readOnly: true vendor: type: string nullable: true serviceId: type: string format: uuid readOnly: true defaultImage: type: string nullable: true readOnly: true ownerAccountId: type: integer format: int32 nullable: true readOnly: true vendorAccountId: type: integer format: int32 nullable: true readOnly: true deletedOn: type: string format: date-time nullable: true isDeleted: type: boolean barcodes: type: array items: $ref: '#/components/schemas/ItemBarcode' nullable: true images: type: array items: $ref: '#/components/schemas/ItemImage' nullable: true readOnly: true unitConversions: type: array items: $ref: '#/components/schemas/UnitConversion' nullable: true altDetails: type: array items: $ref: '#/components/schemas/ItemAltDetails' nullable: true flags: type: array items: $ref: '#/components/schemas/ItemFlag' nullable: true readOnly: true additionalProperties: false GetDefinedPropertyParametersResponse: type: object properties: id: type: integer format: int32 affinity: $ref: '#/components/schemas/ExtendedPropertyAffinity' key: type: string nullable: true showOnReports: type: boolean useAsFilter: type: boolean isRequired: type: boolean accountId: type: integer format: int32 nullable: true additionalProperties: false ItemBarcodeProperty: type: object properties: affinity: $ref: '#/components/schemas/ExtendedPropertyAffinity' ownerId: type: integer format: int32 key: type: string nullable: true value: type: string nullable: true owner: $ref: '#/components/schemas/ItemBarcode' additionalProperties: false ItemFlag: type: object properties: id: type: integer format: int32 readOnly: true domainEvents: type: array items: $ref: '#/components/schemas/IDomainEvent' nullable: true readOnly: true flagTypeId: type: integer format: int32 readOnly: true itemId: type: integer format: int32 readOnly: true accountId: type: integer format: int32 nullable: true readOnly: true raisedByUserId: type: integer format: int32 readOnly: true raisedAt: type: string format: date-time readOnly: true clearedAt: type: string format: date-time nullable: true readOnly: true clearedByUserId: type: integer format: int32 nullable: true readOnly: true isActive: type: boolean readOnly: true additionalProperties: false RoundOffType: enum: - 0 - 1 - 2 type: integer format: int32 Error: type: object properties: code: type: string nullable: true message: type: string nullable: true additionalProperties: false FlagSeverity: enum: - 0 - 1 - 2 type: integer format: int32 CreateAltItemRequest: type: object properties: accountId: type: integer format: int32 altCode: type: string nullable: true altName: type: string nullable: true additionalProperties: false ItemBarcode: type: object properties: id: type: integer format: int32 readOnly: true domainEvents: type: array items: $ref: '#/components/schemas/IDomainEvent' nullable: true readOnly: true createdOn: type: string format: date-time nullable: true readOnly: true modifiedOn: type: string format: date-time nullable: true readOnly: true properties: type: array items: $ref: '#/components/schemas/ItemBarcodeProperty' nullable: true publicProperties: type: array items: $ref: '#/components/schemas/ItemBarcodeProperty' nullable: true readOnly: true reservedProperties: type: array items: $ref: '#/components/schemas/ItemBarcodeProperty' nullable: true readOnly: true barcode: type: string nullable: true itemId: type: integer format: int32 readOnly: true quantity: type: number format: double readOnly: true unit: type: string nullable: true readOnly: true unitPrice: type: number format: double readOnly: true netWeight: type: number format: double readOnly: true grossWeight: type: number format: double readOnly: true barcodeSearch: type: string nullable: true readOnly: true item: $ref: '#/components/schemas/Item' additionalProperties: false ItemBarcodeUsageResult: type: object properties: wmsLocationId: type: string nullable: true locationId: type: integer format: int32 locationName: type: string nullable: true barcode: type: string nullable: true additionalProperties: false CreateItemBarcodeRequest: type: object properties: barcode: type: string nullable: true unit: type: string nullable: true quantity: type: number format: double netWeight: type: number format: double grossWeight: type: number format: double additionalProperties: false AltItemResponsePagedResult: type: object properties: pageSize: type: integer format: int32 readOnly: true page: type: integer format: int32 readOnly: true totalCount: type: integer format: int32 readOnly: true filteredCount: type: integer format: int32 readOnly: true data: type: array items: $ref: '#/components/schemas/AltItemResponse' nullable: true readOnly: true additionalProperties: false ItemAltDetails: type: object properties: id: type: integer format: int32 readOnly: true domainEvents: type: array items: $ref: '#/components/schemas/IDomainEvent' nullable: true readOnly: true createdOn: type: string format: date-time nullable: true readOnly: true modifiedOn: type: string format: date-time nullable: true readOnly: true itemId: type: integer format: int32 readOnly: true accountId: type: integer format: int32 readOnly: true altCode: type: string nullable: true readOnly: true altName: type: string nullable: true readOnly: true codeSearch: type: string nullable: true readOnly: true nameSearch: type: string nullable: true readOnly: true item: $ref: '#/components/schemas/Item' additionalProperties: false ItemType: enum: - 0 - 1 - 2 - 3 type: integer format: int32 CreateItemBulkRequest: type: object properties: code: type: string nullable: true name: type: string nullable: true type: $ref: '#/components/schemas/ItemType' inventUnitId: type: string nullable: true vendor: type: string nullable: true ownerAccountCode: type: string nullable: true imageUrl: type: string nullable: true salesPrice: type: number format: double purchasePrice: type: number format: double properties: type: object additionalProperties: type: string nullable: true barcodes: type: array items: $ref: '#/components/schemas/CreateItemBarcodeBulkRequest' nullable: true additionalProperties: false ValidateItemCodesRequest: type: object properties: itemCodes: type: array items: type: string nullable: true additionalProperties: false ItemResponsePagedResult: type: object properties: pageSize: type: integer format: int32 readOnly: true page: type: integer format: int32 readOnly: true totalCount: type: integer format: int32 readOnly: true filteredCount: type: integer format: int32 readOnly: true data: type: array items: $ref: '#/components/schemas/ItemResponse' nullable: true readOnly: true additionalProperties: false UpdateAltItemRequest: type: object properties: altCode: type: string nullable: true altName: type: string nullable: true additionalProperties: false UpdateDefinedPropertyParametersRequest: type: object properties: id: type: integer format: int32 key: type: string nullable: true showOnReports: type: boolean useAsFilter: type: boolean isRequired: type: boolean accountId: type: integer format: int32 nullable: true additionalProperties: false BulkUpsertAltItemRequest: type: object properties: itemCode: type: string nullable: true altCode: type: string nullable: true altName: type: string nullable: true additionalProperties: false BulkUpsertAltItemsResponse: type: object properties: successCount: type: integer format: int32 totalCount: type: integer format: int32 failedEntries: type: array items: $ref: '#/components/schemas/BulkUpsertAltItemError' nullable: true additionalProperties: false ItemProperty: type: object properties: affinity: $ref: '#/components/schemas/ExtendedPropertyAffinity' ownerId: type: integer format: int32 key: type: string nullable: true value: type: string nullable: true owner: $ref: '#/components/schemas/Item' additionalProperties: false ItemFlagResponse: type: object properties: id: type: integer format: int32 flagTypeId: type: integer format: int32 name: type: string nullable: true color: type: string nullable: true severity: $ref: '#/components/schemas/FlagSeverity' accountId: type: integer format: int32 nullable: true raisedByUserId: type: integer format: int32 raisedAt: type: string format: date-time additionalProperties: false ItemDetailsResponse: type: object properties: id: type: integer format: int32 code: type: string nullable: true name: type: string nullable: true vendor: type: string nullable: true vendorAccountId: type: integer format: int32 nullable: true inventoryUnit: type: string nullable: true salesUnit: type: string nullable: true purchUnit: type: string nullable: true type: $ref: '#/components/schemas/ItemType' purchPrice: type: number format: double salesPrice: type: number format: double rowVersion: type: string format: byte nullable: true serviceId: type: string format: uuid altCode: type: string nullable: true altName: type: string nullable: true images: type: array items: $ref: '#/components/schemas/ItemImageResponse' nullable: true barcodes: type: array items: $ref: '#/components/schemas/ItemBarcodeResponse' nullable: true properties: type: object additionalProperties: type: string nullable: true definedProperties: type: object additionalProperties: $ref: '#/components/schemas/DefinedPropertyValueDTO' nullable: true ownerAccountId: type: integer format: int32 nullable: true additionalProperties: false UpdateItemBarcodeRequest: type: object properties: unit: type: string nullable: true quantity: type: number format: double netWeight: type: number format: double grossWeight: type: number format: double additionalProperties: false BulkUpsertDefinedPropertyParametersRequest: type: object properties: id: type: integer format: int32 nullable: true key: type: string nullable: true showOnReports: type: boolean useAsFilter: type: boolean isRequired: type: boolean accountId: type: integer format: int32 nullable: true additionalProperties: false UpdateItemRequest: type: object properties: name: type: string nullable: true vendor: type: string nullable: true purchPrice: type: number format: double salesPrice: type: number format: double inventoryUnit: type: string nullable: true purchUnit: type: string nullable: true salesUnit: type: string nullable: true properties: type: object additionalProperties: type: string nullable: true additionalProperties: false BulkUpsertAltItemError: type: object properties: itemCode: type: string nullable: true reason: type: string nullable: true additionalProperties: false ExtendedPropertyAffinity: enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 14 - 15 - 20 - 21 - 22 - 23 - 24 - 25 - 26 - 27 - 31 - 33 - 34 - 35 - 81 - 100 - 101 - 102 - 103 - 104 - 105 - 200 - 201 - 210 - 211 - 220 - 230 - 240 - 241 - 300 - 310 - 311 - 400 - 401 type: integer format: int32 ApiErrorResponse: type: object properties: errors: type: array items: $ref: '#/components/schemas/Error' nullable: true additionalProperties: false DefinedPropertyValueDTO: type: object properties: value: type: string nullable: true isRequired: type: boolean additionalProperties: false CreateItemBarcodeBulkRequest: type: object properties: barcode: type: string nullable: true unit: type: string nullable: true quantity: type: number format: double netWeight: type: number format: double grossWeight: type: number format: double unitFactor: type: number format: double additionalProperties: false ItemBarcodeDetailsResponse: type: object properties: barcode: type: string nullable: true unit: type: string nullable: true quantity: type: number format: double netWeight: type: number format: double grossWeight: type: number format: double id: type: integer format: int32 item: $ref: '#/components/schemas/ItemResponseBase' properties: type: object additionalProperties: type: string nullable: true additionalProperties: false ItemResponse: type: object properties: id: type: integer format: int32 code: type: string nullable: true name: type: string nullable: true type: $ref: '#/components/schemas/ItemType' vendor: type: string nullable: true vendorAccountId: type: integer format: int32 nullable: true inventoryUnitId: type: string nullable: true altCode: type: string nullable: true altName: type: string nullable: true activeFlags: type: array items: $ref: '#/components/schemas/ItemFlagInfo' nullable: true additionalProperties: false securitySchemes: OAuth2: type: oauth2 flows: authorizationCode: authorizationUrl: https://identity.scanbro.com/connect/authorize tokenUrl: https://identity.scanbro.com/connect/token scopes: io.common: default scope