Products
Catalog products (modelos) and their SKU-level variants (productos). Exposes the same surface as the legacy modeloDialog2 form. This is the only catalog resource that represents an actual sellable item.
ποΈ Get product by ID
Returns a single product with the FULL graph: header fields, variants, product-level and variant-level custom field values, stock summary per branch and supplier prices. Carries a strong `ETag` header with the current version.
ποΈ Update product
Full replacement of an existing product and its variants. Variants whose `id` is present in the payload are updated in place; new variants (no `id`) are created; existing variants whose id is absent from the payload are deleted. Send the `If-Match` header with the current ETag for optimistic concurrency control.
ποΈ Delete product
Deletes a product and all of its variants (cascade). Send the `If-Match` header with the current ETag for optimistic concurrency control. Products referenced by sales documents cannot be deleted and return `409 Conflict`.
ποΈ Merge-patch product
RFC 7396 merge-patch over `application/merge-patch+json`. Send only the fields you want to change; include a field with value `null` to remove it. Use the `If-Match` header for optimistic concurrency control. For variant collections, use the variant `id` to update existing rows; the merge keeps any field not mentioned in the patch.
ποΈ List products
Returns a paginated list of products with envelope `{data, totalCount, skip, limit, hasMore}`. The listing does NOT include variants ΓΓΓΆ fetch a single product with `GET /{id}` to get the full graph. Default sort is `lastModifiedAt:desc`. Limit is capped at 200; skip is clamped to >= 0.
ποΈ Create product
Creates a new product with at least one variant. Business logic (FK resolution, supplier-price denormalisation, stock initialisation, default-variant linkage) runs in the legacy WAR via the internal commands gateway. Returns the full graph of the created product with all assigned IDs.
ποΈ Upload temporary product images
Uploads one or more images to the legacy temporary storage. Use the returned `temporaryImageId` values in `temporaryImageIds` or `defaultTemporaryImageId` when creating/updating a product.