Saltar al contenido principal
GET
/
stores
Listar tiendas
curl --request GET \
  --url https://api.example.com/stores
{
  "data": [
    {
      "id": "cocina-centro",
      "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "brand_id": "0001",
      "name": "Cocina Centro",
      "status": "ACTIVE",
      "timezone": "America/Guayaquil",
      "contact": {
        "email": "centro@comercio.com",
        "phone": "+593991234567",
        "name": "Cocina Centro"
      },
      "location": {
        "latitude": -2.1894,
        "longitude": -79.8891,
        "address_line_1": "Av. 9 de Octubre 123",
        "city": "Guayaquil",
        "country": "Ecuador",
        "postal_code": "090101",
        "business_name": "Cocina Centro S.A."
      },
      "channels": {
        "APP": {
          "id": "canal-app",
          "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
          "name": "App móvil",
          "fulfillment": {
            "DELIVERY": {
              "uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
              "id": "delivery",
              "type": "DELIVERY",
              "name": "Delivery",
              "instructions": { "es_ec": "Tocar el timbre en la entrada lateral." },
              "pricing": {
                "is_tax_inclusive": false,
                "minimum_order_value": 10,
                "maximum_order_value": 200,
                "tax_rate": 0.15,
                "fees": [
                  {
                    "id": "tarifa-delivery",
                    "type": "FIXED",
                    "tax_inclusive": false,
                    "name": { "es_ec": "Costo de envío" },
                    "amount": 2.5,
                    "percentage": 0
                  }
                ]
              },
              "coverage_zones": [
                {
                  "name": "Centro",
                  "type": "RADIUS",
                  "radius_info": {
                    "latitude": -2.1894,
                    "longitude": -79.8891,
                    "radius": 5000
                  }
                }
              ],
              "availability": {
                "status": "OPEN",
                "schedules": [{
                  "monday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "tuesday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "wednesday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "thursday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "friday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "saturday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "sunday": { "start_time": "10:00:00", "end_time": "23:00:00" }
                }]
              }
            }
          }
        }
      },
      "payments": {
        "orderable": true,
        "methods": [
          {
            "method": "CREDIT",
            "minimum_order_value": 0,
            "maximum_order_value": 500,
            "providers": [
              {
                "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
                "name": "Stripe",
                "status": "ACTIVE"
              }
            ]
          }
        ]
      },
      "cms_template_id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
      "cms": {
        "id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
        "name": "Landing de tienda",
        "entity": "STORES",
        "status": "ACTIVE",
        "fields": [
          {
            "name": "hero_title",
            "type": "TEXT",
            "label": { "es_ec": "Título principal" },
            "required": true,
            "value": "Bienvenido a Downtown Kitchen"
          }
        ]
      },
      "overrides": []
    }
  ]
}
Devuelve un listado paginado de tiendas desde las que un cliente puede pedir. Usa este endpoint para selectores de ubicación o para explorar el catálogo completo. Para encontrar tiendas cercanas al cliente, usa listar tiendas por coordenadas.
Requiere un access token de Fire spark obtenido mediante intercambio de token. El token limita las solicitudes al cliente autenticado y al comercio correspondiente.

Headers

HeaderRequeridoDescripción
x-brand-idNoFiltra tiendas por marca. Identificador externo de la marca — solo alfanuméricos, _ y -. 1–64 caracteres. Si se omite, se devuelven todas las tiendas del comercio.

Parámetros de consulta

ParámetroRequeridoDescripción
fromÍndice inicial (base 0).
toÍndice final (inclusivo). Debe ser mayor o igual que from.
limitMáximo de registros por solicitud. 1–100. El rango to - from no puede superar limit.
Solicita la primera página con from=0, to=24 y limit=25. Para la siguiente página, usa from=25, to=49 y el mismo limit.

Solicitud

curl "https://firespark.vercel.app/api/storefront/v1/stores?from=0&to=24&limit=25" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "x-brand-id: 0001"

Respuesta

