> ## 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 menus

> Lista as ternas (canal × tipo de fulfillment) da loja que têm um menu gerado, sem o menu.

<Warning>
  **Em breve.** O design está fechado mas este endpoint ainda não está implementado. Esta página
  descreve o contrato acordado para que os integradores possam se planejar antes do lançamento.
</Warning>

Um menu no Fire não é uma propriedade da loja: pertence a uma **terna** — loja × canal de venda ×
tipo de fulfillment (por exemplo, `KIOSK` / `DINE_IN`). O mesmo produto pode ter um preço diferente
entre ternas da mesma loja, então não existe "o menu da loja" como conceito único. Este endpoint
lista quais ternas de uma loja têm hoje um menu gerado; use [Obter menu](/pt/api-reference/get-menu)
para ler um.

## Autenticação

<ParamField header="x-api-key" type="string" required>
  Sua API key do Fire com scope `menu:read`. A key **deve ser vendor-scoped** (binding account +
  vendor) — keys sem `vendorId` são rejeitadas com `403`.
</ParamField>

## Path params

<ParamField path="storeId" type="string" required>
  UUID da loja (`stores.id`).
</ParamField>

## Requisição

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

## Resposta

<ResponseField name="menus" type="object[]">
  <Expandable title="menu">
    <ResponseField name="channel" type="string">Código do canal de venda (ex. `KIOSK`).</ResponseField>
    <ResponseField name="fulfillmentType" type="string">Código do tipo de fulfillment (ex. `DINE_IN`, `TAKEAWAY`).</ResponseField>
    <ResponseField name="syncStatus" type="string">`SYNCED` | `FAILED` | `PENDING` — a última tentativa de envio do menu gerado desta terna.</ResponseField>
    <ResponseField name="generatedAt" type="string">Timestamp ISO 8601 da última geração do menu desta terna.</ResponseField>
    <ResponseField name="syncedAt" type="string | null">Timestamp ISO 8601 da última entrega **bem-sucedida** ao canal. `null` se nunca sincronizou. Veja [Semântica de `syncedAt`](/pt/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 sem o scope theme={null}
  {
    "success": false,
    "error": "FORBIDDEN",
    "message": "API key does not have required scope: menu:read"
  }
  ```

  ```json 404 — a loja não é sua theme={null}
  {
    "success": false,
    "error": "NOT_FOUND",
    "message": "Store not found"
  }
  ```
</ResponseExample>

## Notas

* Só são listadas as ternas com um menu **gerado** (`generatedAt` não nulo) — incluindo uma cujo
  último envio tenha saído vazio (veja [Envio vazio](/pt/api-reference/get-menu#envio-vazio)). Esse
  caso aparece aqui mesmo assim, com `syncStatus: FAILED`, para que o problema fique visível.
* Esta listagem nunca retorna o corpo do menu — ela é feita para pular a coluna JSONB pesada. Busque
  uma terna específica com [Obter menu](/pt/api-reference/get-menu).
* `channel` e `fulfillmentType` são comparados sem diferenciar maiúsculas com o que você envia para
  [Obter menu](/pt/api-reference/get-menu#query-params) — não há um id separado para buscá-las.

## Relacionado

<CardGroup cols={2}>
  <Card title="Obter menu" icon="book-open" href="/pt/api-reference/get-menu">
    Leia o menu de uma terna específica, com seu status de sincronização.
  </Card>

  <Card title="Obter loja" icon="store" href="/pt/api-reference/get-store">
    Leia uma loja específica por id.
  </Card>
</CardGroup>
