Todo en una llamada

Categorías, atributos, banners, textos legales, ajustes y logo de la tienda juntos en una sola respuesta, que además funciona con la tienda sin publicar.

3 min de lecturaActualizado el 30 de setiembre de 2026

Qué es

shop/tables junta en una sola respuesta lo que devuelven varias rutas. Es un atajo para pintar la tienda al arrancar con una única petición.

Lo recomendable es usar las rutas de cada cosa, que se pueden guardar en caché por separado y traen datos que aquí no vienen:

Clave Ruta propia
categories GET categories
attributes GET shop/attributes
banners GET banners
legals GET legalinfos
settings y logo GET settings

Consultar todo

GET /api/v1/ecommerce/shop/tables

No pide token. No recibe parámetros.

curl https://<dominio-de-la-empresa>/api/v1/ecommerce/shop/tables \
  -H "Accept: application/json"

Funciona aunque la tienda no esté publicada. Es la llamada con la que la tienda sabe su propio estado, para mostrar un aviso de «cerrado». Con la tienda sin publicar (y sin vista previa), categories, attributes, banners y legals llegan como listas vacías; settings y logo llegan igual. El estado está en settings.store.state (borrador, publicada o pausada) y en settings.ecommerce_status.

Respuesta

Esta respuesta lleva data como objeto, con una clave por cada parte.

{
  "success": true,
  "data": {
    "categories": [
      { "id": 22, "name": "Ropa", "slug": "ropa", "products_count": 12 }
    ],
    "attributes": [
      {
        "id": 4,
        "description": "Color",
        "type": "color",
        "values": [ { "id": 18, "ecommerce_attribute_id": 4, "value": "Azul", "color": "#1d4ed8" } ]
      }
    ],
    "banners": [
      {
        "id": 4,
        "description": "Nueva temporada de ropa",
        "image_desktop": "https://miempresa.ejemplo.com/storage/uploads/logos/banner-temporada.png",
        "image_movil": "https://miempresa.ejemplo.com/storage/uploads/logos/banner-temporada-movil.png",
        "link_type": "category",
        "link_mode": "_self",
        "link_url": null,
        "link_value": "ropa",
        "sort": 0,
        "active": true,
        "bg_color": "#7c3aed"
      }
    ],
    "legals": [
      { "code": "privacy_policy", "description": "Política de Privacidad", "content": null }
    ],
    "settings": {
      "shipping_types": [ { "code": "DOMICILIO", "description": "Envío a domicilio" } ],
      "ecommerce_show_only_stock": false,
      "ecommerce_shippings_apply_igv": false,
      "ecommerce_order_type": "ALFABETICO",
      "ecommerce_business_models": [ { "code": "Minorista", "status": true }, { "code": "Mayorista", "status": false } ],
      "ecommerce_status": true,
      "store": {
        "site_name": "Mi Empresa",
        "state": "publicada",
        "banner_style": "columnas",
        "theme": { "primary": "#282828" },
        "logo": "https://miempresa.ejemplo.com/storage/logo.png"
      }
    },
    "logo": "https://miempresa.ejemplo.com/storage/logo.png"
  },
  "message": "Tablas e información auxiliar de la tienda obtenidas de forma correcta."
}

El ejemplo acorta settings.store; trae todos los campos de los ajustes.

Clave Qué trae En qué se diferencia de su ruta propia
categories Las categorías visibles Igual que categorías
attributes Los atributos activos con sus valores Igual que atributos
banners Los banners activos Trae además sort (su posición) y active (siempre true, porque solo salen los activos)
legals Los textos legales visibles: code y description content llega siempre null. El texto se pide con legalinfos/{code}/show
settings Los ajustes de la tienda Los mismos que ajustes
logo El logo de la empresa para la tienda Es el mismo valor que settings.store.logo

Si algo sale mal

No devuelve STORE_NOT_FOUND ni STORE_PAUSED: con la tienda sin publicar responde 200 con el catálogo vacío.

HTTP code Cuándo Qué hacer
503 STORE_NOT_CONFIGURED El ERP no tiene ningún almacén Avisa a la empresa
429 RATE_LIMITED Se superó el límite Espera lo que indica Retry-After
500 INTERNAL_ERROR Fallo del servidor Reporta la reference