Obtener menú
curl --request GET \
--url https://api.fire.rest/v1/menus/{syncId} \
--header 'x-api-key: <x-api-key>'import requests
url = "https://api.fire.rest/v1/menus/{syncId}"
headers = {"x-api-key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
fetch('https://api.fire.rest/v1/menus/{syncId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fire.rest/v1/menus/{syncId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fire.rest/v1/menus/{syncId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fire.rest/v1/menus/{syncId}")
.header("x-api-key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fire.rest/v1/menus/{syncId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"source": {
"menuId": "<string>",
"priceListId": "<string>"
},
"list": {
"syncId": "<string>",
"listId": "<string>",
"listName": "<string>",
"vendorId": {},
"storeId": "<string>",
"storeName": "<string>",
"timezone": {},
"channelId": "<string>",
"channelReferenceName": "<string>",
"fulfillmentType": "<string>",
"schedules": [
{
"day": "<string>",
"startTime": "<string>",
"endTime": "<string>"
}
]
},
"categories": [
{
"productCategoryId": "<string>",
"name": "<string>",
"displayInList": true,
"featured": true,
"position": 123,
"images": [
{}
],
"assignedAt": {},
"productListing": [
{}
],
"schedules": {}
}
],
"products": [
{
"productId": {},
"name": "<string>",
"description": "<string>",
"active": true,
"type": "<string>",
"priceInfo": {},
"productModifiers": [
{}
],
"schedules": {},
"images": [
{}
],
"taxInfo": [
{}
],
"additionalInfo": {}
}
],
"modifierGroups": [
{
"modifierId": "<string>",
"modifier": "<string>",
"minOptions": 123,
"maxOptions": 123,
"type": "<string>",
"modifierOptions": [
{}
]
}
]
}Menú
Obtener menú
Devuelve el menú completo para un syncId recibido en una notificación menu.list_ready.
GET
/
v1
/
menus
/
{syncId}
Obtener menú
curl --request GET \
--url https://api.fire.rest/v1/menus/{syncId} \
--header 'x-api-key: <x-api-key>'import requests
url = "https://api.fire.rest/v1/menus/{syncId}"
headers = {"x-api-key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
fetch('https://api.fire.rest/v1/menus/{syncId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fire.rest/v1/menus/{syncId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fire.rest/v1/menus/{syncId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fire.rest/v1/menus/{syncId}")
.header("x-api-key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fire.rest/v1/menus/{syncId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"source": {
"menuId": "<string>",
"priceListId": "<string>"
},
"list": {
"syncId": "<string>",
"listId": "<string>",
"listName": "<string>",
"vendorId": {},
"storeId": "<string>",
"storeName": "<string>",
"timezone": {},
"channelId": "<string>",
"channelReferenceName": "<string>",
"fulfillmentType": "<string>",
"schedules": [
{
"day": "<string>",
"startTime": "<string>",
"endTime": "<string>"
}
]
},
"categories": [
{
"productCategoryId": "<string>",
"name": "<string>",
"displayInList": true,
"featured": true,
"position": 123,
"images": [
{}
],
"assignedAt": {},
"productListing": [
{}
],
"schedules": {}
}
],
"products": [
{
"productId": {},
"name": "<string>",
"description": "<string>",
"active": true,
"type": "<string>",
"priceInfo": {},
"productModifiers": [
{}
],
"schedules": {},
"images": [
{}
],
"taxInfo": [
{}
],
"additionalInfo": {}
}
],
"modifierGroups": [
{
"modifierId": "<string>",
"modifier": "<string>",
"minOptions": 123,
"maxOptions": 123,
"type": "<string>",
"modifierOptions": [
{}
]
}
]
}Propuesta — todavía no implementada en XMART_BACKOFFICE. Ver Entrega
híbrida para contexto. Esta página muestra la forma
prevista del endpoint, no un contrato en vivo.
menu.list_ready para traer el menú
completo. La forma de la respuesta refleja exactamente data.menu en
menu.updated — mismos campos, misma
semántica.
El webhook de notificación y este endpoint de fetch se autentican distinto. Fire
empuja
menu.list_ready a tu servidor, firmado con HMAC — ver Headers de la
petición. Tu sistema
consulta este endpoint, así que necesita una credencial de API en su lugar —
ver abajo.Autenticación
Es un endpoint/v1/* — ver Autenticación:
solo se necesita x-api-key, sin flujo de login.
string
requerido
Tu API key de Fire.
string
Bearer <token> opcional, aceptado como alternativa legacy a x-api-key. Enviá uno u otro.Parámetros de ruta
string
requerido
Identificador de la asignación de sync, recibido como
data.syncId en el
evento menu.list_ready. Es el id de la
fila que ata una tienda, un canal y un fulfillment type a un menú y una lista de
precios — los mismos tres valores que listId resume como string, pero este es
el que garantiza unicidad.Respuesta
object
De qué menú y lista de precios salió esta respuesta. Compará contra tu último
menu.list_ready para detectar una
reasignación entre el evento de notificación y este fetch.Mostrar campos de source
Mostrar campos de source
string
UUID del menú desde el que se aplastó esta respuesta.
string
UUID de la lista de precios usada para resolver cada precio de esta
respuesta. Un menú no tiene lista de precios propia — cada asignación de
sync (
syncId) elige una, así que el mismo menú puede tener precios
distintos según qué asignación lo consultó.object
Metadatos del menú y asociación canal/tienda.
Mostrar campos de list
Mostrar campos de list
string
El id propio de la asignación de sync — mismo valor que el parámetro de
ruta, devuelto de vuelta.
string
Identificador compuesto legacy:
{storeNumber}-{channelCode}-{fulfillmentType}.
Se mantiene para cruzar con menu.updated;
no garantiza unicidad por sí solo.string
Etiqueta autogenerada
{channelCode} - Store {storeNumber}.string | number
Código de marca.
string
UUID interno de la tienda (PK
stores.id).string
Nombre operativo de la tienda.
string | null
Zona horaria IANA de la tienda (p. ej.
America/Sao_Paulo).string
UUID interno del canal de ventas (PK
channels.id).string
Nombre de referencia del fulfillment (p. ej.
delivery, pickup).string
Código de tipo de fulfillment (p. ej.
DELIVERY, DINE_IN, TAKEAWAY).
Parte de la identidad real de la asignación, junto con storeId y
channelId.object[]
object[]
Categorías del menú.
Mostrar campos de category
Mostrar campos de category
string
Identificador de categoría.
string
Nombre para mostrar.
boolean
Si la categoría es visible.
boolean
Si la categoría está destacada.
number
Orden de visualización.
object[]
Imágenes de la categoría —
{ imageCategoryId, fileUrl }.string | null
Fecha en que la categoría entró al menú, en ISO 8601 UTC. Misma semántica que
menu.updated → Fecha de incorporación al menú.object[]
Productos de esta categoría con sus posiciones —
{ productId, position }.object[] | null
Horario propio de la categoría.
null si no hay horario configurado.object[]
Catálogo de productos.
Mostrar campos de product
Mostrar campos de product
string | number
Identificador del producto (
externalId o UUID).string
Nombre del producto.
string
Descripción del producto.
boolean
Visibilidad en el menú (
visible); no refleja stock ni disponibilidad operativa.string
Tipo de ítem:
PRODUCTO, MODIFIER, COMPLEMENT, COMBO.object
Precios resueltos del producto —
{ pointPrice, price, referencePrice, suggestedPrice }.object[]
Referencias de grupos de modificadores —
{ modifierId, position, overrides? }.object[] | null
Horario custom del producto.
null si usa horario de tienda o no tiene horario custom.object[]
Imágenes del producto.
object[]
Información fiscal —
{ vatRatePercentage }.object
Metadata adicional opcional —
{ externalCode, ncm, assignedAt }.object[]
Grupos de modificadores y opciones.
Mostrar campos de modifierGroups
Mostrar campos de modifierGroups
string
Identificador del grupo de modificadores.
string
Nombre para mostrar del grupo.
number
Número mínimo de selecciones requeridas.
number
Número máximo de selecciones permitidas.
string
Tipo de selección:
RADIO (single) o CHECKBOX (multiple).object[]
Opciones individuales —
{ optionId, productId, name, position }.Notas
- Este endpoint devuelve la misma forma documentada campo por campo en
menu.updated— consultá esa página para descripciones completas, casos borde, y las reglas de Fecha de incorporación al menú. - Un
syncIdque no existe, o cuya asignación fue eliminada, debería devolver404.

