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

# Acknowledgment de eventos

> Confirme o recebimento dos eventos de indoor para tirá-los da fila do polling.

Depois de cada polling com resultados, envie o acknowledgment dos eventos recebidos. É o mesmo endpoint dos eventos de pedidos: um lote pode misturar eventos de pedido e de indoor, e você confirma todos na mesma chamada.

## Requisição

**id** `uuid` *required*

O `eventId` de cada evento recebido. O corpo é um **array** de objetos, um por evento.

> [!WARNING]
>
> O campo lido é `id`. Reenviar o evento como veio do polling não funciona: ele traz o identificador em `eventId`, e a API não o reconhece. Monte o corpo como `[{ "id": evento.eventId }]`.

```bash cURL theme={null}
curl --request POST 'https://api.deliveryvip.com.br/merchant/v3/events/acknowledgment' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '[
    { "id": "78b58a39-e222-44a4-a2c4-083c4837ed7d" },
    { "id": "b99a3643-b6a5-408f-9f2f-29a1a6cc3cec" }
  ]'
```

```js Node.js theme={null}
await fetch('https://api.deliveryvip.com.br/merchant/v3/events/acknowledgment', {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify(events.map(({ eventId }) => ({ id: eventId }))),
})
```

```python Python theme={null}
requests.post(
    "https://api.deliveryvip.com.br/merchant/v3/events/acknowledgment",
    headers={"Authorization": f"Bearer {token}"},
    json=[{"id": event["eventId"]} for event in events],
)
```

## Resposta

**total** `integer`

Quantos eventos foram confirmados nesta chamada.

```json 202 Accepted theme={null}
{ "total": 2 }
```

## Boas práticas

> [!TIP]
>
> **Um acknowledgment por polling com resultados.** Confirme o lote inteiro de uma vez.

> [!TIP]
>
> **Confirme também o que você não usa.** Se a sua integração ainda não trata `CALL_WAITER` ou `CLOSE_ACCOUNT`, confirme esses eventos mesmo assim, ou eles voltam em todo polling e ocupam espaço no lote de 100.

> [!TIP]
>
> **Pode repetir sem medo.** A operação é idempotente: confirmar o mesmo evento duas vezes não gera erro.


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