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

# Listando faturas das revendas

> Resumo mensal das faturas por revenda, com totais da revenda, de cada plano e de cada tipo de item.

`GET /partner/v2/{partnerId}/resales/invoices` traz um resumo por revenda do parceiro: quanto o parceiro paga à DeliveryVip pelas lojas daquela revenda e quanto cobra da revenda. Entram só as lojas vinculadas a revendas; as lojas diretas ficam de fora (use [Faturas das lojas diretas](/docs/guides/partner/invoices/utilizando-a-api/listando-merchants-invoices.md)).

O endpoint é exclusivo do **parceiro**: com o ID de uma revenda no `partnerId`, ou com token de revenda, a resposta é `403`.

| Status | Quando |
| - | - |
| `200 OK` | Um resumo por revenda. |
| `204 No Content` | Nenhuma fatura de loja de revenda no período (inclusive parceiro sem revendas). |
| `403 Forbidden` | `partnerId` é de uma revenda ou está fora do alcance do token. |

> [!WARNING]
>
> O bloco **`RECEIVABLE`** só é enviado quando a tabela de preços de recebíveis está habilitada para o parceiro. Sem ela, os arrays `totalPrice` do resumo, de cada plano e de cada item trazem apenas **`PAYABLE`**. Não acesse os blocos pela posição (`totalPrice[1]`): procure pelo campo `type`.

## Requisição

**partnerId** `uuid` *required*

ID do parceiro.

**year** `integer`

Ano. Sem ele, vale o ano corrente.

**month** `integer`

Mês, de 1 a 12. Sem ele, vale o mês corrente.

```bash cURL theme={null}
curl 'https://api.deliveryvip.com.br/partner/v2/{partnerId}/resales/invoices?year=2025&month=4' \
  --header 'Authorization: Bearer {token}'
```

```js Node.js theme={null}
const response = await fetch(
  `https://api.deliveryvip.com.br/partner/v2/${partnerId}/resales/invoices?year=2025&month=4`,
  { headers: { Authorization: `Bearer ${token}` } },
)
const summaries = response.status === 204 ? [] : await response.json()

for (const summary of summaries) {
  const receivable = summary.totalPrice.find((price) => price.type === 'RECEIVABLE')
  console.log(summary.resaleId, receivable?.usageTimeValue)
}
```

```python Python theme={null}
response = requests.get(
    f"https://api.deliveryvip.com.br/partner/v2/{partner_id}/resales/invoices",
    params={"year": 2025, "month": 4},
    headers={"Authorization": f"Bearer {token}"},
)
summaries = [] if response.status_code == 204 else response.json()

for summary in summaries:
    receivable = next((p for p in summary["totalPrice"] if p["type"] == "RECEIVABLE"), None)
    print(summary["resaleId"], receivable and receivable["usageTimeValue"])
```

## Resposta

```json Resposta (200) theme={null}
[
  {
    "resaleId": "6bbf7d1e-5563-4a09-aa30-809e8aa46d96",
    "month": "4",
    "year": "2025",
    "totalPrice": [
      { "type": "PAYABLE", "value": 175.0, "usageTimeValue": 137.5, "currency": "BRL" },
      { "type": "RECEIVABLE", "value": 405.0, "usageTimeValue": 310.0, "currency": "BRL" }
    ],
    "plans": [
      {
        "id": "b01ea148-c315-486f-8511-57c72327d114",
        "name": "Plano Delivery",
        "code": "DELIVERY",
        "totalSubscriptions": 2,
        "totalPrice": [
          { "type": "PAYABLE", "value": 100.0, "usageTimeValue": 75.0, "currency": "BRL" },
          { "type": "RECEIVABLE", "value": 230.0, "usageTimeValue": 172.5, "currency": "BRL" }
        ]
      }
    ],
    "items": [
      {
        "itemType": "DELIVERY_TAKEOUT",
        "quantity": 3,
        "totalPrice": [
          { "type": "PAYABLE", "value": 150.0, "usageTimeValue": 125.0, "currency": "BRL" },
          { "type": "RECEIVABLE", "value": 300.0, "usageTimeValue": 250.0, "currency": "BRL" }
        ]
      }
    ]
  }
]
```

**resaleId** `uuid`

ID da revenda.

**month** `string | integer`

Mês consultado. Texto quando enviado na query; número quando omitido.

**year** `string | integer`

Ano consultado, com a mesma regra.

**totalPrice** `object[]`

Totais da revenda no mês. `PAYABLE`: o que o parceiro paga à DeliveryVip pelas lojas da revenda. `RECEIVABLE`: o que o parceiro cobra da revenda. Cada bloco tem `type`, `value` (mês cheio), `usageTimeValue` (proporcional) e `currency`.

**plans** `object[]`

Totais por plano usado pelas lojas da revenda.

**propriedades**

**id** `uuid`

ID do plano.

**name** `string`

Nome do plano.

**code** `string`

Código do plano.

**totalSubscriptions** `integer`

Quantidade de lojas da revenda nesse plano.

**totalPrice** `object[]`

Blocos de preço do plano.

**items** `object[]`

Totais por tipo de item, somando as lojas da revenda.

**propriedades**

**itemType** `string`

Tipo do item. Veja [Definições de faturas](/docs/guides/partner/invoices/definicoes.md#tipos-de-item).

**quantity** `integer`

Quantidade somada.

**totalPrice** `object[]`

Blocos de preço do item.


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