La respuesta envuelve un arreglo de tiendas en data. Cada tienda incluye ubicación, canales, fulfillment, pagos y disponibilidad para que tu canal determine dónde puede pedir el cliente.
{
  "data": [
    {
      "id": "cocina-centro",
      "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "brand_id": "0001",
      "name": "Cocina Centro",
      "status": "ACTIVE",
      "timezone": "America/Guayaquil",
      "contact": {
        "email": "centro@comercio.com",
        "phone": "+593991234567",
        "name": "Cocina Centro"
      },
      "location": {
        "latitude": -2.1894,
        "longitude": -79.8891,
        "address_line_1": "Av. 9 de Octubre 123",
        "city": "Guayaquil",
        "country": "Ecuador",
        "postal_code": "090101",
        "business_name": "Cocina Centro S.A."
      },
      "channels": {
        "APP": {
          "id": "canal-app",
          "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
          "name": "App móvil",
          "fulfillment": {
            "DELIVERY": {
              "uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
              "id": "delivery",
              "type": "DELIVERY",
              "name": "Delivery",
              "instructions": { "es_ec": "Tocar el timbre en la entrada lateral." },
              "pricing": {
                "is_tax_inclusive": false,
                "minimum_order_value": 10,
                "maximum_order_value": 200,
                "tax_rate": 0.15,
                "fees": [
                  {
                    "id": "tarifa-delivery",
                    "type": "FIXED",
                    "tax_inclusive": false,
                    "name": { "es_ec": "Costo de envío" },
                    "amount": 2.5,
                    "percentage": 0
                  }
                ]
              },
              "coverage_zones": [
                {
                  "name": "Centro",
                  "type": "RADIUS",
                  "radius_info": {
                    "latitude": -2.1894,
                    "longitude": -79.8891,
                    "radius": 5000
                  }
                }
              ],
              "availability": {
                "status": "OPEN",
                "schedules": [{
                  "monday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "tuesday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "wednesday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "thursday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "friday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "saturday": { "start_time": "10:00:00", "end_time": "23:00:00" },
                  "sunday": { "start_time": "10:00:00", "end_time": "23:00:00" }
                }]
              }
            }
          }
        }
      },
      "payments": {
        "orderable": true,
        "methods": [
          {
            "method": "CREDIT",
            "minimum_order_value": 0,
            "maximum_order_value": 500,
            "providers": [
              {
                "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
                "name": "Stripe",
                "status": "ACTIVE"
              }
            ]
          }
        ]
      },
      "cms_template_id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
      "cms": {
        "id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
        "name": "Landing de tienda",
        "entity": "STORES",
        "status": "ACTIVE",
        "fields": [
          {
            "name": "hero_title",
            "type": "TEXT",
            "label": { "es_ec": "Título principal" },
            "required": true,
            "value": "Bienvenido a Downtown Kitchen"
          }
        ]
      },
      "overrides": []
    }
  ]
}

Objeto tienda

