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.
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 |