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

> Liste os planos de cobrança visíveis para o parceiro ou para a revenda.

`GET /partner/v2/{partnerId}/plans` lista os planos do parceiro, do mais recente para o mais antigo, em qualquer status.

| `partnerId` | Planos retornados |
| - | - |
| ID do parceiro | Todos, com visibilidade `PUBLIC`, `RESALE` ou `DIRECT_MERCHANT`. |
| ID de uma revenda | Os planos do parceiro da revenda com visibilidade `PUBLIC` ou `RESALE`: os que valem para as lojas dela. |

| Status | Quando |
| - | - |
| `200 OK` | Lista de planos. |
| `204 No Content` | Nenhum plano. |
| `403 Forbidden` | `partnerId` fora do alcance do token (`Invalid partnerId ...`). |

## Requisição

```bash cURL theme={null}
curl 'https://api.deliveryvip.com.br/partner/v2/{partnerId}/plans' \
  --header 'Authorization: Bearer {token}'
```

```js Node.js theme={null}
const response = await fetch(`https://api.deliveryvip.com.br/partner/v2/${partnerId}/plans`, {
  headers: { Authorization: `Bearer ${token}` },
})
const plans = response.status === 204 ? [] : await response.json()
const usable = plans.filter((plan) => plan.status === 'AVAILABLE')
```

```python Python theme={null}
response = requests.get(
    f"https://api.deliveryvip.com.br/partner/v2/{partner_id}/plans",
    headers={"Authorization": f"Bearer {token}"},
)
plans = [] if response.status_code == 204 else response.json()
usable = [plan for plan in plans if plan["status"] == "AVAILABLE"]
```

```json Resposta (200) theme={null}
[
  {
    "id": "aa67c98c-d81f-5a9c-b0bc-26caa0051aea",
    "name": "Plano Base",
    "standard": true,
    "code": "HSAROW",
    "status": "AVAILABLE",
    "visibility": "PUBLIC",
    "features": [
      { "featureType": "DELIVERY_TAKEOUT", "inclusionType": "INCLUDED" },
      { "featureType": "INDOOR_VIEWER", "inclusionType": "INCLUDED" },
      { "featureType": "DELIVERYBOT_ASSISTANT", "inclusionType": "ADDITIONAL" },
      { "featureType": "INDOOR_QRCODE", "inclusionType": "ADDITIONAL" }
    ]
  }
]
```

Os campos estão em [Definições de planos](/docs/guides/partner/plans/definicoes.md).

> [!TIP]
>
> A listagem traz também planos `DRAFT` e `UNAVAILABLE`. Filtre por `status: AVAILABLE` antes de oferecer um plano para assinatura.


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