The Products and Catalog endpoints expose full lifecycle management for a business’s sellable items and their add-on option groups. All write operations are permission-gated at the action level — holdingDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/CRISTIANCAMACH34/Zippi/llms.txt
Use this file to discover all available pages before exploring further.
catalog.manage implies all fine-grained catalog actions, but individual permissions such as catalog.edit_price or catalog.edit_availability can be granted in isolation for operators who should only control a subset of the catalog.
Catalog permission matrix
| Permission | Description |
|---|---|
catalog.read | View products, categories, add-ons, and tax rates |
catalog.create | Create a new product in the catalog |
catalog.manage | Full edit access — implies all actions below |
catalog.edit_name | Edit a product’s display name |
catalog.edit_price | Edit the sale price |
catalog.edit_cost | Edit the product cost (internal) |
catalog.edit_taxes | Edit product tax rates |
catalog.edit_image | Replace the product image |
catalog.edit_availability | Mark a product available or sold out |
catalog.duplicate | Duplicate an existing product |
catalog.archive | Archive (soft-hide) a product |
catalog.delete | Logical delete of a product |
catalog.restore | Restore an archived product |
catalog.export | Export the catalog to CSV/XLSX |
catalog.import | Import products from a spreadsheet |
catalog.change_category | Move a product to a different category |
catalog.move_branch | Move a product between branches |
catalog.change_supplier | Update the product’s supplier |
catalog.assign_promotions | Attach or detach promotions |
kitchen_staff is granted catalog.edit_availability by default, allowing them to mark items as sold out from the kitchen screen without access to pricing or other fields.Products
GET /api/v1/business/products
Returns the list of products for the authenticated business scope. Results are filtered by scope automatically — abusiness_branch_admin sees only the products available at their branch.
200 OK
Internal primary key of the product.
Display name shown to customers (max 140 characters).
Optional long-form description.
Sale price in centavos (COP). Always an integer.
Internal cost price in centavos. Visible only to roles with
catalog.edit_cost.Category label (max 80 characters).
true if the product is currently available for ordering.POST /api/v1/business/products
Creates a new product in the catalog. Returns201 Created. Requires catalog.create or catalog.manage.
Product display name. Max 140 characters.
Optional customer-facing description.
Sale price in centavos (integer). Must be ≥ 0.
Internal cost in centavos. Stored for margin reporting. Requires
catalog.edit_cost.Category label string. Max 80 characters.
Initial availability state.
Absolute URL to the product image. Requires
catalog.edit_image.Tax rate in basis points (e.g.
800 = 8%). Requires catalog.edit_taxes.GET /api/v1/business/products/:id
Returns the full detail for a single product, identified byproduct_id.
200 OK
Absolute URL to the product image, or
null if no image has been set.Tax rate in basis points (e.g.
800 = 8%). 0 means no tax is applied.List of option group IDs linked to this product. Expand each via
GET /options/:id.PUT /api/v1/business/products/:id · PATCH /api/v1/business/products/:id
Updates one or more fields on an existing product. BothPUT (full replace) and PATCH (partial update) are accepted. Each field mutation is gated by its corresponding fine-grained permission at the service layer.
Requires
catalog.edit_name.Sale price in centavos. Requires
catalog.edit_price.Cost price in centavos. Requires
catalog.edit_cost.Tax rate in basis points. Requires
catalog.edit_taxes.Image URL. Requires
catalog.edit_image.Category label. Requires
catalog.change_category.DELETE /api/v1/business/products/:id
Soft-deletes (archives) a product. The product is hidden from the customer catalog but remains in the database and can be restored. Requirescatalog.archive or catalog.delete.
200 OK
PATCH /api/v1/business/products/:id/status
Toggles theactivo (availability) flag on a product without touching any other fields. Useful for marking items as sold out during a shift. Requires catalog.edit_availability.
true to make the product available; false to mark it sold out.Options (Add-on groups)
Option groups let customers customize their order — e.g. “Choose your sauce” or “Add toppings”. Each group contains one or more selectable items and can be marked as required or optional.GET /api/v1/business/options
Returns all add-on option groups for the business scope. Results are filtered by scope automatically — abusiness_branch_admin sees only the option groups linked to their branch.
200 OK
Internal primary key of the option group.
Display name of the option group shown to customers.
Whether a selection is required before the customer can add the product to their cart.
Minimum number of items the customer must select from this group.
Maximum number of items the customer may select from this group.
true if the option group is visible to customers during ordering.List of selectable items, each with
nombre (string) and precio_adicional (integer centavos).POST /api/v1/business/options
Creates a new option group. Returns201 Created. Requires catalog.create or catalog.manage.
Group name shown to the customer.
Whether the customer must make a selection from this group.
Minimum number of items the customer must select.
Maximum number of items the customer may select.
Initial list of selectable items. Each item has
nombre (string) and precio_adicional (integer centavos).PUT /api/v1/business/options/:id · PATCH /api/v1/business/options/:id
Updates an existing option group. Both verbs are accepted;PATCH allows partial updates.
DELETE /api/v1/business/options/:id
Deletes an option group. Requirescatalog.delete or catalog.manage.
PATCH /api/v1/business/options/:id/status
Toggles the availability of an option group without deleting it. When disabled, the group will not be shown to customers during ordering.true to enable the option group; false to hide it from customers.