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

> ## Agent Instructions
> Documentação das APIs da DeliveryVip, em português. Regras que mais quebram integrações: (1) Merchant API: faça polling em GET /merchant/v3/events:polling no máximo a cada 30 s por token; confirme todo evento recebido com POST /merchant/v3/events/acknowledgment e corpo [{"id": "<eventId>"}] (o campo lido é id, não eventId), inclusive eventos repetidos ou que o sistema não trata; deduplique por eventId; o evento é só um aviso, busque o pedido na orderURL. (2) Tokens client_credentials valem 24 h e não têm refresh_token: peça outro ao receber 401. (3) Webhooks: valide a assinatura HMAC sobre o corpo bruto e responda 2xx rápido; o polling é a reconciliação. (4) Open Delivery: host od.deliveryvip.com.br, um client_secret por loja, datas em UTC. (5) Fidelidade: o operador implementa 5 rotas assinadas com HMAC e chama o config push; o estorno precisa ser idempotente. (6) Partner API: scope dv.partner. Não invente endpoints: use a referência gerada das specs OpenAPI.

# Comandas

> Cadastre e controle as comandas da loja, e entenda a diferença entre status e situação.

A comanda (`tab`) é o cartão ou ficha que acompanha o cliente no salão. Cada uma tem um nome que a equipe vê, um código e um QR Code. O cliente lê o QR Code, faz os pedidos e eles ficam ligados à comanda.

## O objeto comanda

**id** `uuid`

Identificador da comanda. É o `tabId` das rotas e dos eventos.

**createdAt** `datetime`

Quando a comanda foi cadastrada.

**name** `string`

Identificação que a equipe vê, como `0013` ou `Comanda 13`.

**code** `string`

Código da comanda, único na loja. Vem `null` depois que a comanda é removida.

**qrcode** `string`

URL que o QR Code impresso na comanda deve conter. Ela usa o `id` da comanda, então não muda quando você altera `name` ou `code`.

**status** `string`

`AVAILABLE` ou `UNAVAILABLE`. Campo legado: só muda pelas rotas [descontinuadas](#rotas-descontinuadas) ou quando a comanda é removida. Comandas `UNAVAILABLE` não aceitam pedidos.

**situation** `string`

`OPENED` ou `CLOSED`. Diz se a comanda está aberta para consumo. É o campo que você controla pelas [ações](/docs/guides/merchant/indoor/comanda-api/acoes-das-comandas.md).

```json Comanda theme={null}
{
  "id": "6b7cd994-d8ff-4d12-8064-251becc39b08",
  "createdAt": "2023-02-09T17:56:43-03:00",
  "name": "0013",
  "code": "0013",
  "qrcode": "https://qrcode.dvstore.com/qrcode/indoor_tab_6b7cd994-d8ff-4d12-8064-251becc39b08",
  "status": "AVAILABLE",
  "situation": "OPENED"
}
```

## Ciclo de vida

Toda comanda nasce `AVAILABLE` e `OPENED`. Daí em diante, você alterna a situação entre aberta e fechada.

![A comanda nasce OPENED no cadastro, alterna entre OPENED e CLOSED e é removida com DELETE](https://mintcdn.com/deliveryvip-a4256422/ELxpcniK2_BP8zxT/images/comanda-ciclo.png?fit=max\&auto=format\&n=ELxpcniK2_BP8zxT\&q=85\&s=5ee1407517573436ca530a76b2f6e75d)

Ciclo de vida de uma comanda

Com a comanda `CLOSED`, o cliente que lê o QR Code vê o aviso de comanda fechada e não consegue finalizar pedidos nem pedir a conta com ela.

## Endpoints

Todas as rotas ficam em `https://api.deliveryvip.com.br/merchant/v3/{merchantId}/tabs`.

| Ação | Endpoint | Sucesso |
| - | - | - |
| [Listar comandas](/docs/guides/merchant/indoor/comanda-api/listar-comandas.md) | `GET /tabs` | `200` ou `204` |
| [Obter uma comanda](/docs/guides/merchant/indoor/comanda-api/obter-detalhes-da-comanda.md) | `GET /tabs/{tabId}` | `200` |
| [Adicionar](/docs/guides/merchant/indoor/comanda-api/adicionar-uma-comanda.md) | `POST /tabs` | `201` |
| [Atualizar](/docs/guides/merchant/indoor/comanda-api/atualizar-uma-comanda.md) | `PATCH /tabs/{tabId}` | `200` |
| [Remover](/docs/guides/merchant/indoor/comanda-api/remover-uma-comanda.md) | `DELETE /tabs/{tabId}` | `200` |
| [Abrir para consumo](/docs/guides/merchant/indoor/comanda-api/acoes-das-comandas/abrir-para-consumo-uma-comanda.md) | `POST /tabs/{tabId}/opened` | `202` |
| [Fechar para consumo](/docs/guides/merchant/indoor/comanda-api/acoes-das-comandas/fechar-para-consumo-uma-comanda.md) | `POST /tabs/{tabId}/closed` | `202` |

### Rotas descontinuadas

`POST /tabs/{tabId}/available` e `POST /tabs/{tabId}/unavailable` estão em deprecação. Use `opened` e `closed`. Veja [ativar](/docs/guides/merchant/indoor/comanda-api/acoes-das-comandas/ativar-uma-comanda.md) e [desativar](/docs/guides/merchant/indoor/comanda-api/acoes-das-comandas/desativar-uma-comanda.md).

## Erros comuns

Os erros seguem o [formato padrão](/docs/inicio/conceitos/erros.md): `{ "status": "...", "title": ... }`.

| Status | Quando |
| - | - |
| `401 Unauthorized` | Token ausente, expirado ou inválido. |
| `404 Not Found` | O `merchantId` não autorizou o seu app, a comanda não existe, foi removida ou o `tabId` não é um UUID válido. |
| `422 Unprocessable Content` | Dados inválidos no cadastro ou na atualização, como `code` repetido. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.