CampoTipoDescripción
idstringIdentificador externo de la tienda en tus sistemas. Solo alfanuméricos, _ y -. 1–64 caracteres.
uidstring (UUID)Identificador interno de Fire spark.
brand_idstringIdentificador externo de la marca. Solo alfanuméricos, _ y -. 1–64 caracteres. Opcional — null cuando el comercio opera con una sola marca.
namestringNombre visible. 1–100 caracteres.
statusstringACTIVE o INACTIVE.
timezonestringZona horaria IANA para horarios y overrides.
contactobjectDatos de contacto de la tienda.
locationobjectDirección física y coordenadas.
channelsobjectConfiguración de fulfillment por canal, indexada por código de canal. Cada canal contiene un mapa fulfillment.
paymentsobjectMétodos de pago aceptados y límites de pedido.
cms_template_idstring (UUID)Plantilla CMS vinculada a esta tienda. null cuando no hay plantilla asignada.
cmsobjectSolo lectura. null cuando cms_template_id es null. Si está asignada, la plantilla CMS resuelta con definiciones de campos y valores guardados.
overridesarrayCambios de configuración programados.
CampoTipoRequeridoDescripción
emailstringDirección de correo válida.
phonestringFormato E.164 (por ejemplo +593991234567).
namestringNoNombre de contacto.
| Campo | Tipo | Requerido | Descripción | | ----- | ---- | --------- | ----------- | | latitude | number | Sí | Entre -90 y 90. | | longitude | number | Sí | Entre -180 y 180. | | address_line_1 | string | Sí | 3–255 caracteres. | | address_line_2 | string | No | 3–255 caracteres. | | city | string | Sí | 1–100 caracteres. | | country | string | Sí | 1–100 caracteres. | | postal_code | string | Sí | Solo números. 4–10 dígitos. | | business_name | string | Sí | Razón social o nombre comercial. 1–100 caracteres. | | unit_number | string | No | Solo números. 1–10 dígitos. |
Mapa de códigos de canal a su configuración. Cada entrada contiene:
CampoTipoDescripción
idstringIdentificador externo del canal.
uidstring (UUID)Identificador del canal en Fire spark.
namestringNombre visible.
fulfillmentobjectMapa de tipos de fulfillment disponibles en este canal. Cada clave es un código de fulfillment (por ejemplo DELIVERY, PICKUP).
Cada entrada de fulfillment requiere uid, id, type, name, pricing, coverage_zones y availability. instructions es opcional como objeto localizado.
CampoTipoDescripción
is_tax_inclusivebooleanSi los precios incluyen impuestos.
minimum_order_valuenumberMonto mínimo de pedido. ≥ 0.
maximum_order_valuenumberMonto máximo de pedido. 0–1,000,000.
tax_ratenumberTasa de impuesto como decimal (por ejemplo 0.15 para 15%). 0–1.
feesarrayCargos adicionales aplicados al pedido.
Cada cargo:
CampoTipoDescripción
idstringIdentificador externo del cargo.
typestringFIXED o PERCENTAGE.
tax_inclusivebooleanSi el cargo incluye impuestos.
nameobjectEtiqueta localizada por locale (por ejemplo es_ec).
descriptionobjectDescripción localizada opcional.
amountnumberMonto fijo cuando type es FIXED. ≥ 0.
percentagenumberTasa cuando type es PERCENTAGE. 0–1.
CampoTipoDescripción
statusstringOPEN, CLOSED o TEMPORARILY_CLOSED.
schedulesarray | nullMapas de horario semanal indexados por día (monday a sunday). null cuando no hay restricción de horarios.
temporary_closed_reasonobjectMotivo localizado cuando está temporalmente cerrado.
temporary_closed_untilstringFecha y hora ISO 8601 en que termina el cierre temporal.
Cada mapa de horario se indexa por día (monday a sunday). Incluye solo los días en que opera la tienda. Cada día:
CampoTipoDescripción
start_timestringHora ISO (por ejemplo 09:00:00).
end_timestringHora ISO (por ejemplo 22:00:00).
CampoTipoDescripción
uidstring (UUID)Identificador de fulfillment en Fire spark.
idstringIdentificador externo de fulfillment.
typestringCódigo de tipo de fulfillment (por ejemplo DELIVERY, PICKUP).
namestringNombre visible.
instructionsobjectInstrucciones localizadas opcionales para el cliente.
pricingobjectReglas de precio para este tipo de fulfillment.
coverage_zonesarrayZonas de entrega o servicio.
availabilityobjectHorarios y estado operativo.
Zona de cobertura:
CampoTipoDescripción
namestringEtiqueta de la zona.
typestringRADIUS o POLYGON.
radius_infoobjectRequerido cuando type es RADIUS. Contiene latitude, longitude y radius (metros, 0–100,000).
polygon_infoobjectRequerido cuando type es POLYGON. Contiene polygon, un arreglo de puntos { latitude, longitude }.
CampoTipoDescripción
orderablebooleanSi la tienda acepta pedidos.
methodsarrayMétodos de pago aceptados.
Cada método de pago:
CampoTipoDescripción
methodstringCREDIT, DEBIT, CASH, BANK_TRANSFER u OTHER.
minimum_order_valuenumberPedido mínimo para este método. ≥ 0.
maximum_order_valuenumberPedido máximo para este método. 0–1,000,000.
providersarrayProveedores de pago para este método.
Cada proveedor:
CampoTipoDescripción
idstring (UUID)Identificador del proveedor.
namestringNombre visible del proveedor.
statusstringACTIVE o INACTIVE.
Presente solo cuando cms_template_id no es null. Contiene la plantilla CMS resuelta asignada a la tienda.
CampoTipoDescripción
idstring (UUID)Identificador de la plantilla. Coincide con cms_template_id.
namestringNombre de la plantilla. 1–100 caracteres.
entitystringSiempre STORES en respuestas de tienda.
statusstringACTIVE o INACTIVE.
fieldsarrayCampos de la plantilla con sus valores guardados actuales.
Cada campo en fields:
CampoTipoDescripción
namestringClave del campo.
typestringTEXT, SELECT, IMAGE o LIST.
labelobjectEtiqueta localizada opcional por locale.
requiredbooleanSi el campo es obligatorio.
placeholderstringTexto de placeholder opcional.
optionsarrayPara campos SELECT — objetos con label y value.
altTextstringPara campos IMAGE — texto alternativo.
srcstringPara campos IMAGE — URL de la imagen.
hrefstringPara campos IMAGE — URL de enlace opcional.
valuevaríaValor guardado actual para esta tienda. Se omite cuando está vacío.
Cambios programados que entran en vigor en una fecha futura. Cada override contiene:
CampoTipoDescripción
start_datestringFecha y hora ISO 8601 en que el override se activa.
changesobjectConfiguración parcial de tienda a aplicar. Incluye contact, location, timezone, channels, payments y cms_template_id.

Respuestas de error

EstadoDescripción
400Parámetros de paginación inválidos. from debe ser ≤ to, y to - from no debe superar limit.
401Access token ausente o inválido.
403El token no tiene acceso a las tiendas de este comercio.