Saltar al contenido principal
PUT
/
menus
Upsert menús
curl --request PUT \
  --url https://api.example.com/menus
Crea o actualiza uno o más menús para el comercio autenticado. Usa este endpoint para sincronizar la estructura del catálogo compuesto, horarios y overrides desde tu POS o RMS hacia Fire spark. Cada elemento del arreglo se empareja por id. Si no existe un menú con ese id para el comercio, Fire spark lo crea. Si ya existe, Fire spark actualiza los campos editables indicados abajo. Los campos omitidos conservan su valor actual en una actualización.
Requiere un access token con el scope menus:write. Consulta Authorize para obtener un token.
Los valores de id del menú son inmutables. No puedes cambiar el id de un menú existente mediante este endpoint — envía el mismo id que usas en tu POS o RMS en cada sincronización.

Headers

HeaderRequeridoDescripción
x-brand-idNoAcota el upsert a menús de esta marca. Identificador externo de marca — solo alfanuméricos, _ y -. 1–64 caracteres. Si se omite, aplican todos los menús del comercio.

Request

Envía un arreglo JSON. Cada elemento representa un menú. Incluye id en cada elemento — es el identificador externo estable de tu POS o RMS y la clave del upsert.
curl -X PUT "https://firespark.vercel.app/api/integrations/v1/menus" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "x-brand-id: 0001" \
  -d '[
    {
      "id": "almuerzo-delivery",
      "store_id": "centro",
      "store_uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "channel_id": "app",
      "channel_uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
      "fulfillment_id": "delivery",
      "fulfillment_uid": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
      "name": "Menú almuerzo delivery",
      "description": "Ítems de almuerzo entre semana para delivery en app",
      "schedules": [{
        "monday": { "start_time": "11:00:00", "end_time": "15:00:00" },
        "tuesday": { "start_time": "11:00:00", "end_time": "15:00:00" },
        "wednesday": { "start_time": "11:00:00", "end_time": "15:00:00" },
        "thursday": { "start_time": "11:00:00", "end_time": "15:00:00" },
        "friday": { "start_time": "11:00:00", "end_time": "15:00:00" }
      }],
      "products": [],
      "categories": [],
      "modifier_groups": [],
      "overrides": [],
      "status": "ACTIVE"
    }
  ]'

Campos editables

CampoRequerido al crearDescripción
idIdentificador externo del menú. Clave del upsert. Inmutable tras la creación.
store_idIdentificador externo de tienda. Debe coincidir con una tienda sincronizada vía Upsert tiendas.
store_uidIdentificador de tienda en Fire spark.
channel_idIdentificador externo de canal. Debe coincidir con un canal sincronizado vía Listar canales.
channel_uidIdentificador de canal en Fire spark.
fulfillment_idIdentificador externo de fulfillment. Debe coincidir con fulfillment sincronizado vía Listar fulfillment.
fulfillment_uidIdentificador de fulfillment en Fire spark.
nameNombre visible. 1–100 caracteres.
descriptionNoDescripción opcional. Hasta 500 caracteres.
schedulesNoMapas de horario semanal. null cuando no hay restricción de horarios.
productsNoProductos en este menú compuesto.
categoriesNoCategorías en este menú compuesto.
modifier_groupsNoGrupos de modificadores en este menú compuesto.
cms_template_idNoUUID de plantilla CMS. null para limpiar.
overridesNoCambios programados del menú.
statusNoACTIVE o INACTIVE. Por defecto ACTIVE.
Los campos de solo lectura como uid, organization_id, merchant_id y cms se ignoran en escritura.

Response

Devuelve los menús upserteados en data, con la misma forma descrita en Listar menús.

Respuestas de error

EstadoDescripción
400Error de validación — valores inválidos o campos requeridos ausentes.
401Access token ausente o inválido.
403El token no incluye el scope menus:write.
409La tienda, canal o fulfillment referenciados no existen para este comercio.