Productos

Los endpoints de productos permiten listar el catálogo de la tienda y obtener el detalle completo de un producto por su slug.


Listar productos

GET /api/v1/products

Retorna una lista paginada de productos activos de la tienda.

Parámetros de consulta

ParámetroTipoRequeridoDescripción
pagenumberNoNúmero de página (default: 1)
limitnumberNoResultados por página (default: 20)
searchstringNoBúsqueda por nombre o SKU
categoryIdUUIDNoFiltra productos por categoría
sortstringNoCampo de ordenamiento (default: -updatedAt). Prefija con - para orden descendente

Ejemplo

GET /api/v1/products?page=1&limit=10&sort=-createdAt
x-api-token: sk_live_abc123

Respuesta 200 OK

{
  "products": [ /* array de objetos Product */ ],
  "total": 42,
  "page": 1,
  "limit": 10
}

Obtener producto por slug

GET /api/v1/products/:slug

Retorna el detalle completo de un producto, incluyendo variantes, precios, inventario, imágenes y opciones de configuración.

Parámetros de ruta

ParámetroTipoDescripción
slugstringSlug único del producto

Ejemplo

GET /api/v1/products/polera-negra-basica
x-api-token: sk_live_abc123

Respuesta 200 OK

{
  "id": "uuid",
  "name": "Polera Negra Básica",
  "slug": "polera-negra-basica",
  "description": "Polera 100% algodón",
  "body": "<p>Descripción larga en HTML</p>",
  "options": { "Talla": ["S", "M", "L"], "Color": ["Negro"] },
  "metadata": null,
  "coverImageId": "uuid",
  "createdAt": "2025-01-01T00:00:00.000Z",
  "updatedAt": "2025-06-01T00:00:00.000Z",
  "categories": [
    { "id": "uuid", "name": "Ropa", "slug": "ropa" }
  ],
  "variants": [
    {
      "id": "uuid",
      "sku": "POL-NEG-M",
      "name": "Negro / M",
      "options": { "Talla": "M", "Color": "Negro" },
      "metadata": null,
      "coverImageId": null,
      "pricing": [
        {
          "saleChannelId": "uuid",
          "saleChannelName": "Tienda Online",
          "price": "9990.00",
          "compareAtPrice": "12990.00"
        }
      ],
      "inventory": [
        {
          "locationId": "uuid",
          "locationName": "Bodega Central",
          "quantity": 50,
          "reserved": 3,
          "available": 47
        }
      ]
    }
  ],
  "images": [
    {
      "id": "uuid",
      "fileId": "uuid",
      "productId": "uuid",
      "status": "ready",
      "orderIndex": 0,
      "alt": null,
      "bytes": 204800,
      "width": 1200,
      "height": 1200,
      "contentType": "image/webp",
      "storageThumbPath": "stores/.../processed/thumb.webp",
      "storageCardPath": "stores/.../processed/card.webp",
      "storageZoomPath": "stores/.../processed/zoom.webp",
      "storageHeroPath": "stores/.../processed/hero.webp",
      "createdAt": "2025-01-01T00:00:00.000Z"
    }
  ],
  "configOptions": [
    {
      "id": "uuid",
      "name": "Grabado personalizado",
      "type": "TEXT",
      "required": false,
      "minSelections": null,
      "maxSelections": null,
      "position": 0,
      "values": []
    },
    {
      "id": "uuid",
      "name": "Color de hilo",
      "type": "SELECT",
      "required": true,
      "minSelections": null,
      "maxSelections": null,
      "position": 1,
      "values": [
        { "id": "uuid", "label": "Rojo", "priceAdjustment": "0.00", "position": 0 },
        { "id": "uuid", "label": "Dorado", "priceAdjustment": "1500.00", "position": 1 }
      ]
    }
  ]
}

Errores

CódigoDescripción
404El producto con ese slug no existe en la tienda