Product transformations
A named commercial transformation offered on a catalog product.
- API name:
producttransformations - Domain: Catalog
- Modules: Sales, Inventory, Manufacturing, Purchasing, Logistics, Master data
Fields
The API name is what the API, MCP and the CLI use.
| Name | API name | Type | Required | Description |
|---|---|---|---|---|
| ID | id | Record ID | Yes | |
| Product | productId | Reference | Yes | |
| Position | rank | Order rank | Yes | |
| Name | label | Text I18n | ||
| Code | code | Text | Yes | Stable business identifier for this offering on this product. Unique within the organization per product — used in imports, integrations, and commercial rules. |
| Item | serviceitemId | Reference | ||
| Class | class | Constant | Yes | Transformation family for this offering. Names the kind of modification the customer may request — not how manufacturing will execute it. Cut, machining and forming require the product to carry inventory identifiers (batches or serial numbers); with serial numbers each resulting piece gets a new serial number linked to its source. |
| Operation axis | dimensionAxis | Constant | Physical dimension this transformation consumes or changes. Must be exposed by the product dimensional envelope. Not used for finishing. | |
| Pricing | pricing | Constant | Yes | Commercial hint for how this offering is priced. Does not store an amount — price lists still seed the sales line unit price. |
| Charge basis | chargeBasis | Constant | How the transformation charge is calculated: per cut, per piece, per length, or once per order line. | |
| Allow exceed stock | allowExceedStock | Boolean | Yes | Allows a future operation to request more quantity than current on-hand stock at the chosen position. It does not make an identifier with zero on-hand stock eligible by existence. |
| Consumption basis | consumptionBasis | Constant | How this offering consumes stock. Leave empty when the offering does not consume stock. Forbidden for finishing. | |
| Kerf | kerf | Decimal | Waste per cut, in the product dimension unit (primary length). | |
| Remnant | remnant | Constant | Disposition policy for offcuts, not an identity state. nonNominalReason = remnant only when a future operation restocks. | |
| Minimum remnant length | minRemnantLength | Decimal | Minimum remnant length to restock, in the product dimension unit. Required when remnants are allowed. | |
| Tags | tagIds | Tags | Optional tags for classifying and filtering this transformation. | |
| Description | description | Text Area I18n | Localized commercial description for this transformation offering. | |
| Data | data | Data | ||
| External identifiers | identifiers | External identifier | External identifiers | Remote system keys and optional id types. One value per system and type pair on this record. | |
| Created by | createdBy | User | ||
| Created at | createdAt | Date and Time | Yes | |
| Updated by | updatedBy | User | ||
| Updated at | updatedAt | Date and Time | Yes | |
| Published by | publishedBy | User | ||
| Published at | publishedAt | Date and Time | ||
| Disabled by | disabledBy | User | ||
| Disabled at | disabledAt | Date and Time | ||
| Blocked by | blockedBy | User | ||
| Blocked at | blockedAt | Date and Time | ||
| Archived by | archivedBy | User | ||
| Archived at | archivedAt | Date and Time |
Relations
Owned records (solid line) are deleted with their owner. Grouped records (dashed line) can exist alone.
| Field | Points to | Kind |
|---|---|---|
Product productId | Products | grouped by |
Item serviceitemId | Service items | reference |
Tags tagIds | Tags | reference |
Actions
What you can do with a record. Every action also sends the webhook event producttransformations.<action>. Reads (find, get, count) work on every table.
| Name | API name | Description | Where |
|---|---|---|---|
| Create | create | Add a new transformation. | App · API · MCP · CLI |
| Edit | update | Save changes to this transformation. | App · API · MCP · CLI |
| Disable | disable | Turn this transformation off for new use. Existing references stay. Enable it again to use it. | App · API · MCP · CLI |
| Enable | undisable | Turn this transformation back on for new use. | App · API · MCP · CLI |
| Publish | publish | Make this transformation available for use. | App · API · MCP · CLI |
| Block | block | Stop edits and deletion of this transformation. It stays visible and can still appear on existing documents. Unblock to edit again. | App · API · CLI |
| Unblock | unblock | Allow edits and deletion of this transformation again. | App · API · CLI |
| Archive | archive | Retire this transformation from daily use. It leaves active lists and pickers, and most actions stop. Unarchive to restore it. | App · API · MCP · CLI |
| Restore | unarchive | Return this transformation to active lists and actions. | App · API · MCP · CLI |
| Delete | delete | Delete this transformation and the data that belongs with it. This cannot be undone. | App · API · MCP · CLI |
States
How a record moves from state to state. Archive and block can happen in any state.