> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fire.rest/llms.txt
> Use this file to discover all available pages before exploring further.

# Listar menús

> Lista las ternas (canal × tipo de fulfillment) de la tienda que tienen un menú generado, sin el menú.

<Warning>
  **Próximamente.** El diseño está cerrado pero este endpoint todavía no está implementado. Esta
  página describe el contrato acordado para que los integradores puedan planificar antes del
  release.
</Warning>

Un menú en Fire no es una propiedad de la tienda: pertenece a una **terna** — tienda × canal de
venta × tipo de fulfillment (por ejemplo, `KIOSK` / `DINE_IN`). El mismo producto puede tener un
precio distinto entre ternas de la misma tienda, así que no existe "el menú de la tienda" como
concepto único. Este endpoint lista qué ternas de una tienda tienen hoy un menú generado; usá
[Obtener menú](/es/api-reference/get-menu) para leer uno.

## Autenticación

<ParamField header="x-api-key" type="string" required>
  Tu API key de Fire con scope `menu:read`. La key **debe ser vendor-scoped** (binding account +
  vendor) — las keys sin `vendorId` se rechazan con `403`.
</ParamField>

## Path params

<ParamField path="storeId" type="string" required>
  UUID de la tienda (`stores.id`).
</ParamField>

## Petición

<RequestExample>
  ```http theme={null}
  GET https://api.fire.rest/api/v1/fire/external/stores/550e8400-e29b-41d4-a716-446655440000/menus
  x-api-key: <tu_api_key>
  ```
</RequestExample>

## Respuesta

<ResponseField name="menus" type="object[]">
  <Expandable title="menu">
    <ResponseField name="channel" type="string">Código del canal de venta (ej. `KIOSK`).</ResponseField>
    <ResponseField name="fulfillmentType" type="string">Código del tipo de fulfillment (ej. `DINE_IN`, `TAKEAWAY`).</ResponseField>
    <ResponseField name="syncStatus" type="string">`SYNCED` | `FAILED` | `PENDING` — el último intento de envío del menú generado de esta terna.</ResponseField>
    <ResponseField name="generatedAt" type="string">Timestamp ISO 8601 de la última generación del menú de esta terna.</ResponseField>
    <ResponseField name="syncedAt" type="string | null">Timestamp ISO 8601 de la última entrega **exitosa** al canal. `null` si nunca sincronizó. Ver [Semántica de `syncedAt`](/es/api-reference/get-menu#semantica-de-syncedat).</ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "menus": [
        {
          "channel": "KIOSK",
          "fulfillmentType": "DINE_IN",
          "syncStatus": "SYNCED",
          "generatedAt": "2026-09-28T10:00:00Z",
          "syncedAt": "2026-09-28T10:00:04Z"
        },
        {
          "channel": "KIOSK",
          "fulfillmentType": "TAKEAWAY",
          "syncStatus": "FAILED",
          "generatedAt": "2026-09-28T10:00:00Z",
          "syncedAt": null
        }
      ]
    }
  }
  ```

  ```json 401 — API key inválida theme={null}
  {
    "success": false,
    "error": "UNAUTHORIZED",
    "message": "Invalid or missing API key"
  }
  ```

  ```json 403 — key sin el scope theme={null}
  {
    "success": false,
    "error": "FORBIDDEN",
    "message": "API key does not have required scope: menu:read"
  }
  ```

  ```json 404 — la tienda no es tuya theme={null}
  {
    "success": false,
    "error": "NOT_FOUND",
    "message": "Store not found"
  }
  ```
</ResponseExample>

## Notas

* Solo se listan las ternas con un menú **generado** (`generatedAt` no nulo) — incluida una cuyo
  último envío haya salido vacío (ver [Envío vacío](/es/api-reference/get-menu#envio-vacio)). Ese
  caso igual aparece acá, con `syncStatus: FAILED`, para que el problema se vea.
* Este listado nunca devuelve el cuerpo del menú — está pensado para saltarse la columna JSONB
  pesada. Traé una terna puntual con [Obtener menú](/es/api-reference/get-menu).
* `channel` y `fulfillmentType` se comparan sin distinguir mayúsculas contra lo que enviás a
  [Obtener menú](/es/api-reference/get-menu#query-params) — no hay un id separado para buscarlas.

## Relacionado

<CardGroup cols={2}>
  <Card title="Obtener menú" icon="book-open" href="/es/api-reference/get-menu">
    Lee el menú de una terna puntual, con su estado de sincronización.
  </Card>

  <Card title="Obtener tienda" icon="store" href="/es/api-reference/get-store">
    Lee una tienda puntual por id.
  </Card>
</CardGroup>
