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

# Listar descontos

> Busque os descontos de uma loja, do mais recente para o mais antigo, com paginação.

Retorna os descontos da loja, automáticos e cupons, ordenados do cadastro mais recente para o mais antigo. Descontos removidos não aparecem; os vencidos (`OVERDUE`) aparecem.

| Resposta | Quando |
| - | - |
| `200 OK` | Há descontos na página. O corpo é um array. |
| `204 No Content` | A loja não tem descontos. A resposta vem sem corpo. |

## Requisição

**merchantId** `uuid` *required*

A loja.

**per\_page** `integer` (default: 30)

Quantos descontos por página, de `30` a `250`. Valores fora dessa faixa são ajustados para o limite mais próximo.

**next** `string`

Cursor da próxima página, vindo do header `X-Next-Cursor` ou do `Link` da resposta anterior.

**previous** `string`

Cursor da página anterior, vindo do header `X-Previous-Cursor`. Não envie junto com `next`: a API responde `400`.

```bash cURL theme={null}
curl --include 'https://api.deliveryvip.com.br/merchant/v3/{merchantId}/discounts?per_page=50' \
  --header 'Authorization: Bearer {token}'
```

```js Node.js theme={null}
const discounts = []
let cursor = null

do {
  const url = new URL(`https://api.deliveryvip.com.br/merchant/v3/${merchantId}/discounts`)
  url.searchParams.set('per_page', '50')
  if (cursor) url.searchParams.set('next', cursor)

  const response = await fetch(url, { headers: { Authorization: `Bearer ${token}` } })
  if (response.status === 204) break

  discounts.push(...(await response.json()))
  cursor = response.headers.get('X-Next-Cursor')
} while (cursor)
```

```python Python theme={null}
discounts, cursor = [], None

while True:
    params = {"per_page": 50, **({"next": cursor} if cursor else {})}
    response = requests.get(
        f"https://api.deliveryvip.com.br/merchant/v3/{merchant_id}/discounts",
        headers={"Authorization": f"Bearer {token}"},
        params=params,
    )
    if response.status_code == 204:
        break
    discounts.extend(response.json())
    cursor = response.headers.get("X-Next-Cursor")
    if not cursor:
        break
```

Sem `X-Next-Cursor` na resposta, você chegou à última página. Mais detalhes em [paginação](/docs/inicio/conceitos/paginacao.md).

## Resposta

Cada item é um [objeto desconto](/docs/guides/merchant/discount/obter-detalhes-do-desconto.md#resposta).

```json 200 OK theme={null}
[
  {
    "id": "157d21eb-2055-4429-9162-ad824d4a764d",
    "createdAt": "2023-08-02T20:32:47-03:00",
    "startsAt": "2024-04-28T17:18:00-03:00",
    "type": "SMART",
    "name": "Desconto 10%",
    "status": "ACTIVE",
    "rules": {
      "valueType": "PERCENTAGE",
      "value": 10.0,
      "minimumOrderValue": 32.0,
      "usageLimit": 0,
      "usagePerCustomer": "MANY",
      "discountType": "SUBTOTAL"
    },
    "options": ["NON_PROMOTION_PRODUCTS"]
  }
]
```

## Erros

| Status | Quando |
| - | - |
| `400 Bad Request` | `next` e `previous` enviados juntos. |
| `403 Forbidden` | A loja não contratou o módulo de descontos. |
| `404 Not Found` | O `merchantId` não autorizou o seu app. |


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