This is the public-facing, read-only endpoint for the Balsamoa storefront. It returns only products whereDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/MateoNavarroMN/Balsamoa-Backend/llms.txt
Use this file to discover all available pages before exploring further.
activo = true, making it safe to expose directly to end customers. All raw stock quantities are stripped from the response and replaced with human-readable availability labels, preventing customers from using exact inventory numbers to their advantage.
Request
| Property | Value |
|---|---|
| Method | GET |
| Path | /api/v1/tienda/productos |
Query Parameters
Pass
"true" to filter the response to only products marked as featured (destacado = true). Omit this parameter to return all active products. Any value other than "true" is treated as false.Examples
Fetch all active products:Response
200 OK — An array of sanitized product objects ordered byid descending (newest first). Returns an empty array [] if no active products exist.
The public response differs from the admin catalog in the following ways:
stock_total— removed (raw integer hidden from public)stock_por_talle— replaced with a sanitized array of{ talle, tieneStock }objects (no quantities)talle_ids— removedcolor_ids— removedvariantes— removedactivo— removeddisponibilidad— added ("Disponible","Últimas unidades", or"Agotado")
Availability Labels
disponibilidad value | Condition |
|---|---|
"Disponible" | Total stock > 3 |
"Últimas unidades" | Total stock 1 – 3 |
"Agotado" | Total stock = 0 |
Example Response
Response Fields
The unique product ID.
The product name.
The product description. May be
null.The numeric ID of the product’s category.
The display name of the product’s category (e.g.,
"Hoodie", "Remera").The product price as a decimal string (e.g.,
"40000.00").Whether this product is marked as featured.
ISO 8601 timestamp of when the product record was created.
URL of the first image (lowest
orden value). May be null if no images are attached.An array of distinct hex color codes for all variants of this product (e.g.,
["#F5F5F5", "#1A1A1A"]). Use these to render color swatches.All images associated with this product, ordered by
orden ascending.A human-readable availability label derived from the total stock across all variants. One of
"Disponible", "Últimas unidades", or "Agotado".A sanitized breakdown of stock availability per size. Each object indicates whether a size has any stock — exact quantities are not exposed.
Error Cases
| Status | Cause | Response body |
|---|---|---|
500 | Database query failed | {"mensaje": "Error al obtener el catálogo"} |
This endpoint is intentionally designed to hide raw stock numbers from public consumers. Exact inventory quantities are only accessible through the admin endpoints (
GET /api/v1/admin/productos). The sanitization is applied in the server-side limpiarCampos helper — the database view vista_catalogo_productos always returns full data, and the filtering happens in the controller before the response is sent.